空であることを確認する方法は$*
?つまり、コマンドに引数が指定されていないことをどのように確認できますか?
答え1
コマンドに引数が指定されていないことを確認するには、$#
変数の値を確認してください。
if [ $# -eq 0 ]; then
>&2 echo "No arguments provided"
exit 1
fi
$*
(好まない) 次に、
if [ "$*" == "" ]; then
>&2 echo "No arguments provided"
exit 1
fi
いくつかの説明:
2番目のアプローチは、位置パラメータ拡張から*
拡張が1から位置パラメータまで開始されるため、推奨されません。二重引用符内で拡張が発生すると、IFS特殊変数の最初の文字で区切られた各引数の値を使用して単一の単語に展開されます。これは文字列が構成されることを意味します。したがって、追加のオーバーヘッドが発生します。
一方、#
位置パラメータの数まで拡張されます。
例:
$ command param1 param2
ここでは、
IFS が設定されていない場合、値は$#
2 で、値は$*
文字列 "param1 param2" (引用符を除く) です。 IFSが設定されていない場合、パラメーターはスペースで区切られているためです。
詳しくは、man bash
次のタイトルの記事をご覧ください。特殊パラメータ
答え2
特定のパラメータが欠落している場合にのみ興味がある場合、パラメータの置換大きい:
#!/bin/bash
# usage-message.sh
: ${1?"Usage: $0 ARGUMENT"}
# Script exits here if command-line parameter absent,
#+ with following error message.
# usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
答え3
これはあなたが議論の余地がないことを知る方法の一つです。
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi