Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If块在Bash中总是转到else_Bash - Fatal编程技术网

If块在Bash中总是转到else

If块在Bash中总是转到else,bash,Bash,下面的代码段在应该进入elif时进入else语句 #The following line returns 3, 4 or 5 as the exit code. $BASH_EXEC adbE.sh "adb $ARGUMENT install $f" echo "the return code:$?." if [ $? -eq 5 ] then #do nothing, success continue elif [ $? -eq 4 ]

下面的代码段在应该进入
elif
时进入
else
语句

#The following line returns 3, 4 or 5 as the exit code.
$BASH_EXEC adbE.sh "adb $ARGUMENT install $f"
echo "the return code:$?."
if [ $? -eq 5 ]
then
    #do nothing, success
    continue
elif [ $? -eq 4 ]
then
    echo "WARNING"
else
    echo "ERROR"
    break
fi
此部分:
echo“返回代码:$?”
将其返回到屏幕:
返回代码:4。

并且它不显示
警告
。它只显示
ERROR
,然后断开包含此代码的
循环

我做错了什么


以下是我尝试过的导致相同问题的条件比较的变化:

  • if[$?-eq 5]
  • if[$?-eq“5”]
  • 如果[$?==5]
  • 如果[$?=“5”]
  • if[[$?-eq 5]]
  • if[[$?-eq“5”]
  • if[[$?=“5”]
  • 如果[[$?==5]]

  • 原因是
    $?
    是上次执行的命令的返回代码。您正在运行
    echo
    命令,然后执行
    if
    ,因此您要测试的是
    echo
    的返回码,返回码总是0

    此外,在您的情况下,由于您正在重新测试
    elif
    语句中的返回值,因此还存在一个额外的问题。初始测试(即
    [$?-eq 5]
    )也将更改
    $?
    的值,因此重新测试将产生意外结果

    要解决此问题,请在执行
    echo
    之前保存以前的返回代码,然后将保存的版本用于将来的所有测试:

    ret=$?
    echo "the return code:${ret}."
    if [ ${ret} -eq 5 ]
    then
            #do nothing, success
            continue
    elif [ ${ret} -eq 4 ]
    then
            echo "WARNING"
    else
            echo "ERROR"
            break
    fi
    

    我取出了
    echo“返回代码:$?”
    ,if块之前的唯一命令是我希望从中返回的命令。但还是失败了。然而,我使用了您提到的变量赋值方法,它起了作用。为什么删除
    echo“返回代码:$?”
    无法解决此问题?只要删除
    echo“返回代码:$?”
    就可以了,因为返回值是
    4
    。谢谢你说得对,移除回声应该能解决问题。但由于您在此之前没有发布任何代码,我无法解释为什么没有发布:-/Ah!我想我可能已经破解了。。。测试本身正在创建一个新的返回值。调用
    test
    命令(即
    [$?-eq 5]
    )时,其主要功能是提供返回值。因此,您不能在
    elif
    语句中再次测试
    $?
    。您能在原始答案中发布这部分答案吗?这样人们就可以看到真正的原因是什么,而不必阅读评论。谢谢是的。我改变了我原来的答案,把我们在这里发现的东西包括进去。