shell [[ ]] 如何使用=~(正则)判断单词边界

新手上路,请多包涵

我用=~判断单词边界

TEST="abc abc ab";if [[ $TEST =~ \<abc\> ]]; then echo 含有单词abc;fi

结果并没有匹配到abc

阅读 4.8k
2 个回答

=~右边的值如果有引号,那=~等价于==,做字符串匹配,而不是正则表达式匹配;而如果不能把正则表达式放在引号里,一些特殊符号在bash里可能有特殊含义,所以在使用=~的时候,几乎都会把pattern定义在一个变量里,而且在[[]]中引用pattern的时候,也一定不能加引号。
如果不想定义变量,可以试试command substitution:

if [[ $TEST =~ $(echo "\<abc\>") ]]; then echo 含有单词abc;fi

根据你的描述,你的意思是想要看看字符串 abc abc ab 中是否含有 abc 这个子串。如果是这样,不太清楚你 \<abc\> 这样写是啥意思,为什么不直接 TEST="abc abc ab";if [[ $TEST =~ "abc" ]]; then echo 含有单词abc;fi

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进