bash 中的空花括号和分号

spi*_*ace 5 command-line bash find

有什么作用

{} \;
Run Code Online (Sandbox Code Playgroud)

字符串在bash中的意思?

例如,我已经看过几次,按名称查找和删除所有文件必须执行

find . -name "FILE-TO-FIND" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

这个字符串有什么作用?

hee*_*ayl 10

双方{};在具有特殊的含义bash,但在的情况下find,它find实际上解释这两个(实际上我们要find解释这两种)。

首先,-exec是一个动作find{};是 的-exec谓词的特殊参数find

-exec动作的语法是:

-exec command ;
Run Code Online (Sandbox Code Playgroud)

或者

-exec command {} + 
Run Code Online (Sandbox Code Playgroud)

因此,我们需要保持{};从被壳事先解释。

在以下情况下find .... -exec

  • {}表示(包含)find表达式的结果,即find . -name "FILE-TO-FIND"在这种情况下。请注意,空花括号{}对 shell 没有特殊意义,因此我们可以在不转义的情况下逃脱{}

  • 作为bash对待;作为命令的结束,我们需要摆脱这种\\;,以便它可以通过解析-exec不是bash本身。