Bash
如何檢查是否沒有提供給命令的參數?
如何檢查是否
$*
為空?換句話說,如何檢查是否沒有提供給命令的參數?
要檢查是否沒有為命令提供參數,請檢查
$#
變數的值,if [ $# -eq 0 ]; then echo "No arguments provided" exit 1 fi
如果你想使用
$*
(不推薦)那麼,if [ "$*" == "" ]; then echo "No arguments provided" exit 1 fi
一些解釋:
第二種方法並不可取,因為位置參數擴展
*
會擴展到位置參數,從一個開始。當擴展出現在雙引號內時,它會擴展為一個單詞,每個參數的值由 IFS 特殊變數的第一個字元分隔。這意味著構造了一個字元串。所以有額外的成本。另一方面
#
擴展到位置參數的數量。例子:
$ command param1 param2
這裡,
如果 IFS 未設置,則值為
$#
2,值為$*
字元串“param1 param2”(不帶引號)。因為如果 IFS 未設置,則參數用空格分隔有關更多詳細資訊
man bash
並閱讀名為特殊參數的主題