【发布时间】:2016-10-08 17:36:13
【问题描述】:
考虑下面的代码
#! /bin/bash
declare -a input # unnecessary
declare -a bad
declare -a good # unnecessary
input=('alpha 23' 'bravo 79' 'charlie 12')
echo "input is " ${#input[@]} "long"
for x in "${input[@]}"
do
bad=$x
good[ ${#good[@]} ]=$x
echo
echo "added '$x', good is now " ${#good[@]} "long, bad is still " ${#bad[@]} "long"
done
输出是
input is 3 long
added 'alpha 23', good is now 1 long, bad is still 1 long
added 'bravo 79', good is now 2 long, bad is still 1 long
added 'charlie 12', good is now 3 long, bad is still 1 long
根据 bash 的手册页 ...“分配给索引数组时,如果提供了可选的括号和下标,则分配该索引;否则分配的元素的索引是最后一个索引由语句加一分配。索引从零开始。"
我显然不理解粗体部分,因为我希望语句“bad=$x”每次执行时都会自动增加索引。它没有并且每次都分配给 bad[0]。
为什么它没有达到我的预期,有没有比我分配给 good[ .. ] 的笨拙的代码更好的方法来编写代码
【问题讨论】:
标签: arrays bash indexing parameter-passing whitespace