shell脚本,如何找到组合!和*

时间:2011-02-14 03:50:17

标签: regex bash

我编写此脚本以查找仅包含*!的字符串 但是,它找不到任何只包含*的字符串 我无法弄清楚我的正则表达式有什么问题,有人可以帮忙吗?谢谢!

#!/bin/bash
arr=('!!' '!' '*' '*!' '**' '**!' '!*!' '***' 'bla!' )
echo  star is "${arr[2]}"

for i in ${arr[@]}; do if [[ "$i" == [\!\*]* ]] ; then echo match "$i"; fi; done

2 个答案:

答案 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表达。