indyK1ng:「#」不被視爲註釋,因爲「$」轉義下一個字符。 「$#」是一個內部變量,表示當前上下文中存在的位置參數的數量。這可以認爲是shell腳本的命令行參數的數量,但是可以使用內置的「set - [args]」來重置該數組。
Joakim Elofsson:if語句的整體結構是正確的,「;」只在「那時」之前和「fi」之前需要,如果這些不在單獨的行中列出的話。
問題是「0」和括號之間的空格。 Bash要求用於限定條件表達式的括號至少要在表達式中留出一個空格。
if [ $# -eq 0] || [ $# -gt 2 ] # Wrong
if [ $# -eq 0 ] || [ $# -gt 2 ] # Correct
在附加說明中,可以組合兩個條件表達式。運營商協會將確保一切正常。
if [ $# -eq 0 -a $# -gt 2 ] # Even Better
我傾向於使用雙括號提供的擴展功能進行表達式評估。請注意,兩個評估的組合是由不同的操作員完成的。我覺得這更可讀。
if [[ $# -eq 0 || $# -gt 2 ]] # My preference
在腳本的稍後部分中,不建議使用單括號作爲整數加法。單個括號正在評估表達式爲布爾值。雙元素用於整數數學。
echo $[ $1 + $1 ] # Evaluation of an expression
echo $(($1 + $1)) # Integer math
有點歷史:這是因爲'['歷史上不是shell內置的,而是一個單獨的可執行文件,它接收expresson作爲參數並返回結果。如果你沒有用空格來包圍'['',那麼shell會在$ PATH中搜索一個不同的文件名(並且沒有找到它)。 – 2009-06-24 01:13:47