Bash ls如何在不执行set-f noglob的情况下关闭globing

Bash ls如何在不执行set-f noglob的情况下关闭globing,bash,glob,Bash,Glob,我需要我的脚本,比如说,如果用户提供文件*我希望星号传递到我的脚本,而不是globbing。所以我在测试中尝试了set-fnoglob,这在某种程度上有所帮助,但我想知道ls如何在bash中禁用globing而不需要set-fnoglob。 在执行set-f noglob之前 #./test_asterisk.sh file.*.* file.20160308.115411 #ls file.*.* file.20160308.145009 file.20160308.145010 file.

我需要我的脚本,比如说,如果用户提供文件*我希望星号传递到我的脚本,而不是globbing。所以我在测试中尝试了set-fnoglob,这在某种程度上有所帮助,但我想知道ls如何在bash中禁用globing而不需要set-fnoglob。 在执行set-f noglob之前

#./test_asterisk.sh file.*.*
file.20160308.115411

#ls file.*.*
file.20160308.145009
file.20160308.145010
file.20160308.115411:
file.20160308.115420:
file.20160308.115422:
file.20160308.145007:
如果我这样做,我也能得到同样的结果

#set -f noglob

运行脚本之前。

全局扩展或是shell的功能,而不是ls的功能。因此,它只能由shell禁用。

全局扩展或是shell的一个功能,而不是ls的一个功能。正因为如此,它只能被外壳禁用。

这会让你觉得
ls
禁用了globbing吗?我可能做了一些假设,可能弄错了,但重点是ls是如何免疫它的。我的脚本怎么会有同样的行为?你不能。当命令、脚本等运行时,运行命令、脚本等的shell已经完成了全局绑定。您无法追溯阻止它。我也不相信来自
ls
的示例输出。这不是您从该命令获得的输出。您将从
ls
中得到一个关于该文件不存在的错误。(您将从
ls-1文件中获得该输出。*
。)感谢Etan,更正了输出片段中的粘贴错误。一些相关的线索给出了类似的答案,这会让你觉得
ls
禁用了globbing吗?我可能做了一些假设,可能弄错了,但重点是ls是如何免疫的。我的脚本怎么会有同样的行为?你不能。当命令、脚本等运行时,运行命令、脚本等的shell已经完成了全局绑定。您无法追溯阻止它。我也不相信来自
ls
的示例输出。这不是您从该命令获得的输出。您将从
ls
中得到一个关于该文件不存在的错误。(您将从
ls-1文件中获得该输出。*
。)感谢Etan,更正了输出片段中的粘贴错误。一些相关的线索给出了这样的答案