gpt4 book ai didi

linux - 为什么 "$?"条件下 "if"的值变了?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:08 25 4
gpt4 key购买 nike

我对“$?”的值感到困惑在我的 shell 脚本中。我写了一个演示脚本如下:

#!/bin/bash
echo "good"
if [ $? -ne 0 ];then
echo "$? not equal 0"
else
echo "$? equal 0"
fi

echo "good"
ret=$?
if [ $ret -ne 0 ];then
echo "$ret not equal 0"
else
echo "$ret equal 0"
fi

我知道,“$?”用于保存上一个函数或命令的返回值,为什么输出如下?

good 
1 equal 0

good
0 equal 0

这是否意味着 [ $? -eq 0 ] 也是命令还是函数?我很困惑!

最佳答案

您的原始代码可以重写为:

$ if echo "good"; then echo "$? equal 0"; fi
good
0 equal 0

由于您的代码仅检查 echo 命令的退出值,它几乎总是会返回 0(例如“true”),除非其文件描述符已关闭。例如:

$ echo foo; echo $?
foo
0

$ echo bar >&- ; echo $?
-bash: echo: write error: Bad file descriptor
1

关于linux - 为什么 "$?"条件下 "if"的值变了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32519018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com