如何在匹配表达式中编写正则表达式文字?

这个问题是关于在bash下的match表达式中编写正则表达式文字的正确方法

在zsh中,下面的匹配成功了,正如我预期的那样:

% [[ ' 123 ' =~ '^ [0-9]+ $' ]]; echo $?
0

在bash中不是这样的:

$ [[ ' 123 ' =~ '^ [0-9]+ $' ]]; echo $?
1

我知道这场比赛成功了

$ ( regexp='^ [0-9]+ $'; [[ ' 123 ' =~ $regexp ]]; echo $? )
0

...但是它需要将正则表达式分配给中间变量。


我的问题是:如何在bash下的match表达式中编写任意正则表达式文字

jesse_b

最好按照Bash参考手册3.2.4.2条件构造的建议将其放入变量中

将正则表达式存储在shell变量中通常是一种有用的方法,可以避免引用shell特有的字符时出现问题。有时很难在不使用引号的情况下从字面上指定正则表达式,或者在注意外壳程序的引号删除的同时跟踪正则表达式使用的引号。使用shell变量存储模式可以减少这些问题。

但是,为了直接在bash扩展测试中编写它,您需要删除引号并转义空格:

$ [[ ' 123 ' =~ ^\ [0-9]+\ $ ]]; echo $?
0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章