我发现
[ ! -f /etc/default/lxc-net ] || . /etc/default/lxc-net
Run Code Online (Sandbox Code Playgroud)
在/etc/default/lxcUbuntu 16.04 上,它似乎正在替换(我自己的或包维护者代码)
[ -f /etc/default/lxc-net ] && . /etc/default/lxc-net
Run Code Online (Sandbox Code Playgroud)
由于测试是违反直觉的(如果关于文件不存在的测试失败,请运行命令)我想知道它是否比&&-version有任何优势。
#/bin/sh
! $1 || true
echo $?
$1 && true
echo $?
Run Code Online (Sandbox Code Playgroud)
然后使用true和false作为参数运行它。
./script true
0
0
./script false
0
1
Run Code Online (Sandbox Code Playgroud)
这是因为布尔表达式的短路评估。
在 OP 的示例中,假设文件不存在:
TRUE OR x = TRUE)。您得到复合语句的 TRUE。FALSE AND x = FALSE)。您得到复合语句的 FALSE。退出代码非常重要。检查此 SO答案以查看set -e,trap和 的可能含义set -o pipefail。