Bash脚本条件字符串拼接:无需额外if语句动态替换日志等级
Bash模拟三元表达式实现条件字符串替换的方案
可行性说明
Bash 没有原生的三元运算符语法,但可以通过短路求值或参数扩展的方式模拟该效果,不需要新增完整的if判断语句。
推荐写法(全版本兼容)
使用子shell内的短路逻辑实现条件判断,直接嵌入参数位置即可,完整的调用语句如下:
./discord.sh --webhook-url="$url" --text "$([ $deb -eq 1 ] && echo "INFO" || echo "WARNING"): $abc"
原理解释
[ $deb -eq 1 ]是判断条件,当deb等于1时条件返回真- 条件为真时执行
&&后的语句,输出INFO - 条件为假时执行
||后的语句,输出WARNING - 整个
$()包裹的部分会将输出结果作为字符串嵌入到--text的参数值中,完全符合需求
小提示:示例中给
$url加上了双引号,是为了避免URL中存在空格、特殊字符时出现解析错误,属于Shell脚本的最佳实践。
简化写法(仅Bash 4.4及以上版本支持)
如果你运行脚本的环境Bash版本高于等于4.4,且deb的取值只有1(需要INFO)和空/0(需要WARNING)两种场景,可以用更简洁的参数扩展写法:
./discord.sh --webhook-url="$url" --text "${deb:+INFO:-WARNING}: $abc"
该写法兼容性弱于上一种方案,生产环境优先选择全版本兼容的写法。
内容的提问来源于stack exchange,提问作者bivvo
相关产品推荐
相关产品推荐

