for循环中的变量在shell脚本中没有给出正确的输出

时间:2013-09-16 10:05:31

标签: shell sh

sh版本:1.14.7

#!/bin/sh
cpu_to_eth1=10
cpu_to_eth2=20
cpu_to_eth3=30
cpu_to_eth4=40
i=0
for i in 1 2 3 4
do
 echo "value of the $i th varible is $cpu_to_eth$i"
done

它无法正常工作,输出应为

value of the 1 th varible is 10
value of the 2 th varible is 20
value of the 3 th varible is 30
value of the 4 th varible is 40

3 个答案:

答案 0 :(得分:1)

使用bash,在这里使用array更合适,而不是使用多个变量。

数组示例:

cpu_to_eth_arr=( 10 20 30 40 )
for i in "${cpu_to_eth_arr[@]}"
do
    echo "$i"
done

另一种方法,使用关联数组:

cpu_to_eth[1]=10
cpu_to_eth[2]=20
cpu_to_eth[3]=30
cpu_to_eth[4]=40

for i in "${!cpu_to_eth[@]}"
do
    echo "value of the $i th varible is ${cpu_to_eth[$i]}"
done

答案 1 :(得分:1)

无需bash

#!/bin/sh
cpu_to_eth1=10
cpu_to_eth2=20
cpu_to_eth3=30
cpu_to_eth4=40
for i in 1 2 3 4; do
  eval echo "value of the $i th varible is "$"cpu_to_eth$i"
done

这适用于任何POSIX shell(例如,在dash,Ubuntu中的默认shell)。

关键是你需要两次评估(用于间接评估):

  1. 评估$i以获取变量的名称(cpu_to_eth$i
  2. 评估变量cpu_to_eth$i以获取其实际值
  3. 二阶评估需要单独的eval(或bash-ism)

答案 2 :(得分:0)

使用bash,您可以执行Shell parameter expansion

#!/bin/bash

cpu_to_eth1=10
cpu_to_eth2=20
cpu_to_eth3=30
cpu_to_eth4=40

i=0

for i in 1 2 3 4
do
 val=cpu_to_eth${i} # prepare the variable
 echo value of the $i th varible is ${!val} # expand it
done