假设我在shell脚本
中声明了两个变量key和value$ key=key1
$ value=value1
现在我想创建一个名为key1的变量并为其赋值value1。我试过的是
$ export ${key}
$ export ${value}
$ $($key=$value)
输出:key1 = value1:找不到命令
我不知道该怎么做。
答案 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变量中的空格可能会在这种结构中产生意外结果。