Bash 数组附加元素问题

Bash 数组附加元素问题

我有一个数组

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 数组是零索引的,因此长度数组的索引也是追加时应分配的下一个可用索引。

相关内容