我偶尔会看到人们将占位符({}
)用单引号引起来。这可能是因为它在GNU find
手册中用作示例。
find . -type f -exec file '{}' \;
在当前目录中或当前目录下的每个文件上运行`file'。 请注意,括号用单引号引起来,以防止其解释为shell脚本标点符号。分号也受到反斜杠的保护,尽管在这种情况下也可以使用单引号。
包含<space>
,<newline>
,<tab>
,|
,&
,;
,<
,{{1 }},>
,(
,)
,$
,`
,\
,"
,'
,*
,?
,[
,#
,~
,=
,%
和{
都是无论占位符是否用单引号引起来,都可以在GNU和FreeBSD }
上正确处理。
GNU find
手册中显示的示例是否是cargo cult programming的情况?是用单引号引起来的占位符覆盖了我不知道的某些边缘情况,还是浪费了报价?
答案 0 :(得分:1)
在GNU foo("bar");
手册页的EXAMPLES
部分中,您可以找到以下句子:
find
在当前目录中或当前目录下的每个文件上运行`file'。 请注意,括号用单引号引起来,以防止其解释为shell脚本标点符号。分号同样受反斜杠的保护,尽管在这种情况下也可以使用单引号
我想不出一个示例,其中find . -type f -exec file '{}' \;
不带引号会中断{}
命令,即使文件名中带有空格或控制字符也是如此。
但是,如果在文件名后附加一个字符串,则如果外壳程序可以解释该字符串,则可能需要用引号引起来。
例如,在以下情况下,在文件名前面添加-exec
可能会中断:
$
如果用引号将其保持不变”:
find . -type f -exec echo ${} \;