2

単一の文字列で複数の部分文字列を検索する簡単な方法があります。

if [[ $string = *"string 1"* && $string = *"string 2"* && $string = *"string 3"* ]]

string 1(ここでは、string 2およびstring 3を検索string)。

これを単純化して、チェックが 1 つだけになるようにするにはどうすればよいでしょうか。

私はもう試した:

if [[ $string = *"string 1"*"string 2"*"string 3"* ]]

if [[ $string = *"string 1*string 2*string 3"* ]]

注: ここで指定する 3 つの文字列は常にこの順序になるため、単純化できます。

4

1 に答える 1

1

&ksh93 では、サブパターン区切り文字を使用できます。

$ [[ abcdefg == @(*bcd*&*cde*&*efg*) ]]; echo $?
0
$ [[ abcdefg == @(*bcdz*&*cde*&*efg*) ]]; echo $?
1

残念ながら、ksh93 だけがこれを持っています。mksh、zsh、および bash では、拡張マッチングを使用して、否定サブパターンにより、この DeMorgan のような同等性が可能になります。

$ [[ abcdefg == !(!(*bcd*)|!(*cde*)|!(*efg*)) ]]; echo $?
0
$ [[ abcdefg == !(!(*bcdz*)|!(*cde*)|!(*efg*)) ]]; echo $?
1

1 つのパターンだけをテストするには、この FAQを参照してください

于 2012-10-25T14:06:00.787 に答える