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

为何Shellcheck仅对部分A&&B||C代码触发SC2015告警?

为什么Shellcheck只标记第二行的SC2015告警

SC2015的核心提示是A && B || C结构不能完全等价于if A; then B; else C; fi——如果B执行失败,会意外触发C的执行,这是告警的触发前提。

针对你的代码:

  • 第一行[[ -n $1 ]] && argv+("-x" "$1") || return 1:
    argv+("-x" "$1")是数组追加操作,在Bash中这个操作几乎不可能返回非0的失败状态,也就是说B永远会执行成功。这种情况下,|| return 1只会在[[ -n $1 ]]为假时触发,逻辑和if-then-else完全一致,不会出现意外分支,所以Shellcheck不会触发SC2015告警。
  • 第二行[[ -n $2 ]] && argv+("$2") || ::
    虽然argv+("$2")同样几乎不会失败,但Shellcheck会关注|| :这个分支:这里的:是无操作命令,即便B不会失败,这种写法依然属于A && B || C的“冗余分支”结构,Shellcheck会认为你可能误解了这个结构的逻辑(比如误以为C只会在A为假时执行),因此触发SC2015告警提醒你规范写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:52:42