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

时间:2018-09-11 03:37:43

标签: shell find quotes

我偶尔会看到人们将占位符({})用单引号引起来。这可能是因为它在GNU find手册中用作示例。

  

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

     

在当前目录中或当前目录下的每个文件上运行`file'。 请注意,括号用单引号引起来,以防止其解释为shell脚本标点符号。分号也受到反斜杠的保护,尽管在这种情况下也可以使用单引号。

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

GNU find手册中显示的示例是否是cargo cult programming的情况?是用单引号引起来的占位符覆盖了我不知道的某些边缘情况,还是浪费了报价?

1 个答案:

答案 0 :(得分:1)

在GNU foo("bar");手册页的EXAMPLES部分中,您可以找到以下句子:

find
     

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

我想不出一个示例,其中find . -type f -exec file '{}' \; 不带引号会中断{}命令,即使文件名中带有空格或控制字符也是如此。

但是,如果在文件名后附加一个字符串,则如果外壳程序可以解释该字符串,则可能需要用引号引起来。

例如,在以下情况下,在文件名前面添加-exec可能会中断:

$

如果用引号将其保持不变”:

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