我一直在阅读“The Linux command line book”,我遇到了这个行继续符,我很困惑为什么我们用这个 find 命令使用它:
find playground \
\( \
-type f \
-not -perm 0600 \
-exec chmod 0600 {} \; \
\) \
-or \
\(
other options...
\)
Run Code Online (Sandbox Code Playgroud)
以及为什么我们没有在这个 if 语句中使用它:
if [ $x -eq 5 ]; then
echo "x equals 5."
else
echo "x does not equal 5."
fi
Run Code Online (Sandbox Code Playgroud)
简单的答案是因为前者需要它,而后者不需要。
即find命令是单个简单的外壳命令,其中只需要一个数的不同参数,并且具有其自身的结构。这些参数对 shell 没有意义,所以它不知道在(和). 整个命令可以写在一行上,只是更难阅读。
如果没有行延续,find将playground使用默认打印操作继续运行,然后 shell 将尝试运行(不带参数的命令(或者,-type子shell 中的命令,如果您也从 中删除转义(符):
find playground
\(
-type f
...
Run Code Online (Sandbox Code Playgroud)
另一方面,if复合语句是 shell 语法的一部分,shell 知道需要哪些部分。在 thethen之后必须有一个命令,最终是一个elseor fi。整个结构也可以写在一行上,但是我们需要在else和之前添加分号fi。(同样echo foo; echo bar需要分号或换行符作为两个命令。)