我有一个数组
declare -a her=("ger" "blr" "tyg" "")
for i in "${her[@]}"; do
echo $i
done
我明白了
ger
blr
tyg
但是当我尝试附加到数组时,我得到一个没有空格的长字符串
declare -a you
#without quotes and with quotes
#' " same result
for i in {"fgt","fe","ger"}; do
you+=${i}
done
for i in "${you[@]}"; do
$i
done
Fgtfeger
对发生的事情有任何见解吗?有点让它们没那么有用
答案1
使用数组复合赋值语法;否则使用长度作为索引
您必须使用以下任一方法附加到数组复合赋值语法(例如foo=("elem1" ...)
或数组索引。
数组复合赋值语法
带括号的形式允许您一次插入一个或多个元素,并且(可以说)更易于阅读。例如:
# start with a clean slate
unset you
for i in "fgt" "fe" "ger"; do
you+=("$i")
done
printf "%s\n" "${you[@]}"
这会产生您期望的值:
fgt fe ger
在索引处插入长度
通过分配索引可以获得类似的结果。例如:
unset you
for i in "fgt" "fe" "ger"; do
you[${#you[@]}]="$i"
done
printf "%s\n" "${you[@]}"
第二个示例之所以有效,是因为 Bash 数组是零索引的,因此长度数组的索引也是追加时应分配的下一个可用索引。