如何在Bash中对类型未知的变量执行减法运算(semver版本场景)
问题原因
你写的${patch - 1}属于Bash的参数扩展语法,作用是当patch变量未定义时返回1作为默认值,完全不是算术运算的写法,因此执行失败。
解决方法
Bash 中执行整数运算需要使用专门的算术扩展语法,会自动把数字格式的字符串变量转为整数参与运算,不需要额外做类型转换,把报错行替换为以下写法即可:
previous=$((patch - 1))
完整可运行代码
#!/bin/bash version="appVersion=1.3.15" version=${version##*=} # "1.3.15" semver=( ${version//./ } ) # ["1", "3", "15"] patch="${semver[2]}" # "15" echo $patch # 输出15 previous=$((patch - 1)) echo $previous # 输出14
边界兼容说明
如果存在patch版本为0的场景(比如版本号为1.3.0),减法后会得到-1,如果需要兼容这种情况,可以增加判断逻辑:
if [ $patch -eq 0 ]; then echo "patch版本为0,无法直接减1" # 此处可根据需求补充次版本号降级逻辑 else previous=$((patch - 1)) echo $previous fi
内容的提问来源于stack exchange,提问作者Jeggy
相关产品推荐
相关产品推荐

