距秦安縣城東北40公里的一條寬約2公里、長達5公里左右的川道北段開闊處。由於鎮西河谷中雄峙八方的龍山,山高谷深,形勢險要,又有清水河擋道,關隴往來只有透過固關峽,翻越隴坂;沿馬鹿-龍山-隴城鎮一線行走,是由長安到天水唯一較坦蕩的路。當年馬謖駐紮的駐地海拔二百多米,方圓數千平方米,頂部能容萬人,形似農家麥草堆的麥積崖;西北2。5公里的薛李川中,發現的一張鑄有“蜀”字的弩機,現存甘肅省博物館。
當時蜀軍在街亭附近的具體部署是:馬謖、王平、李盛、張休、黃襲等人率約兩萬人封鎖關隴大道,而高詳則率一支偏軍駐紮在街亭北方的列柳城,防止馬謖部側翼被襲。
關於兩位主帥馬謖與王平的矛盾,史書並無明文記載。但是馬謖作為丞相身邊的高階參謀兼親信、從來不曾參與過實戰的精英人士,一下子空降為老將王平的頂頭上司,難免會引起生性“性狹侵疑”(《蜀書·王平傳》)的王平不滿,進而產生矛盾。從心理學角度來說,這種可能性很大。
對於蜀漢的進攻,曹魏在最初的震驚過去之後,立刻作出了反應,派遣右將軍張郃及步騎五萬前往增援。而張郃的部隊經過街亭的時候,恰好碰到了前來阻擊的馬謖。
關於街亭之戰,史書記載都十分簡略。《三國志·明帝紀》只說:“右將軍張郃擊亮於街亭,大破之。亮敗走,三郡平。”《三國志·張郃傳》:“(合)遣督諸軍,拒亮將馬謖於街亭。謖依阻南山,不下據城。合絕其汲道,擊,大破之。”《三國志·諸葛亮傳》:“亮使馬謖督諸軍在前,與合戰於街亭。謖違亮節度,舉動失宜,大為合所破。”《馬謖傳》:“謖,統大眾在前,與魏將張郃戰於街亭,為合所破,士卒離散。”《王平傳》:“謖舍水上山,舉措煩擾,平連規諫謖,謖不能用,大敗於街亭。眾盡星散,惟平所領千人,鳴鼓自持,魏將張郃疑其伏兵,不往逼也。”《資治通鑑》所載材料不出前引內容。
綜合上面各項記載,可以整理出街亭之戰的大致脈絡:對於張郃大軍的出現,馬謖並沒有選擇依城死守,而是將部隊移往南山——也就是海拔兩百米高的麥積崖——進行防守。王平對此屢次進行規勸,但是馬謖並沒有聽從,結果被張郃切斷了水道,導致全軍崩潰。幸虧王平在後搖旗吶喊,張郃怕有埋伏而沒有深入追擊,蜀軍才免於被全殲的命運。
這裡就有幾個疑點。首先一點,馬謖“依阻南山,不下據城”的決策其實並不能說是完全錯誤的。街亭位於魏國縱深之地,本身又是小城,可以想象其規模和堅固程度並不適合固守,何況狹窄的關隴通道到了街亭這一段,就豁然變寬到2公里左右;以馬謖的兵力,在這種寬闊地帶下難以與張郃的五萬大軍相對抗。如果他不捨城上山,而是當道紮營,無險可守,很可能會輸得更慘。
《三國志·明帝紀》注引《魏書》:“是時朝臣未知計所出,帝曰:‘亮阻山為固,今者自來,既合兵書致人之術;且亮貪三郡,知進而不知退,今因此時,破亮必也。乃部勒兵馬步騎五萬拒亮。’”也就是說,張郃自洛陽開出的時間,與諸葛亮自祁山進入隴西的時間大致相當。洛陽距離街亭約700公里,而祁山距街亭約400公里;但是魏軍走的是境內坦途大道,而蜀軍則是在敵境之內,要花時間佔領西縣並確保該地區無殘餘的魏軍干擾補給線,然後方能繼續北進,所以張郃和馬謖抵達街亭的時間相差應該不會太長。換言之,馬謖未必有時間去構築堅固的防禦工事——而這對於堅守是絕對必要的。
於是可以想象,馬謖抵達街亭後的數日之內,張郃的增援部隊就已經逼近街亭。馬謖認為沒有足夠的時間來構築工事,於是果斷決定全軍移往麥積崖紮營——或者說他從一開始就預見到在街亭大道駐守的難度,直接將大營扎到了山上。