0

Ashスクリプトを作成していて、入力変数が「?」に等しいかどうかを検出しようとしています。か否か。これを行うには使用するのが最善であることがわかりましたがcase、これを機能させることができません。私のコードは次のとおりです。

case $@ in
*?*) usage
    operationSucceeded
    exit;;
  *) echo "Unknown argument: $@"
    usage
    operationFailed
    exit $E_OPTERROR;;   # DEFAULT\
esac

最初のオプションは常にトリガーされ?ますが、が変数の場合にのみトリガーし、他のすべてのオプションはトリガーします。

4

1 に答える 1

2

への変更

 case $@ in
     *[\?]* ) usage 
    .....
  easc

'\'は必要ないかもしれませんが、害はありません。

より一般的な意味で[ABC]は、は文字クラスと呼ばれ、内にリストされている単一の文字のいずれかに一致します[ ]。したがって、*[\?]*では、「任意の数の文字(0文字を含む)、続いてCharクラス[\?](この場合は「?」文字のみ)、その後に0個以上の文字」と言います。

IHTH

于 2013-01-23T15:03:19.437 に答える