我知道如何*
在命令中解释,例如ls
。但是,当尝试作为命令运行时,*
shell 会尝试执行工作目录中的第一个文件或目录。为什么是这样? shell是怎么理解的*
?
答案1
与其他一些操作系统不同,在 Unix 中,是由 shell 扩展文件名通配符。它首先扩展参数扩展和通配符,然后使用(现在)第一个单词作为要运行的命令的名称。
这也是为什么以破折号开头的文件可能会很麻烦:像这样的通配符*
将扩展到文件名,并且以破折号开头的名称可能会被视为一个选项。 (可怕的例子是,-r
在工作目录中调用的文件会rm *
递归地删除所有内容......)
不过,通常情况下,人们不会用作*
任何命令行上的第一项,因此让第一个文件确定在这种情况下运行的命令不太可能导致问题。