首页 > 解决方案 > 是否有任何理由在 find ... -exec command_to_run {} \; 中引用占位符 陈述?

问题描述

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

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

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

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

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

标签: shellfindquotes

解决方案


EXAMPLESGNUfind手册页部分,可以找到以下句子:

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

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

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

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

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

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

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

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

推荐阅读