使用 test [] 捕获返回码

使用 test [] 捕获返回码

如果我运行这个:

#!/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其本身检查所执行命令的返回代码。

相关内容