Shell 是否有任何理由在查找中引用占位符-exec命令_to_run{}\;陈述

Shell 是否有任何理由在查找中引用占位符-exec命令_to_run{}\;陈述,shell,find,quotes,Shell,Find,Quotes,我偶尔看到人们用单引号将占位符{}括起来。这可能是因为它在GNU find手册中用作示例 找到-键入f-exec文件“{}\ 对当前目录中或其下的每个文件运行“file”。请注意,大括号用单引号括起来,以防止它们被解释为shell脚本标点符号。分号同样受到反斜杠的保护,尽管在这种情况下也可以使用单引号 包含、、|、&、;、$、`、\、'、*、?、的文件名?,[、~、=、%、{和}在GNU和FreeBSD find上都得到正确处理,无论占位符是否用单引号括起来 GNU find手册中显示的示例是一

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

找到-键入f-exec文件“{}\

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

包含、、|、&、;、$、`、\、'、*、?、的文件名?,[、~、=、%、{和}在GNU和FreeBSD find上都得到正确处理,无论占位符是否用单引号括起来

GNU find手册中显示的示例是一个例子吗?单引用占位符是否覆盖了我不知道的某些边缘情况,还是浪费了引用?

在GNU find手册的示例部分,可以找到以下句子:

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

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

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

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

find . -type f -exec echo ${} \;
然而,如果引用表达式,则不会中断:

find . -type f -exec echo '${}' \;
在GNU find手册页的示例部分,可以找到以下句子:

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

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

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

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

find . -type f -exec echo ${} \;
然而,如果引用表达式,则不会中断:

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

只要您使用的是与POSIX兼容的shell,就没有理由引用占位符{}。如果您使用fish或rc shell,则需要引用占位符以防止扩展。据称,可能有某些非现代csh变体需要引用占位符。请查看Unix和Linux上的绝妙答案,这些答案比我以往任何时候都更为合理。

只要您使用符合POSIX的shell,就有没有理由引用占位符{}。如果您使用的是fish或rc shell,则需要引用占位符以防止扩展。据称,可能有某些非现代csh变体需要引用占位符。请查看Unix和Linux上的精彩答案,这些答案比我以往任何时候都更公正。

我猜您的意思是类似于find…-exec…{}“…\”?我从来没有这样引用过,我也不记得曾经见过它被引用过。当然,如果我们想传递一个包含占位符的较长字符串,引用是有意义的,即…-exec…“'xy{}z'.\”。这个问题在我想你的意思是find…-exec…。{}“…\”?我从来没有这样引用过,我也不记得曾经见过它被引用过。当然,如果我们想传递一个包含占位符的较长字符串,引用是有意义的,即…-exec…“xy{}z”…\。这个问题已经很好地回答了