2

我有一个简单的方法来搜索单个字符串中的多个子字符串:

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

(这里搜索string 1和)。string 2string 3string

我怎样才能简化这一点,以便只有一张支票?

我试过了:

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

if [[ $string = *"string 1*string 2*string 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

要仅测试一种模式,请参阅此常见问题解答

于 2012-10-25T14:06:00.787 回答