2016-02-09 64 views
0

所以我在寫一個bash shell腳本,我的前幾行看起來是這樣的:[:缺少`]在bash腳本」

if ! [ $# -eq 0 || $# -eq 1 ]; then 
    echo -e "Usage: myScriptName [\e[3mdir\e[0m] [\e[3m-f file\e[0m]" 
    exit 1 
fi 

但是當我運行它,它說:「[:失蹤`]'」。我沒有看到失蹤],除了;感動],所以我錯過了什麼?

+2

[ShellCheck](http://www.shellcheck.net/)可能會有所幫助。 – kojiro

+1

由於'||'分隔了兩個命令,'['接收'$#','-eq'和'0'作爲參數的值。爲了保持語法的錯覺,'[''需要一個「匹配」'''作爲它的最終參數。 – chepner

回答

7

在單支撐測試表達式中不能使用像||這樣的運算符。您必須做

! [[ $# -eq 0 || $# -eq 1 ]] 

! { [ $# -eq 0 ] || [ $# -eq 1 ]; } 

! [ $# -eq 0 -o $# -eq 1 ] 

的雙支柱關鍵字是一個bash的表達,並不會與其他POSIX殼工作,但它有一些好處,比如能夠更容易地完成這些操作。

當然,有很多方法來測試傳遞參數的數量。 $2的存在也會回答你的問題。