if
和grep -Eq
arg='abc'
if echo "$arg" | grep -Eq 'a.c|d.*'; then
echo 'first'
elif echo "$arg" | grep -Eq 'a{2,3}'; then
echo 'second'
fi
在哪里:
-q
防止grep
产生输出,它只是产生退出状态
-E
启用扩展正则表达式
我喜欢这个,因为:
- 它是 POSIX 7
- 它支持扩展的正则表达式,不像 POSIX
case
- 当 case 很少时,语法比 case 语句更简洁
一个缺点是这可能比case
调用外部grep
程序要慢,但我倾向于在使用 Bash 时最后考虑性能。
case
是 POSIX 7
Bash 默认情况下似乎遵循 POSIX,没有https://stackoverflow.com/a/4555979/895245shopt
提到的那样
这是引用:http ://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 “案例条件构造”部分:
条件构造案例应执行与多个模式中的第一个对应的复合列表(请参阅模式匹配符号)[...] 具有相同复合列表的多个模式应由“|”分隔 象征。[...]
案例构造的格式如下:
case word in
[(] pattern1 ) compound-list ;;
[[(] pattern[ | pattern] ... ) compound-list ;;] ...
[[(] pattern[ | pattern] ... ) compound-list]
esac
然后http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13部分“2.13。模式匹配符号”只提到?
,*
和[]
.