2

この単純なbashスクリプトを見てください。

#!/bin/bash
if [[ $1 =~ a* ]]; then
 echo "match"
fi

最初の引数として何が提供されているかに関係なく、常に「一致」を出力するようです。(bash 3.2および4.xでテスト済み)

質問:
私が間違っていることは何ですか?

4

2 に答える 2

5

正規表現a*は、「文字aの0回以上の出現に一致する」ことを意味します。したがって、を入力するfooと、ゼロaが一致するため、式は真になります。を入力するbarと、1つaが一致するため、これも当てはまります。入力した入力はすべて一致します。

a+文字の1つ以上の出現箇所を一致させたい場合は、に変更してみてくださいa

$ [[ foo =~ a+ ]] && echo match || echo "no match"
no match

$ [[ bar =~ a+ ]] && echo match || echo "no match"
match
于 2013-02-27T14:30:52.683 に答える
1

推測するだけです。「a*」は「a」に0回以上一致します。これは、ほとんどすべての文字列に一致します。したがって、「a」を1回以上一致させるには、代わりに「a+」を使用する必要があると思います。また、達成したい内容に応じて、行の開始/終了時に一致するように「^」または「$」を追加することもできます。

乾杯、アレックス

編集:ああ、また遅すぎる;-)少なくとも私の推測は正しかったようだ;-)

于 2013-02-27T14:33:48.977 に答える