(Ubuntu/Linux)"find" 命令根据引号给出不同的结果

Vas*_*ass 5 linux command-line ubuntu

我正在使用

find -iname *prib*
Run Code Online (Sandbox Code Playgroud)

并且只得到一个结果“./prib09jack.pdf”

find -iname "*prib*" 
Run Code Online (Sandbox Code Playgroud)

我得到了更多我正在寻找的结果,例如

./Dir1/PRIB09/prib09jackTFF1.pdf
Run Code Online (Sandbox Code Playgroud)

还有更多,但为什么引号在“ prib ”周围很重要?

最好的事物。

kma*_*rsh 10

如果在*prib*运行 find 命令时当前目录中有一个文件(或多个文件)匹配,shell 将在将参数传递给find之前首先扩展通配符以匹配文件名,并导致不同的命令运行超出用户预期。

例如,

$ ls foo*
foobar

$ find -iname foo*
./foobar

$ find -iname "foo*"
./foobar
./dir/foobz
./dir2/fooblat
Run Code Online (Sandbox Code Playgroud)

简而言之,Quotes 延迟了 find 命令执行的通配符解释。缺乏报价立即扩大。

  • 你会在`bash` 手册页而不是`find` 手册页中找到它的解释,因为引用是由shell 处理的。基本上(重复 kmarsh 所说的),如果您使用不带引号的 `*prib*`,bash 会在当前目录中查找名称与该模式匹配的文件,并在调用 `find 之前将 `*prib*` 替换为文件名`. 如果使用引号,bash 会单独保留 `*prib*`。 (3认同)
  • @Vass:您可以使用 `echo *prib*` 等来查看 bash 在将参数传递给命令之前对参数做了什么。`echo` 本身只是打印它的参数不变,所以它的输出告诉你什么 bash 扩展了 `*prib*`。 (2认同)