Bash

如何檢查是否沒有提供給命令的參數?

  • October 4, 2016

如何檢查是否$*為空?換句話說,如何檢查是否沒有提供給命令的參數?

要檢查是否沒有為命令提供參數,請檢查$#變數的值,

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並閱讀名為特殊參數的主題

引用自:https://unix.stackexchange.com/questions/25945