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
答案 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)。
关键是你需要两次评估(用于间接评估):
$i
以获取变量的名称(cpu_to_eth$i
)cpu_to_eth$i
以获取其实际值二阶评估需要单独的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