Arrays Bash i can';t打印数组的所有元素,但仅打印最后一个元素
我无法将for in的所有值分配到数组中,因此只能打印最后一个值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
###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[@]}
间接寻址。