如何使用for循环定义变量,和其值,和能够对其进行评估?
我无法弄清楚评估部分,但使用for循环来定义变量和它的值似乎有效。具体地,
rifs := nettest.RoutedInterface("ip", net.FlagUp | net.FlagBroadcast)
if rifs != nil {
fmt.Println("Routed interface is ",rifs.HardwareAddr.String())
fmt.Println("Flags are", rifs.Flags.String())
}
for i in {1..4}
do
export my${i}var="./path${i}_tofile"
# or
# export my${i}var=./path${i}_tofile
# or
# eval "my${i}var=\"./path${i}_tofile\""
echo $[my${i}var]
done
无法正确评估,但shell确实正确创建了变量和值。
echo
返回
echo $my1var
但我需要使用./path1_tofile
作为名称的一部分来评估变量。
答案 0 :(得分:2)
如果不使用数组,这就变得复杂了:
for i in {1..4}
do
declare my${i}var="./path${i}_tofile"
tmpvar=my${i}var # temporary variabled needed for...
echo "$tmpvar=${!tmpvar}" # bash indirect variable expansion
done
答案 1 :(得分:1)
您应该使用数组变量:
declare -a myvar
for i in {1..4}
do
myvar[$i]="./path${i}_tofile"
done
更多详情:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html
答案 2 :(得分:0)
只需替换您正在使用的回音:
v=my${i}var
echo ${!v}
然后,脚本:
#!/bin/bash
for i in {1..4}
do
export my${i}var="./path${i}_tofile"
v=my${i}var
echo ${!v}
done
将执行为:
$ ./script
./path1_tofile
./path2_tofile
./path3_tofile
./path4_tofile
但是,老实说,使用间接变量绝非易事 请考虑使用索引数组(在此用例中,即使是普通数组也可以使用):
declare -A myvar
for i in {1..4}
do
myvar[i]="./path${i}_tofile"
echo "${myvar[i]}"
done