Bash SH - 设置一个新的变量名称,其中包括另一个变量

Bash SH - 设置一个新的变量名称,其中包括另一个变量

我只需要在循环内创建一个增量变量名。变量必须使用“在变量名中使用循环次数”。

循环内的示例:

# on Cycle=1
MyVar$Cycle=Exec$Cycle   # (equal to MyVar1=Exec1)

# on Cycle=2
MyVar$Cycle=Exec$Cycle   # (equal to MyVar2=Exec2)

# etc...

那么如何正确设置var名称?

轻松完成批处理工作:

set MyVar%Cycle%=Exec%Cycle% ...

但我不知道如何在 Bash 中实现它。

当然,这样捆绑是MyVar$Cycle=Exec$Cycle行不通的。

只需能够设置增量变量名,这样我就可以随时向它们提供我可能需要的值。对我来说,脚本运行良好,但实时设置新变量名则不行。

答案1

解决此任务的一个可能方法是使用命令eval就像这样:

#!/bin/bash

for i in {1..5}
do
        eval "var$i"="$i"
done

# Output the result
for i in {1..5}
do
        echo -n "\$var$i : "
        eval echo "\$var$i"
done

示例输出:

$ ./cycle.sh
$var1 : 1
$var2 : 2
$var3 : 3
$var4 : 4
$var5 : 5

不过,我认为最好让你的脚本适应数组为了避免这样的魔法:

#!/bin/bash

for i in {1..5}
do
        array["$i"]="$i"
done

# Output the result
for i in {1..5}
do
        echo "\$array[$i]" : "${array[$i]}"
done

示例输出:

$ ./cycle.sh
$array[1] : 1
$array[2] : 2
$array[3] : 3
$array[4] : 4
$array[5] : 5
  • 注意:默认情况下,Bash 数组中的第一个索引是[0],而不是[1]

相关内容