首页 > 解决方案 > shopt -s nullglob 意外影响读取

问题描述

我希望两个输出都相等,foo [Required] bar但是在设置消失后。为什么?nullglob[Required]

我正在运行 MacOS。

谢谢!

$ bash --version
GNU bash, version 5.0.18(1)-release (x86_64-apple-darwin19.5.0)

$ shopt -u nullglob
$ read < <(echo "foo [Required] bar"); echo $REPLY;
foo [Required] bar

$ shopt -s nullglob
$ read < <(echo "foo [Required] bar"); echo $REPLY;
foo bar

标签: linuxbashshell

解决方案


由于您没有引用变量$REPLY,因此在扩展变量后完成文件名扩展。

[Required]是文件名通配符模式。它将匹配以下任何字符:R, e, q, u, i, r, d.

你大概没有这样的文件名。该nullglob选项意味着不匹配任何内容的通配符应替换为空字符串,而不是不展开。

故事的寓意:引用您的变量,除非您希望它们进行文件名扩展。


推荐阅读