shell - 是否有任何理由在 find ... -exec command_to_run {} \; 中引用占位符 陈述?
问题描述
我偶尔会看到人们将占位符 ( {}
) 用单引号括起来。find
这可能是因为它在 GNU手册中用作示例。
find . -type f -exec file '{}' \;
在当前目录中或之下的每个文件上运行“文件”。 请注意,大括号括在单引号中,以防止将它们解释为 shell 脚本标点符号。分号同样受到反斜杠的保护,尽管在这种情况下也可以使用单引号。
包含<space>
, <newline>
, <tab>
, |
, &
, ;
, <
, >
, (
, )
, $
, `
, , \
, "
, '
, *
, ?
, [
, #
, ~
,=
的%
文件名在 GNU{
和}
FreeBSD 上都可以正确处理find
,无论占位符是否用单引号括起来。
GNUfind
手册中显示的示例是货物崇拜编程的案例吗?是单引号覆盖一些我不知道的边缘情况的占位符,还是浪费引号?
解决方案
在EXAMPLES
GNUfind
手册页部分,可以找到以下句子:
find . -type f -exec file '{}' \;
在当前目录中或之下的每个文件上运行“文件”。 请注意,大括号括在单引号中,以防止将它们解释为 shell 脚本标点符号。 分号同样受到反斜杠的保护,尽管在这种情况下也可以使用单引号。
{}
我想不出一个没有引号会破坏命令的例子-exec
,即使文件名中有空格或控制字符。
但是,如果您将字符串附加到文件名,则如果该字符串可以由 shell 解释,您可能需要引用表达式。
例如$
,在文件名前添加 a 会在以下情况下中断:
find . -type f -exec echo ${} \;
而如果表达式被引用,它不会中断”:
find . -type f -exec echo '${}' \;
推荐阅读
- git - 为什么命令 'git diff-index --check --cached $against --' 输出使用信息?
- scala - IntelliJ - Scala:字符串类已损坏
- javascript - 在输入货币时如何格式化字段但支持退格和编辑?
- css - 在 Vuetify 中更改两个不同 v-col 的高度
- flutter - 无法加载资产:加载 .mp3 文件时出错 Flutter
- java - MongoDB在spring boot中总是以嵌入式模式启动
- python - Matplotlib 绘制时间重叠标签
- javascript - 部分中的引导选项卡
- ubuntu - 使用不同密码和模式的加密
- c# - 由于跟踪问题,添加后无法删除项目