当我在脚本上看到一些括号和逗号显示时,让我感到困惑。我无法理解它是如何实现的。例如
find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)
问题: - - 支架做什么? - 逗号有什么作用? - 在哪里可以获得关于bash中括号和逗号关键字的本手册。
答案 0 :(得分:2)
(
和)
来执行子shell中的一个或多个命令。您可以在http://www.tldp.org/LDP/abs/html/subshells.html找到有关该主题的更多信息。
但是,在您发布的命令中,bash
不会使用它们,因为它们已被转义 - 您使用的是\(
而不是(
。因此,(
和)
作为参数传递给find
。另请注意,;
也会被转义,因为它在bash
中具有特殊含义。就find
而言,它会看到以下参数:
/work ( -fprint /dev/stderr ) , ( -name 'core' -exec rm {} ; )
逗号(,
)是find
命令的一部分。 bash
对此无效。
答案 1 :(得分:2)
find
使用括号/括号来强制其谓词之间的优先级。逗号是GNU find
中的运算符,它用于计算前面的谓词和后面的谓词,但忽略第一个的结果。在你的命令
find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)
你有两个(复合)谓词:
-fprintf /dev/stderr
-name 'core' -exec rm {} \;
第一个将找到的文件的名称输出为标准错误。第二个仅删除名称为core
的文件。如果没有逗号,只有要删除的文件的名称才会写入标准输出;也就是说,逗号会覆盖对多个谓词执行的隐式and
。 (-fprintf
周围的括号可能是可选的,因为它们只是形成一个由单个谓词组成的组,但我并不是正面的。)