我无法在任何地方找到这个问题 - 请让我知道它是否重复。
我试图找出为什么退出代码($?)为0 在这个Bash if语句中,当254.254.254.254显然不存在时:
if [[ `ping -c 1 254.254.254.254` ]];then
echo "Yes - $?"
else
echo "No - $?"
fi
Yes - 0
在尝试if [[``]一点之后,如果stdout
上有任何输出,无论是否需要输出,看起来它都会评估为真,是否返回错误。我认为测试退出代码$?
可以缓解这个问题,但显然不是吗?
如果您运行ping -c 1 254.254.254.254;echo $?
,您将获得正确的退出代码1
。为什么不出现在我的if语句中?
答案 0 :(得分:4)
您没有查看ping
的退出代码;你正在检查它是否写了任何标准输出。你的代码相当于
if [[ -n $(ping -c 1 254.254.254.254) ]]; then
和$?
是[[ ... ]]
的退出代码(这就是为什么你首先进入“是”分支的原因)。
要检查退出代码,请不要捕获输出,也不要在[[ ... ]]
命令中使用它。
if ping -c 1 254.254.254.254; then