osmak Asked: 2019-03-12 11:07:20 +0800 CST2019-03-12 11:07:20 +0800 CST 2019-03-12 11:07:20 +0800 CST 通配符 * 如何解释为命令? 772 我知道如何*在命令中解释,ls例如。但是当尝试*作为命令运行时,shell 会尝试执行工作目录中的第一个文件或目录。为什么是这样?shell怎么理解*? bash wildcards 1 个回答 Voted Best Answer ilkkachu 2019-03-12T11:17:02+08:002019-03-12T11:17:02+08:00 与其他一些操作系统不同,在 Unix 中,扩展文件名通配符的是 shell。它首先扩展参数扩展和 glob,然后使用(现在)第一个单词作为要运行的命令的名称。 这也是为什么使用前导破折号命名的文件可能会很麻烦的原因:glob like*会扩展为文件名,而以破折号开头的名称可以作为一个选项。(可怕的例子是-r在工作目录中调用的文件会rm *递归删除所有内容......) 但是,通常不会将*其用作任何命令行上的第一项,因此让第一个文件确定在这种情况下要运行的命令不太可能导致问题。
与其他一些操作系统不同,在 Unix 中,扩展文件名通配符的是 shell。它首先扩展参数扩展和 glob,然后使用(现在)第一个单词作为要运行的命令的名称。
这也是为什么使用前导破折号命名的文件可能会很麻烦的原因:glob like
*
会扩展为文件名,而以破折号开头的名称可以作为一个选项。(可怕的例子是-r
在工作目录中调用的文件会rm *
递归删除所有内容......)但是,通常不会将
*
其用作任何命令行上的第一项,因此让第一个文件确定在这种情况下要运行的命令不太可能导致问题。