Shell 我可以在测试表达式中简单地使用exitcode(不带$?)吗?

Shell 我可以在测试表达式中简单地使用exitcode(不带$?)吗?,shell,sh,exit-code,ash,Shell,Sh,Exit Code,Ash,我必须在ash中创建一个条件,这取决于两个命令的结果。问题是其中一个将结果返回给stdout,另一个作为exitcode 我必须写作吗 command2 RET=$? if [ `command1` -eq 1 -a $RET -eq 2 ] ; then ... 或者在[]的逻辑中是否有某种结构可以让我简单地访问command2的返回代码 if [ `command1` -eq 1 -a ${{{ command2 }}} -eq 2 ] ; then ... (如果${{{}}是

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

我必须写作吗

 command2
 RET=$?
 if [ `command1` -eq 1 -a $RET -eq 2 ] ; then ...
或者在
[]
的逻辑中是否有某种结构可以让我简单地访问
command2
的返回代码

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

(如果
${{{}}
是提取返回代码的神奇表达式?

最好编写:

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

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

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

你需要像这样引用:
[“`command1`”…]
否则一切都将中断,除非输出拆分为一个单词。