私はヘルプスイッチが私のプログラムに-?
、-h
、または--help
のためにそれをegreppingすることによって渡されたかどうか確認しようとしています。ない場合は、単に前方Iそうのような別のスクリプトに至るまで、いくつかの理由Bash:なぜこの文字列のegreppingが成功するのですか?
if echo "$*" | egrep -q -- '-?|-h|--help'; then
help
exit 0
fi
exec another/script "[email protected]"
、これは私のシステム上で動作していないようです。 egrep
が空の文字列の検索で正常に返されたという事実まで、私はそれを追跡しました。これは0
を印刷します:
echo '' | egrep -q -- '-?|-h|--help'
echo $?
なぜこれが起こるんし、私はそれを修正するために何ができるのでしょうか?ありがとう!
編集:
echo -h | egrep -- -?
echo $? # 0
を定期的にgrep
でそれを使用すると失敗します:はまた、ちょうどこのコマンドが成功する一方で気づい
echo -h | grep -- -?
echo $? # 1
を私は拡張のgrepを想定しています特殊文字として?
を扱っていますか?
正規表現の中で何かを意味するのではなく、 "一文字"を意味するのではなく "0または1"を意味するので、 ' - ?' 'または空の文字列と空の文字列*は常に一致しますか? –
あなたが与える 'man bash'への言及は、正規表現ではなく、globを記述します。 –
* man bash *への参照は、* Pattern Matching *への参照でした。 - ありがとうございました。はい、私は明確ではありませんでした。 –