提问人:Bill Wohler 提问时间:10/2/2023 更新时间:10/2/2023 访问量:39
macOS bash 通配引号变量意外 [重复]
macOS bash globbing quoted variable unexpectedly [duplicate]
问:
在装有 bash 5.2.15 的 Linux 上,单引号会阻止通配,如预期的那样:
好
$ dir='/path?/to?/file?'; echo $dir
/path?/to?/file?
$
但是,在带有 bash 3.2.57 的 macOS 上,我遇到了这种不良行为:
坏
$ dir='/path?/to?/file?'; echo $dir
$
这种意外的通配似乎发生在 echo 命令中,因为变量设置正确:
$ set | grep ^dir
dir='/path?/to?/file?'
我猜这种无意的通配是 macOS 上古代 bash 版本中的一个错误。我尝试设置noglob无济于事。你能想出一个解决方法来获得上面的良好行为吗?
答:
0赞
Bill Wohler
10/2/2023
#1
在 echo 中引用变量有效:
$ dir=/path?/to?/file?; echo "$dir"
/path?/to?/file?
事实证明,设置变量时不需要引号。
这现在引出了一个问题,即为什么未加引号的回声在没有引号的情况下在 Linux 上工作。
评论
1赞
Charles Duffy
10/2/2023
难道我没有在对问题本身的评论中回答这个问题(旁白:提出而不是乞求)吗?(要使 glob 扩展为无,必须设置标志;默认情况下,没有匹配项的 glob 会扩展回 glob 表达式本身)。nullglob
评论
nullglob
echo $variable
显示了其他内容!由于要禁止显示的通配是在展开时执行的,而不是在赋值时执行的,因此赋值上的引号没有区别。echo "$dir"
echo $dir
shopt -p nullglob
shopt -s nullglob
shopt -u nullglob