回答:
コマンドに引数が指定されていないかどうかを確認するには、$#変数の値を確認してから、
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 ]; ...、または! (($#)) && ...、または(($#)) || ...