首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个shell规则不能匹配

为什么这个shell规则不能匹配
EN

Stack Overflow用户
提问于 2019-01-20 17:33:34
回答 1查看 15关注 0票数 0

我不知道为什么这个shell规则(第2行)无法匹配,谁能给出官方链接来解释这一点?

代码语言:javascript
复制
$ str="origin/HEAD -> origin/master"
$ if [[ $str =~ '*origin\/HEAD*' ]] ; then echo OK ; fi # why can't work ???
$ if [[ $str =~ .*origin\/HEAD.* ]] ; then echo OK ; fi
OK
$ reg='.*origin\/HEAD.*'
$ if [[ $str =~ $reg ]] ; then echo OK ; fi # what's different of Line 2 ???
OK
EN

回答 1

Stack Overflow用户

发布于 2019-01-20 18:32:48

当您将set -x添加到您的代码中时,您将获得更多信息:

代码语言:javascript
复制
+ [[ origin/HEAD -> origin/master =~ \*origin\\/HEAD\* ]]
+ [[ origin/HEAD -> origin/master =~ .*origin/HEAD.* ]]
+ echo OK
OK
+ reg='.*origin\/HEAD.*'
+ [[ origin/HEAD -> origin/master =~ .*origin\/HEAD.* ]]

赋值中的特殊字符用作单引号内的普通字符。您可以在第一行看到额外的反斜杠,以避免shell的扩展。

您的reg=也使用单引号。当您使用$reg时,通配符将再次展开。也许再看另一个例子:

代码语言:javascript
复制
reg='ls *'
echo "reg (unquoted)="${reg}
echo "reg (quoted)  =${reg}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54275146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档