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

How to create a variable in shell script whose name is present in variable?

假设我在 shell 脚本中像这样声明两个变量键和值

$ key=key1

$ value=value1

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

$ export ${key}

$ export ${value}

$ $($key=$value)

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

我不知道该怎么做。

使用eval $key=$value代替$($key=$value):shell先替换变量值,然后$(...)替换。由于没有具有该名称的命令,shell 在 STDERR 中显示 command not found。使用 eval 告诉 shell 将替换结果作为常规 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 变量中的空格在这种结构中可能会产生意想不到的结果。