Bash中运算符的优先级

Mar*_*ord 6 bash operators

我有一个表达cat file.txt | script.sh 1> output.txt || mkdir TEST &.最后是否&意味着只mkdir在后台或整个表达式中执行?

myr*_*dio 3

对于&,它会影响整个表达式。您可以轻松地使用一些不那么优雅的东西来检查它,例如:

echo '1' > file1  || echo '2' > file2 &
Run Code Online (Sandbox Code Playgroud)

(像你一样进行一些输出重定向),否则,只需

echo '1' || echo '2' &
Run Code Online (Sandbox Code Playgroud)

这里第一个 echo 的输出将返回 true,条件中的第二部分将不会被执行,但无论如何它都会进入后台。

然后,您可以检查:

false || echo '2' > file2  &
Run Code Online (Sandbox Code Playgroud)

或者更简单的版本:

false || echo '2' &
Run Code Online (Sandbox Code Playgroud)

在这里,echo 将被执行,并且也在后台执行。

然后,在这两种情况下,它将在后台执行,即使在第一种情况下仅执行第一部分,而在第二种情况下仅执行第二部分。