通过循环打印变量的值

通过循环打印变量的值

我正在使用 for 循环使用下面的语句打印下面的变量,但它没有正确打印值。它只给出迭代值。有人能帮我吗?

value1="1500067"
value2="1500068"
value3="1500069"
package1="CNN"
package2="FOX"
package3="Discovery"

for iteration in {1..3}
do
echo ""$value""$iteration" - "$package""$iteration""
done

预期输出:

1500067 - CNN
1500068 - Fox
1500069 - Discovery

答案1

您确实应该使用数组来完成此类任务:

#!/bin/bash
values=( 
    1500067
    1500068
    1500069
)
packages=( 
    CNN 
    FOX 
    Discovery
)

for (( i=0; i < ${#values[@]}; i++ )); do
    echo "${values[i]} - ${packages[i]}"
done

或者,由于您有自然的键值对,因此关联数组

#!/bin/bash
declare -A packages=( 
    [1500067]=CNN 
    [1500068]=FOX 
    [1500069]=Discovery
)

for key in "${!packages[@]}"; do
    echo "$key - ${packages[$key]}"
done

答案2

我能够使用以下方法来完成此任务:

#!/bin/sh
value1="1500067"
value2="1500068"
value3="1500069"
package1="CNN"
package2="FOX"
package3="Discovery"

for i in {1..3}; do
    var1="value$i"
    var2="package$i"
    echo "${!var1} - ${!var2}"
done

您对 echo 命令的双引号太过分了,由于其设置方式,您实际上已经取消了变量的引号。只需将整个参数用一对引号括起来就可以了。如果您遇到需要将某些内容与变量相匹配的情况,最好使用括号来保留其名称:

${var1}_something_else

请注意,尽管有#!/bin/shhashbang,但我相信这包含一些 bash-isms{1..3}和间接引用${1var}。不过它可以在我的系统上运行。

相关内容