全球化是shell的一个特征吗?
我读了很多这样的问题和答案
我知道在运行命令之前shell会扩展通配符,它们是shell的一个function。 通配符也可以使用那些可以接受许多参数的命令。 在find . -name *.rb
find . -name *.rb
如果我们在当前目录中有多个文件find
会给我们一个错误,因为find不能接受多个参数,解决这个问题的方法是:
find . -name "*.rb" find . -name '*.rb' find . -name \*.rb
我们逃避星号并防止shell扩展,但通配符是shell的一个特征; 当我们逃避星号shell时不知道它的意思,它应该找到一个名为*.rb
的文件,那么在这种情况下如何扩展星号呢?
是的,shell将*
理解为目录中包含任何字符的所有文件,并将*.rb
理解为具有任何字符并以.rb
结尾的所有文件,并将其展开。
find
命令本身接受globbing。
如果你不引用*
那么shell会在find
命令看到它的参数之前展开它,所以不是将glob *.rb
传递给find
,而是将目录中与glob匹配的所有文件的名称传递给find
, find
会尝试将它们解释为参数,这可能会导致错误,或者至少不是你想要的(只有在当前目录中没有匹配的文件时它才能正常工作)