从左到右?或相反亦然?
例子:
If [! -z "$ foo"] && [$ foo2 -eq 0]; then
echo "something"
fi
Run Code Online (Sandbox Code Playgroud)
首先进行什么评估?
[! -z "$ foo"]
Run Code Online (Sandbox Code Playgroud)
或者
[$ foo2 -eq 0]
Run Code Online (Sandbox Code Playgroud)
谢谢!
在 shell 脚本中说
if [ ! -z "$foo" ] && [ "$foo2" -eq 0 ]; then
echo 'something'
fi
Run Code Online (Sandbox Code Playgroud)
第一个测试[ ! -z "$foo" ](最好写成[ -n "$foo" ])将首先运行。只有在第一个测试成功时才会运行第二个测试。如果两个测试都成功,意思$foo是一个不为空的值并且$foo2有一个等于零的算术值,那么echo将被执行。
该&&操作就像在其它语言类似的运营商。shell 实现短路评估,并且&&如果左侧为true,则只会评估右侧。
if也可以在不使用if关键字的情况下编写此特定语句,如
[ ! -z "$foo" ] && [ "$foo2" -eq 0 ] && echo 'something'
Run Code Online (Sandbox Code Playgroud)
虽然使用if ...; then ...; fi恕我直言更清楚。
同样,echo只有在前面的两个测试都成功时才会执行。