在 BASH for 循环中访问变量值

问题描述 投票:0回答:1

我想在 BASH 的 for 循环中分配和打印变量值。

我的代码是这样的:

tea=(A B C D E F G)
c=0
for (( i=1; i<${#tea[@]}; i++ ));
do
    eval "var$c=${tea[$i]}";
    c=$((c+1));
    echo "$var$c" >> example.txt
done

我在我的 txt 文件中得到的输出是:1 2 3 4 5 6。我期望的输出是 B C D E F G。我不明白为什么我得到这个输出,我没有正确地为 var$c 赋值还是这个echo 命令无法读取我的变量值?非常感谢您的帮助。

bash shell for-loop echo eval
1个回答
1
投票

一种使用 nameref 的方法:

tea=(A B C D E F G)

c=0

for (( i=1; i<${#tea[@]}; i++ ));
do
    declare -n varC="var$c"                  # nameref
    varC="${tea[$i]}"
    c=$((c+1))
    echo "$varC" >> example.txt
done

这会产生:

$ cat example.txt
B
C
D
E
F
G
© www.soinside.com 2019 - 2024. All rights reserved.