3 回答

TA貢獻1830條經驗 獲得超9個贊
就像任何其他簡單命令一樣,[ ... ]或者test其參數之間需要空格。
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
要么
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
意見建議
在Bash中時,最好使用[[ ]]代替,因為它不會對單詞的變量進行單詞拆分和路徑名擴展,除非引用是表達式的一部分,否則可能不需要引用。
[[ $# -ne 1 ]]
它還具有其他一些功能,例如無引號的條件分組,模式匹配(帶有的擴展模式匹配extglob)和正則表達式匹配。
以下示例檢查參數是否有效。它允許一個或兩個參數。
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
對于純算術表達式,使用(( ))一些仍可能會更好,但它們仍然可能在[[ ]]與它的算術運算符喜歡-eq,-ne,-lt,-le,-gt,或-ge通過將表達為一個字符串參數:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
如果您還需要將其與其他功能結合使用,那將很有幫助[[ ]]。
退出腳本
在將無效參數傳遞給腳本時使腳本退出也是合乎邏輯的。這已經提出的意見通過ekangas但有人編輯這個答案與把它-1作為返回值,所以我還不如做是正確的。
-1盡管沒有被Bash接受為Bash的參數,但exit沒有明確記錄,也沒有權利用作常見建議。 64也是最正式的值,因為它是在sysexits.hwith中定義的#define EX_USAGE 64 /* command line usage error */。大多數類似的工具ls也會返回2無效的參數。我也曾經返回2過自己的腳本,但是最近我不再真正在意它,只使用1了所有錯誤。但讓我們放在2這里,因為它是最常見的,并且可能不是特定于操作系統的。
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi

TA貢獻1719條經驗 獲得超6個贊
如果要處理數字,最好使用算術表達式。
if (( $# != 1 )); then
echo "Illegal number of parameters"
fi

TA貢獻1757條經驗 獲得超7個贊
在[]上:!=,=,== ...是字符串比較運算符,-eq,-gt ...是算術二進制運算符。
我會用:
if [ "$#" != "1" ]; then
要么:
if [ $# -eq 1 ]; then
- 3 回答
- 0 關注
- 927 瀏覽
添加回答
舉報