bash为什么与regexp上的数字不匹配

时间:2015-08-21 00:23:03

标签: bash

我很好奇为什么这段代码不匹配 - 采取“then”分支。回声“不匹配”你能告诉我吗?

 #!/bin/bash

 suffix="2"

 if [[ $suffix =~ "^[0-9]+$" ]]
 then
    echo "match"
 else
    echo "no match"
 fi

1 个答案:

答案 0 :(得分:3)

在现代(3.2+)版本的bash中引用==~操作在[[ ]]内的右侧使得字符串文字 - 即。不再是正则表达式或模式。

来自the manual

  

可以引用模式的任何部分以强制引用的部分匹配为字符串。

对于支持=~的版本中的一致行为(如果需要支持3.2之前的版本),接受的最佳做法是将正则表达式置于变量中,并在右侧使用该变量未加引号=~

re='^[0-9]+$'
[[ $suffix =~ $re ]]