我编写此脚本以查找仅包含*
和!
的字符串
但是,它找不到任何只包含*
的字符串
我无法弄清楚我的正则表达式有什么问题,有人可以帮忙吗?谢谢!
#!/bin/bash
arr=('!!' '!' '*' '*!' '**' '**!' '!*!' '***' 'bla!' )
echo star is "${arr[2]}"
for i in ${arr[@]}; do if [[ "$i" == [\!\*]* ]] ; then echo match "$i"; fi; done
答案 0 :(得分:0)
试
for i in "${arr[@]}"; do if [[ "$i" =~ "^[\!\*]*$" ]] ; then echo match "$i"; fi; done
编辑:(对于丹尼斯)
$ for i in "${arr[@]}"; do if [[ "$i" =~ "^[\!\*]*$" ]] ; then echo match "$i"; fi; done
match !!
match !
match *
match *!
match **
match **!
match !*!
match ***
$ for i in "${arr[@]}"; do if [[ "$i" =~ ^[\!\*]*$ ]] ; then echo match "$i"; fi; done
match !!
match !
match *
match *!
match **
match **!
match !*!
match ***
答案 1 :(得分:0)
您只需要在for
语句中引用您的数组:
for i in "${arr[@]}"; do if [[ "$i" == [*!]* ]] ; then echo match "$i"; fi; done
如果你把感叹号放在第二位,你就不需要逃避它(星号在任何情况下都不需要转义)。
顺便说一句,那不是正则表达式。这是一个shell globbing表达。