if [ $? -ne 0 ]; then echo "error"; else echo "success"; fi
成功,
if [ ! -f index.html ]; then echo "error"; else echo "success"; fi
成功,但由于某种原因
if [ ! -f index.html ] || [ $? -ne 0 ]; then echo "error"; else echo "success"; fi
失败。
在我的情况下,存在" index.html"和$?= 0
if [ ! -f index.html ] || [ $? -ne 0 ]
$?
的值反映了[ ! -f index.html ]
的退出代码。由于index.html
存在,该语句将导致非零退出代码。
尝试:
if [ $? -ne 0 ] || [ ! -f index.html ] ; then echo "error"; else echo "success"; fi
由于[ $? -ne 0 ]
首先执行,因此$?
的值将反映出先前命令的退出代码,而不是[ ! -f index.html ]
的结果。
另一种可能性是将两个测试都放入一个条件表达式中:
if [ ! -f index.html -o $? -ne 0 ]; then echo "error"; else echo "success"; fi
由于现在有一个单个测试表达式,因此在运行! -f index.html
测试之前,BASH会评估$?
。因此,$?
将是先前命令的退出代码。
尝试一下:
if [[ ! -f index.html || $? -ne 0 ]]; then echo "error"; else echo "success"; fi
您执行的每个命令都会更改$?
。最好立即将其存储在新变量中,然后在闲暇时检查。