通配符是 shell 的一个特性吗?

通配符是 shell 的一个特性吗?

我读过很多问题和答案,比如这个

我知道在运行命令之前,shell 会扩展通配符,这是 shell 的一个功能。通配符也可以用于那些可以接受多个参数的命令。如果find . -name *.rb 当前目录中有多个文件,find则会给出错误,因为 find 不能接受多个参数,解决方法如下:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb

我们对星号进行转义并防止 shell 进行扩展,但是通配符是 shell 的一个特性;当我们对星号进行转义时,shell 不知道它的含义,它应该找到一个名为的文件*.rb,那么在这种情况下星号是如何扩展的呢?

答案1

是的,shell 将理解*为目录中所有包含任意字符的文件以及*.rb所有包含任意字符并以 结尾的文件.rb,并将其扩展。

find命令本身接受通配符。

如果你不引用,*那么 shell 将扩展它find命令会看到它的参数,因此不是将 glob*.rb传递给find,而是将目录中与 glob 匹配的所有文件的名称传递给find,并find尝试将它们解释为参数,这可能会导致错误,或者至少不是您想要的(仅当当前目录中没有匹配的文件时它才会正常工作)

相关内容