是否有任何理由在查找 .. -exec command_to_run {} \; 语句中引用占位符?



我偶尔看到人们用单引号括住占位符({}(。这可能是因为它在GNUfind手册中被用作一个例子。

find . -type f -exec file '{}' ;

对当前目录内或目录下的每个文件运行"file"。请注意,大括号括在单引号中,以防止它们被解释为 shell 脚本标点符号。 分号同样受到反斜杠的保护,尽管在这种情况下也可以使用单引号。

包含<space><newline><tab>|&;<>()$`"'*?[#~=%{}的文件名在GNU和FreeBSDfind上都可以正确处理, 无论占位符是否用单引号括起来。

GNUfind手册中显示的示例是货物崇拜编程的案例吗?单引号占位符是否涵盖了我不知道的一些边缘情况,还是浪费引号?

在 GNUfind手册页的EXAMPLES部分,可以找到以下句子:

find . -type f -exec file '{}' ;  

对当前目录内或目录下的每个文件运行"file"。请注意,大括号括在单引号中,以防止它们被解释为 shell 脚本标点符号。分号同样受到反斜杠的保护,尽管在这种情况下也可以使用单引号。

我想不出一个不带引号的{}破坏-exec命令的例子,即使文件名中有空格或控制字符。

但是,如果将字符串附加到文件名,则可能需要引用表达式(如果该字符串可以由 shell 解释(。

例如,在以下情况下,在文件名前面添加$会中断:

find . -type f -exec echo ${} ;

而如果引用表达式,它不会中断":

find . -type f -exec echo '${}' ;

只要您使用符合 POSIX 的 shell,就没有理由引用占位符 ({}(。如果您使用的是鱼或 rc 壳,则需要引用占位符以防止膨胀。据称,可能存在某些非现代的 csh 变体需要引用占位符。在Unix和Linux上查看这个问题的精彩答案,它们比我所能做的更公正。

相关内容

  • 没有找到相关文章

最新更新