Shell 我可以在测试表达式中简单地使用exitcode(不带$?)吗?
我必须在ash中创建一个条件,这取决于两个命令的结果。问题是其中一个将结果返回给stdout,另一个作为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 ... (如果${{{}}是
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`”…]
否则一切都将中断,除非输出拆分为一个单词。