数组未正确填充问题:为何echo $k[0]输出one[0]而非one?
为什么
echo $k[0]输出one[0]而不是one? 这是两个典型的Bash数组语法误区导致的,咱们一步步拆解清楚:
1. 混淆了循环变量与数组变量
你用来存储元素的数组是array,但尝试引用元素时却用了k——k只是循环里的临时变量,循环结束后它的值是最后一次迭代的元素(正常来说应该是three,不过看你的输出可能是测试时的小疏漏,但核心是它不是数组)。
当你写$k[0]时,Bash的解析逻辑是:先取出$k的当前值(比如one),然后把[0]当成普通字符串直接拼在后面,最终就输出了one[0]。
2. 数组元素的引用语法错误
在Bash里,引用数组单个元素的正确语法是${数组名[索引]}——必须用大括号{}把数组名和索引部分整体包裹起来。如果省略大括号,比如写成$array[0],Bash会把$array默认解析为数组的第一个元素(等价于${array[0]}),然后拼接上[0],结果还是one[0],这也是新手常踩的坑。
修正后的代码
# 先修正循环的语法(done前需要分号或者换行) for k in one two three; do array+=( "$k" ); done # 正确引用数组元素 echo "${array[0]}" # 输出one echo "${array[1]}" # 输出two echo "${array[2]}" # 输出three
内容的提问来源于stack exchange,提问作者Vak014
相关产品推荐
相关产品推荐

