为什么文件全局扩展未被抑制

为什么文件全局扩展未被抑制

我有以下脚本my.sh

echo $@

现在我想看到文件全局扩展,所以我喜欢这个并且它工作正常:

$ bash my.sh *
$ f1 f2 my.sh

现在,我尝试使用中描述的技术来抑制扩展这个答案

$ bash my.sh "*"
$ bash my.sh \*

但我仍然得到所有文件的列表作为输出。为什么?

答案1

第一次调用脚本时

$ bash my.sh *

文件名通配由 shell 在调用脚本之前执行。

第二次调用脚本时

$ bash my.sh "*"

运行时在脚本中执行文件名通配echo $@

为了避免这种情况,请$@对该行加双引号:

echo "$@"

进一步阅读:忘记在 bash/POSIX shell 中引用变量的安全隐患

相关内容