オプションを渡さずにgetoptsを検出する方法は?

オプションを渡さずにgetoptsを検出する方法は?

このコードがあります -

#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を呼び出します。これにより、オプションが指定されていないと機能しません。hiusage

?代わりにを使ってみましたが、\?欲しいものを手に入れることはできません。私の言葉はすべてがうまくいくと言います。:*docsgetopt?

私は何が間違っていましたか?

ベストアンサー1

getoptsオプションを順番に進んでください。それがまさにそのことです。ユーザーがオプションを渡さない場合、最初の呼び出しでgetoptswhileループが終了します。

引数を使用するオプションがない場合、値は渡された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まず設定を解除してください。

おすすめ記事