Bash脚本去除数字前导零后数值比较结果异常问题求助
问题原因
在Bash的[[ ]]条件判断结构中,>、<运算符默认执行字典序字符串比较,而非数值比较。
你删除前导零后得到的2、8是单字符字符串,对比双字符字符串15时,会逐位比较ASCII码:单字符2的ASCII码远大于15的首位字符1的ASCII码,因此会错误判定2>15、8>15。
解决方案
任选以下任意一种方式修改即可:
- 方式1:改用算术运算括号
(( ))执行判断,该环境下默认按数值规则比较,写法如下:
array=(02 08 10 11 23 52) for i in 0 1 2 3 4 5 do if (( ${array[i]#0} > 15 )) then echo "${array[i]#0} is greater than 15" else echo "${array[i]#0} is less than 15" fi done
- 方式2:保留
[[ ]]结构,替换为数值比较专用运算符-gt(大于)、-lt(小于)、-eq(等于)等:
# 仅需修改判断行即可 if [[ ${array[i]#0} -gt 15 ]]
修改后执行即可得到正确的判断结果。
内容的提问来源于stack exchange,提问作者Shira
相关产品推荐
相关产品推荐

