如果我运行这个:
#!/usr/bin/env bash
simple_return_zero(){
return 0;
}
simple_return_one(){
return 1;
}
if [ simple_return_zero ]; then
echo "we have 0000";
fi
if [ ! simple_return_zero ]; then
echo "we have not 00000";
fi
if [ simple_return_one ]; then
echo "we have 11111";
fi
if [ ! simple_return_one ]; then
echo "we have not 11111";
fi
我得到:
we have 0000
we have 11111
我知道上面的代码是错误的,我认为这是正确的方法:
if simple_return_zero; then
echo "we have 0000";
fi
if ! simple_return_zero; then
echo "we have not 00000";
fi
if simple_return_one; then
echo "we have 11111";
fi
if ! simple_return_one; then
echo "we have not 11111";
fi
现在我们得到了更令人期待的东西:
we have 0000
we have not 11111
我的问题是 - 为什么测试命令 ( [ ] ) 在这种情况下不起作用?测试命令不检查退出代码/返回代码吗???
答案1
测试命令不检查退出代码/返回代码吗???
绝对不。它执行括号内文本定义的测试,其语法可以通过查看help test
。
if
其本身检查所执行命令的返回代码。