我有以下脚本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 "$@"