Arrays Bash i can';t打印数组的所有元素,但仅打印最后一个元素

Arrays Bash i can';t打印数组的所有元素,但仅打印最后一个元素,arrays,bash,for-loop,Arrays,Bash,For Loop,我无法将for in的所有值分配到数组中,因此只能打印最后一个值 ###previouse code for item2 in "${!TUR[@]}"; do ARRAY="${item2}" done for item in "${ARRAY[@]}"; do printf "$ARRAY \n"; done 如何成功地将所有元素分配给数组变量并打印出所有元素?您的第一个问题是向数组添加元素,您可以执行类似于ARRAY

我无法将for in的所有值分配到数组中,因此只能打印最后一个值

   ###previouse code
    for item2 in "${!TUR[@]}"; do
        ARRAY="${item2}"
    done

    for item in "${ARRAY[@]}"; do
        printf "$ARRAY \n";
    done

如何成功地将所有元素分配给数组变量并打印出所有元素?

您的第一个问题是向数组添加元素,您可以执行类似于
ARRAY+=(“$item\u to\u add”)

所以,你可能会有这样的想法:

tur=( A B C D )

for item in "${tur[@]}"; do
    arr+=("$item")
done
for e in "${arr[@]}"; do
    printf "%s\n" "$e";
done
顺便说一句:最好避免使用Bash变量名
INCAPS
,因为Bash将其用于内部使用。惯例是对用户变量名使用小写

顺便说一句:第二个循环在功能上与:

$ printf "%s\n" "${arr[@]}"
两个回路均可替换为:

arr=("${tur[@]}")             # copy the array
printf "%s\n" "${arr[@]}"     # print the new array

第一个问题是向数组中添加元素,您可以执行类似于
array+=(“$item\u to\u add”)

所以,你可能会有这样的想法:

tur=( A B C D )

for item in "${tur[@]}"; do
    arr+=("$item")
done
for e in "${arr[@]}"; do
    printf "%s\n" "$e";
done
顺便说一句:最好避免使用Bash变量名
INCAPS
,因为Bash将其用于内部使用。惯例是对用户变量名使用小写

顺便说一句:第二个循环在功能上与:

$ printf "%s\n" "${arr[@]}"
两个回路均可替换为:

arr=("${tur[@]}")             # copy the array
printf "%s\n" "${arr[@]}"     # print the new array


您没有在数组中建立索引您覆盖了数组,因此,该数组将成为最后一个覆盖,这是TUR数组中的最后一个元素。您的编辑不是正确的解决方案,您只是在第一个元素后面追加。在某个地方,一秒钟内有一个重复项。此外,在第二个循环中,您需要的是
printf“%s\n'$item”
,而不是
ARRAY
@BenjaminW。事实上,这并不是我遇到的其他问题的最佳解决方案。你没有在数组中建立索引,你覆盖了数组,因此,数组变成了最后一个覆盖,这是你的TUR数组中的最后一个元素。你的编辑不是正确的解决方案,你只是在第一个元素后面追加。在某个地方,一秒钟内有一个重复项。此外,在第二个循环中,您需要的是
printf“%s\n'$item”
,而不是
ARRAY
@BenjaminW。事实上,这并不是我在其他问题中遇到的最佳解决方案。如果在
printf
格式字符串中展开变量,其内容将被解释为格式指令,可能会产生令人惊讶的结果–我将使用
printf“%s\n'$e”
(或者
“%s\n'
,如果实际不需要空间)@BenjaminW.:说得好。完成。在这种情况下,我们也可以执行
echo“$e”
。当然,后一个循环可以直接替换为
printf'%s\n'${arr[@]}”
,让
printf
重复格式字符串多次以使用所有参数。@CharlesDuffy:Ha!我只是在你打字的时候测试一下!第一个循环可以替换为
arr=(“${tur[@]}”)
问题中的第一个循环使用了
${!tur[@]}
间接寻址。如果展开
printf
格式化字符串中的变量,其内容将被解释为格式化指令,可能会产生令人惊讶的结果–我会使用
printf'%s\n'$e'
(或者
'%s\n'
,如果空间不是实际需要的话)。@BenjaminW.:好的观点。完成。在这种情况下,我们也可以执行
echo“$e”
。当然,后一个循环可以直接替换为
printf'%s\n'${arr[@]}”
,让
printf
重复格式字符串多次以使用所有参数。@CharlesDuffy:Ha!我只是在你打字的时候测试一下!第一个循环可以替换为
arr=(“${tur[@]}”)
问题中的第一个循环使用了
${!tur[@]}
间接寻址。