我如何在bash中从另一个的输出创建一个变量

时间:2011-08-18 05:41:48

标签: bash variables dynamic eval

这是一个不符合预期的示例脚本:

#!/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循环。

3 个答案:

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