find 命令中的 + 需要转义吗?

find 命令中的 + 需要转义吗?

我在 bash 中有以下代码,我想知道是否可以摆脱\+并简单地使用+

   find "$fdir"                                \
      -type f -name "*.org" -o -name "*.texi"  \
      -exec head -n "$n" {} \+                 \
   | grep --color -e ^ -e '^==>.*' 

答案1

+不是任何 shell 中的特殊字符,不需要引号。

^尽管包括 Thompson shell(第一个 UNIX shell)、Bourne shell、fishrceszsh以及extendedglob.{}rc需要在, 和旧版本中引用 fish*, (, ),>在大多数 shell 中都是特殊的。

请注意,并非所有head实现都接受多个参数。 GNU 实现head会打印这些==>标题行,但仅当传递多个参数或使用该-v选项时。

另请注意,AND(隐含)优先于 OR ( -o) find(请参阅具有多个“-name”和“-exec”的“find”仅执行“-name”的最后匹配项), 所以:

find "$fdir"                                       \
   -type f '(' -name '*.org' -o -name '*.texi' ')' \
   -exec head -v -n "$n" '{}' +                    \
   | grep --color -e '^' -e '^==>.*'

(使用'...'引用代替"..."\引用只是为了保持一致性)。

可以在类似 Bourne、类似 csh 的 shell 和fish.在rc/中es,您需要删除双引号。在 csh/tcsh 中,您可以替换"$fdir"为,$fdir:q因此即使$fdir包含换行符它也可以工作。

$fdir和周围的引号$n仅在类 Bourne 的 shell 中需要,而不是zsh在类 csh 的 shell 中。"不是rc/中的引用运算符es。两者\都不是引用运算符rc(尽管确实像在其他 shell 中一样进行行延续)。

如何在 Unix shell 中像普通字符一样使用特殊字符?哪些字符在哪个 shell 中是特殊的以及如何转义/引用它们。

相关内容