このコードがあります -
#getoptDemo.sh
usage()
{
echo "usage: <command> options:<w|l|h>"
}
while getopts wlh: option
do
case $option in
(w)
name='1';;
(l)
name='2';;
(h)
name='3';;
(*)
usage
exit;;
esac
done
print 'hi'$name
(オプションなしで)実行すると、関数を呼び出す代わりにbash getoptDemos.sh
印刷されます。 w、h、l以外のオプションが指定された場合は、useを呼び出します。これにより、オプションが指定されていないと機能しません。hi
usage
?
代わりにを使ってみましたが、\?
欲しいものを手に入れることはできません。私の言葉はすべてがうまくいくと言います。:
*
docs
getopt
?
私は何が間違っていましたか?
ベストアンサー1
getopts
オプションを順番に進んでください。それがまさにそのことです。ユーザーがオプションを渡さない場合、最初の呼び出しでgetopts
whileループが終了します。
引数を使用するオプションがない場合、値は渡されたOPTIND
オプションの数を示します。一般的に言えば、OPTIND
オプションではなく引数(オペランド)ではなく、オプションまたはオプション引数に対する引数の数です。
while getopts …; do …; done
if [ $OPTIND -eq 1 ]; then echo "No options were passed"; fi
shift $((OPTIND-1))
echo "$# non-option arguments"
とにかくオプションがないことを確認するのではなく、name
-settingオプションが渡されていない場合です。だから設定されていないことを確認し、name
まず設定を解除してください。。