为何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
相关产品推荐
相关产品推荐

