这是一个不符合预期的示例脚本:
#!/bin/bash
for dynamic in a b c; do
myvar=$dynamic
export $myvar="hi"
echo $(eval "$myvar")
echo $dynamic
done
我希望输出为:
hi
a
hi
b
hi
c
有什么想法吗?我愿意偏离这种方法,但我绝对希望能够创建一个从算法输出中命名的变量。在这种情况下,它只是一个for循环。
答案 0 :(得分:6)
eval
有导致错误的倾向,所以尽可能避免错误;在这种情况下,使用${!metavariable}
的间接扩展更加清晰:
#!/bin/bash
for dynamic in a b c; do
myvar=$dynamic
export $myvar="hi"
echo ${!myvar}
echo $dynamic
done
答案 1 :(得分:2)
以下是您的计划的修复程序。有两件事你错了: 首先是在声明变量时不需要'$'。 第二个是调用eval会将myvar的内容视为shell脚本。但是,您没有在任何地方定义“hi”作为命令。
for dynamic in a b c; do
myvar=$dynamic
- export $myvar="hi"
+ export myvar="hi"
- echo $(eval "$myvar")
+ echo "$myvar"
echo $dynamic
done
答案 2 :(得分:0)
目前还不完全清楚这是你正在寻找的东西,但我认为你想要的是:
#!/bin/sh a=A b=B c=C for i in a b c; do eval $i=value_$i eval echo \$$i done echo $a # Prints "value_a"