我已经开始在Linux终端中组合不同的命令。我想知道为什么像这样的命令需要反斜杠和分号:
find ./ -name 'blabla' -exec cp {} ./test \;
当一个简单的cp命令就足够:
cp randomfile ./test
没有 \;
它们是用来清晰地表示命令的结束,还是文档中要求必须添加?其背后的原则是什么?
without the \;
在分隔 shell 命令时,分号是列表操作符之一(或者 &&
, ||
),因此在分号前使用反斜杠。例如:
command1; command2
find
工具在使用 -exec
选项时,会使用 ;
或 +
符号来结束被调用的 shell 命令。
因此,为了避免特殊的 shell 字符被解释,需要使用反斜杠进行转义,以去除下一个字符读取时的特殊含义和行继续符。
因此,以下示例语法是允许使用的 find
命令:
find . -exec echo {} \;
find . -exec echo {} ';'
find . -exec echo {} ";"
find . -exec echo {} \+
find . -exec echo {} +
另请参见:
来自"man find":
find命令后面的所有参数都被视为该命令的参数,直到遇到一个由";"组成的参数为止。
find需要知道exec的参数何时终止。在shell中使用";"作为终止符是很自然的,因为shell也使用这个字符。出于同样的原因,如果要在shell中插入这样的字符,则必须对其进行转义。
;
会结束命令。使用\;
,相当于将字面上的分号;
作为参数传递给find
命令。 - Linuxios