Bash数组元素赋值变量异常:字符串元素输出0求助
Bash数组字符串元素赋值后echo出0的原因及解决办法
哈哈,这个问题我之前帮好几个同事排查过,本质是把Bash的算术扩展和普通变量引用搞混了!
先还原你的错误场景
我猜你大概率写了类似这样的代码:
str_array=("apple" "banana") result=$((str_array[0])) echo $result # 输出0
为什么会输出0?
$((...))是Bash的算术扩展语法,它的作用是计算里面的算术表达式。当你把字符串放进去时,Bash会尝试把它解析成数值——如果字符串不是合法的整数(比如"apple"这种纯字母),Bash就会默认把它当作0来处理,所以最终输出就是0。
而数值数组能正常工作,是因为$((...))能正确解析数值,比如:
num_array=(100 200) result=$((num_array[0])) echo $result # 输出100
正确的赋值方式
如果是处理字符串数组(或者通用所有类型的数组元素),直接用普通变量引用即可,记得给数组索引加上花括号{}避免歧义:
str_array=("apple" "banana") result=${str_array[0]} echo $result # 输出apple
为什么要加花括号?如果写成result=$str_array[0],Bash会把$str_array等价于${str_array[0]},然后拼接上[0],最终结果会变成apple[0],这显然不是你想要的。
额外提醒
- 算术扩展
$((...))只用于数值运算,字符串操作绝对不要用它 ${array[index]}是通用的数组元素引用方式,不管元素是数值还是字符串都能正确获取
内容的提问来源于stack exchange,提问作者Jared
相关产品推荐
相关产品推荐

