我有一种简单的方法可以在一个字符串中搜索多个子字符串:
if [[ $string = *"string 1"* && $string = *"string 2"* && $string = *"string 3"* ]]
(此处在[{1}}中搜索string 1
,string 2
和string 3
。
如何简化此操作,以便只进行一次检查?
我试过了:
string
和
if [[ $string = *"string 1"*"string 2"*"string 3"* ]]
注意:此处指定的三个字符串将始终按此顺序排列,因此我可以简化它。
答案 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