通配符 * 如何解释为命令?

osm*_*mak 4 bash wildcards

我知道如何*在命令中解释ls例如。但是当尝试*作为命令运行时,shell 会尝试执行工作目录中的第一个文件或目录。为什么是这样?壳是怎么理解的*

ilk*_*chu 10

与其他一些操作系统不同,在 Unix 中,扩展文件名通配符的是 shell。它首先扩展参数扩展和 globs,然后使用(现在)第一个单词作为要运行的命令的名称。

这也是用前导破折号命名的文件可能会很麻烦的原因:一个 glob like*会扩展到文件名,并且可以选择以破折号开头的名称。(可怕的例子是-r在工作目录中调用的文件会rm *递归地删除所有内容......)

但是,通常情况下,不会将其*用作任何命令行上的第一项,因此让第一个文件确定在这种情况下要运行的命令不太可能导致问题。

  • 名为“-r”的文件很糟糕,但名为“-rf”的文件更糟。 (2认同)