我可以在测试表达式中使用简单的exitcode(没有$?)?

时间:2012-06-27 10:07:09

标签: shell sh exit-code ash

我必须在灰中做一个条件,这取决于两个命令的结果。问题是其中一个将结果返回到stdout,另一个返回为exitcode。

我必须写

 command2
 RET=$?
 if [ `command1` -eq 1 -a $RET -eq 2 ] ; then ...

或者是否有一些构造可以让我在command2的逻辑中简单地访问[ ]的返回代码?

 if [ `command1` -eq 1 -a ${{{ command2 }}} -eq 2 ] ; then ...

${{{ }}}}是提取返回码的神奇表达式?)

2 个答案:

答案 0 :(得分:2)

最好写一下:

if [ "`command1`" -eq 1 ] && command2
then
  ....
fi

或者当您想要检查退出代码是否为2时:

if [ "`command1`" -eq 1 ] && { command2 ; [ "$?" = 2 ] ; }
then
  ....
fi

示例:

$ cat 1.sh
ARG="$1"

command1()
{
  echo 1
}
command2()
{
  return "$ARG"
}

if [ "`command1`" -eq 1 ] && { command2 ; [ "$?" = 2 ] ; }
then
  echo OK
else
  echo FAILED
fi

$ sh 1.sh 2
OK
$ sh 1.sh 3
FAILED

答案 1 :(得分:0)

我想没有办法避免$?,但我可以在test语句中使用命令,最后添加;echo $?

if [ `command1` -eq 1 -a `command2 ; echo $?` -eq 2 ] ; then ...