回答:
コマンドに引数が指定されていないかどうかを確認するには、$#
変数の値を確認してから、
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
使用したい場合$*
(好ましくありません)、
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
いくつかの説明:
2番目のアプローチは、位置パラメータの展開*
が1から始まる位置パラメータに拡張されるため、好ましくありません。二重引用符内で展開が行われると、各パラメーターの値がIFS特殊変数の最初の文字で区切られた単一の単語に展開されます。つまり、文字列が構築されます。したがって、余分なオーバーヘッドがあります。
一方#
、位置パラメータの数に展開されます。
例:
$ command param1 param2
ここに、
値が$#
2であるとの値は、$*
IFSが設定されていない場合には、(引用符なし)文字列「のparam1 PARAM2」です。IFSが設定されていない場合、パラメーターはスペースで区切られるため
詳細についてはman bash
、特別なパラメーターという名前のトピックをお読みください
[ $# -eq 0 ]
最も一般的な形式のIMEです。"$#"
空にできるエッジケースが$IFS
あります。空の引数が1つある場合、または空の引数が複数あり空である場合。
"$*"
発現は、と評価されます""
唯一の場合は""
パラメータが渡されました。しかし、ほとんどの場合、おそらくとにかく気にしないでしょう。
bash
。sh
スクリプトの実行に使用しています。AFAIKはで==
のみ有効ですbash
。
if ! (($#)); ...
、またはif (($# == 0)); ...
、またはif [ $# -eq 0 ]; ...
、または! (($#)) && ...
、または(($#)) || ...