我必须在灰中做一个条件,这取决于两个命令的结果。问题是其中一个将结果返回到stdout,另一个返回为exitcode。
我必须写
command2
RET=$?
if [ `command1` -eq 1 -a $RET -eq 2 ] ; then ...
或者是否有一些构造可以让我在command2
的逻辑中简单地访问[ ]
的返回代码?
if [ `command1` -eq 1 -a ${{{ command2 }}} -eq 2 ] ; then ...
(${{{ }}}}
是提取返回码的神奇表达式?)
答案 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 ...