You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中内联检查命令返回码(无需变量存储)

解决方法:直接在if/elif中执行命令,无需处理返回码

你之前的写法都踩了同一个坑:用$(command)获取的是命令的输出内容,而非执行后的返回码。true和false这类命令本身没有任何输出,所以$(true)/$(false)都是空字符串,你的各种判断其实是在对空值做无效比较——比如[ "$(true)" -eq "0" ]会把空字符串默认解析为0,所以不管你用true还是false,这个判断都会成立,自然得不到正确结果。

正确的写法:利用shell本身的判断逻辑

shell的if/elif结构天生就是基于命令返回码判断的,直接把要执行的命令写在if后面就行,完全不需要额外的[/[[,也不用把返回码存到变量里:

if command1; then
    echo "第一个成功的是command1"
elif command2; then
    echo "第一个成功的是command2"
elif command3; then
    echo "第一个成功的是command3"
elif command4; then
    echo "第一个成功的是command4"
elif command5; then
    echo "第一个成功的是command5"
else
    echo "所有命令都执行失败了"
fi

原理说明

shell会依次执行if/elif后的命令:

  • 只要某个命令返回码为0(执行成功),就立刻进入对应的then块,不再执行后续命令
  • 如果所有命令都返回非0(失败),就进入else块

如果是简单场景,也可以用更简洁的链式写法:

command1 && echo "command1成功" || command2 && echo "command2成功" || command3 && echo "command3成功" || command4 && echo "command4成功" || command5 && echo "command5成功"

不过这种写法在命令本身包含&&/||时容易出问题,if/elif的结构可读性和可靠性更高。

内容的提问来源于stack exchange,提问作者totalZero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:48:24