在看别人写的linux shell代码时,忽然发现好多类似下面格式的代码:
[ "$PRO" = "1" ] && ckssl="--ssl "
[ -n "$IP" ] && ckip="-H $IP "
[ -n "$PORT" ] && ckport="-p $PORT "
一开始怎么也没搞明白为什么要这么写
只是知道[]是和test等价的
请教了一位前辈,才恍然大悟,竟然忽略了&&的执行原理
对于&&(与运算符),从左往右执行的话,只有左侧的执行结果为真时,才会执行右侧的表达式,否则右侧表达式不会执行
这样的格式可以巧妙的代替if语句,简化代码。
同样的目的如果用if实现的话:
if [ "$PRO" = "1" ]; then
ckssl="--ssl "
fi;
需要三行代码,实际上两种方式的执行效率应该是一样的,这和c语言里的右移一位的操作比*2操作高效的例子不一样。
这里都需要执行[]里面的表达式,然后判断表达式的结果值。