何时使用换行符,何时不使用?

Mah*_*lah 0 shell-script

我一直在阅读“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)

ilk*_*chu 5

简单的答案是因为前者需要它,而后者不需要。

find命令是单个简单的外壳命令,其中只需要一个数的不同参数,并且具有其自身的结构。这些参数对 shell 没有意义,所以它不知道在(). 整个命令可以写在一行上,只是更难阅读。

如果没有行延续,findplayground使用默认打印操作继续运行,然后 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需要分号或换行符作为两个命令。)