Sin*_*osh 12 bash find wildcards
我知道通配符在运行命令之前被 shell 扩展,它们是 shell 的一个特性。通配符也适用于那些可以接受许多参数的命令。在find . -name *.rb 我们若在当前目录多个文件find会给我们一个错误,因为发现不能接受多个参数,解决这个是方法:
find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
Run Code Online (Sandbox Code Playgroud)
我们避开星号并防止 shell 扩展,但通配符是 shell 的一个特性;当我们转义 asterisk shell 不知道它的含义时,它应该找到一个名为 的文件*.rb,那么在这种情况下星号是如何扩展的?
Zan*_*nna 22
是的,shell 理解*为目录中包含任何字符的*.rb所有文件以及包含任何字符和结尾的所有文件.rb,并将其扩展为这样。
该find命令本身接受通配符。
如果您不引用 ,*则 shell 将在命令看到其参数之前展开它find,因此不是*.rb传递给glob,而是find将目录中与 glob 匹配的所有文件的名称传递给find,并find尝试解释它们作为参数,这可能会导致错误,或者至少不是您想要的(只有当当前目录中没有匹配的文件时,它才会正常工作)