KSH:搜索多个子串的字符串

时间:2012-10-25 13:20:36

标签: string substring ksh

我有一种简单的方法可以在一个字符串中搜索多个子字符串:

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

(此处在[{1}}中搜索string 1string 2string 3

如何简化此操作,以便只进行一次检查?

我试过了:

string

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

注意:此处指定的三个字符串将始终按此顺序排列,因此我可以简化它。

1 个答案:

答案 0 :(得分: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

要测试一种模式,请参阅this FAQ