0

我必须在 ash 中创建一个条件,这取决于两个命令的结果。问题是其中一个将结果返回到标准输出,另一个作为退出代码。

我必须写吗

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

还是有一些结构可以让我简单地访问command2逻辑内的返回代码[ ]

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

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

4

2 回答 2

1

最好写成:

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
于 2012-06-27T10:09:52.027 回答
0

我想没有办法避免 $?,但我可以在 test 语句中使用命令,通过;echo $?在末尾添加。

if [ `command1` -eq 1 -a `command2 ; echo $?` -eq 2 ] ; then ...
于 2012-06-27T15:01:35.073 回答