Bash for循环设置变量,它的值,并评估它?

时间:2017-02-05 01:13:00

标签: bash shell

如何使用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 作为名称的一部分来评估变量。

3 个答案:

答案 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