bash为什么与regexp上的数字不匹配
我很好奇为什么这个代码不匹配——以“then”分支为例。它呼应“不匹配”你能告诉我吗bash为什么与regexp上的数字不匹配,bash,Bash,我很好奇为什么这个代码不匹配——以“then”分支为例。它呼应“不匹配”你能告诉我吗 #!/bin/bash suffix="2" if [[ $suffix =~ "^[0-9]+$" ]] then echo "match" else echo "no match" fi 在bash的现代(3.2+)版本中,引用=或=~操作的右侧可以使字符串文字化,即不再是正则表达式或模式 发件人: 模式的任何部分都可以被引用,以强制引用的部分作为字符串进行匹配 为了在支
#!/bin/bash
suffix="2"
if [[ $suffix =~ "^[0-9]+$" ]]
then
echo "match"
else
echo "no match"
fi
在bash的现代(3.2+)版本中,引用
=
或=~
操作的右侧可以使字符串文字化,即不再是正则表达式或模式
发件人:
模式的任何部分都可以被引用,以强制引用的部分作为字符串进行匹配
为了在支持
=~
的版本之间保持一致的行为(如果需要支持3.2之前的版本),公认的最佳做法是将正则表达式放入变量中,并使用=~
右侧未加引号的变量:
re='^[0-9]+$'
[[ $suffix =~ $re ]]
在bash的现代(3.2+)版本中,引用
=
或=~
操作的右侧可以使字符串文字化,即不再是正则表达式或模式
发件人:
模式的任何部分都可以被引用,以强制引用的部分作为字符串进行匹配
为了在支持
=~
的版本之间保持一致的行为(如果需要支持3.2之前的版本),公认的最佳做法是将正则表达式放入变量中,并使用=~
右侧未加引号的变量:
re='^[0-9]+$'
[[ $suffix =~ $re ]]
在bash的现代(3.2+)版本中,引用
=
或=~
操作的右侧可以使字符串文字化,即不再是正则表达式或模式
发件人:
模式的任何部分都可以被引用,以强制引用的部分作为字符串进行匹配
为了在支持
=~
的版本之间保持一致的行为(如果需要支持3.2之前的版本),公认的最佳做法是将正则表达式放入变量中,并使用=~
右侧未加引号的变量:
re='^[0-9]+$'
[[ $suffix =~ $re ]]
在bash的现代(3.2+)版本中,引用
=
或=~
操作的右侧可以使字符串文字化,即不再是正则表达式或模式
发件人:
模式的任何部分都可以被引用,以强制引用的部分作为字符串进行匹配
为了在支持
=~
的版本之间保持一致的行为(如果需要支持3.2之前的版本),公认的最佳做法是将正则表达式放入变量中,并使用=~
右侧未加引号的变量:
re='^[0-9]+$'
[[ $suffix =~ $re ]]
引用太多了!(关于巴什,你们不常听到这样的说法,是吗?)狗走了,我才意识到,从以前开始,它最终会沉沦的。我可以发誓在4.0之前的BASH版本中它是有效的,试试3.1.17,它是有效的(匹配)!--用引号。这就是我以前跑步的地方。嘿,真是个惊喜。我需要去查看变更日志…引用太多了!(关于巴什,你们不常听到这样的说法,是吗?)狗走了,我才意识到,从以前开始,它最终会沉沦的。我可以发誓在4.0之前的BASH版本中它是有效的,试试3.1.17,它是有效的(匹配)!--用引号。这就是我以前跑步的地方。嘿,真是个惊喜。我需要去查看变更日志…引用太多了!(关于巴什,你们不常听到这样的说法,是吗?)狗走了,我才意识到,从以前开始,它最终会沉沦的。我可以发誓在4.0之前的BASH版本中它是有效的,试试3.1.17,它是有效的(匹配)!--用引号。这就是我以前跑步的地方。嘿,真是个惊喜。我需要去查看变更日志…引用太多了!(关于巴什,你们不常听到这样的说法,是吗?)狗走了,我才意识到,从以前开始,它最终会沉沦的。我可以发誓在4.0之前的BASH版本中它是有效的,试试3.1.17,它是有效的(匹配)!--用引号。这就是我以前跑步的地方。嘿,真是个惊喜。我需要查看changelog…这对
=
来说是有意义的,因为它根据右侧的语法决定是进行精确匹配还是模式匹配。我想知道为什么=~
是这样工作的,因为它是专门定义用来进行regexp匹配的。@Barmar,有几件事。首先,=~
以这种方式使用,为您提供一个未经编排的匹配。第二,您只能引用=~
表达式右侧的一部分,以使某些字符被视为文字字符,而另一些字符被视为正则表达式。@Charles请查看问题下的最后一条注释(如果可以,请运行它)@Barmar,…示例:[[$foo=~^[0-9a-f]+-“$var”]
,匹配仅以十六进制数字和破折号开头的精确/文字字符串。这是有意义的,因为bash中没有类似于preg_quote()
的内容。这对于=
来说是有意义的,因为它根据右侧的语法决定是进行精确匹配还是模式匹配。我想知道为什么=~
是这样工作的,因为它是专门定义用来进行regexp匹配的。@Barmar,有几件事。首先,=~
以这种方式使用,为您提供一个未经编排的匹配。第二,您只能引用=~
表达式右侧的一部分,以使某些字符被视为文字字符,而另一些字符被视为正则表达式。@Charles请查看问题下的最后一条注释(如果可以,请运行它)@Barmar,…示例:[[$foo=~^[0-9a-f]+-“$var”]
,匹配仅以十六进制数字和破折号开头的精确/文字字符串。这是有意义的,因为bash中没有类似于preg_quote()
的内容。这对于=
来说是有意义的,因为它根据右侧的语法决定是进行精确匹配还是模式匹配。我想知道为什么=~
是这样工作的,因为它是专门定义用来进行regexp匹配的。@Barmar,有几件事。首先,=~
以这种方式使用,为您提供一个未经编排的匹配。其次,您可以只引用=~
表达式右侧的一部分,以将某些字符视为文字字符,而将其他字符视为正则表达式。@Charles pl