2013-08-19 53 views
10

這可能不是最引人深思的問題,但卻激起了我的好奇心。我一直無法在網上找到任何答案(更不用說明確的答案)。爲什麼9之後的bash命令行參數需要大括號?

在閱讀高級Shell腳本時,我遇到了關於命令行位置參數的this section,其中指出第九個參數之後的任何內容必須被$ {}(變量引用/替換的較長形式)包圍。

簡而言之,爲什麼你必須引用命令行參數十(及以上)爲${10}, ${11}...而不是$10, $11, ...

+11

歷史;原始的Bourne shell將'$ 12'解釋爲'$ {1} 2'(並且不允許'$ {12}'AFAICR)。 –

回答

6

具體而言,您的問題涉及「位置參數」。使用$ var而不是$ {var}是bash中的簡寫形式。在大多數情況下,它運作良好。 Bash變量必須以字母或下劃線開頭。它內部將以數字開頭的變量視爲「位置參數」。當bash檢測到位置參數時,它只會查看第一個數字,這就是爲什麼$ 10返回$ 1「0」的原因。通過調用$ {10},您正在指示bash查看完整變量,而不是第一位數字的內置默認值。

至於爲什麼這樣呢?我不知道。我的猜測是已經擴展的遺留實現。 「誰會需要比......更多?」

相關問題