我正在使用 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/sh
hashbang,但我相信这包含一些 bash-isms{1..3}
和间接引用${1var}
。不过它可以在我的系统上运行。