括号和逗号的作用是什么?

时间:2014-04-30 06:00:15

标签: find

当我在脚本上看到一些括号和逗号显示时,让我感到困惑。我无法理解它是如何实现的。例如

find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)

问题: - - 支架做什么? - 逗号有什么作用? - 在哪里可以获得关于bash中括号和逗号关键字的本手册。

2 个答案:

答案 0 :(得分:2)

bash中使用

()来执行子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周围的括号可能是可选的,因为它们只是形成一个由单个谓词组成的组,但我并不是正面的。)