如何在shell脚本中创建一个变量中存在名称的变量?

时间:2015-04-16 11:10:38

标签: sh

假设我在shell脚本

中声明了两个变量key和value
$ key=key1

$ value=value1

现在我想创建一个名为key1的变量并为其赋值value1。我试过的是

$ export ${key}

$ export ${value}

$ $($key=$value)

输出:key1 = value1:找不到命令

我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

使用eval $key=$value代替$($key=$value):shell首先替换变量值,然后替换$(...)替换。由于没有带有该名称的命令,shell在STDERR中显示command not found。告诉shell使用eval再次将替换结果评估为常规shell命令。稍后您可以使用export $key导出结果。使用shell的-x标志可以很好地了解发生的情况:

$ key=key1
$ value=value1
$ set -x
$ $key=$value
+ key1=value1
sh: key1=value1: not found [No such file or directory]
$ $($key=$value)
+ key1=value1
sh: key1=value1: not found [No such file or directory]
$ eval $key=$value
+ eval key1=value1
+ key1=value1
$ echo $key1
+ echo value1
value1
$ export $key
+ export key1

另外,在以这种方式处理变量时要小心:shell变量中的空格可能会在这种结构中产生意外结果。