我希望有两个变量。
我已经有了如下的工作设置
var1="$(echo hello)"
当像下面这样打印时,它会说“你好”
"${var1}" = "hello"
我想要的是
var2=$var1
打印时显示“echo hello”
"${var2}" = "echo hello"
这在逻辑上可能是不可能的,因为 var1 被设置为命令的输出,无论如何,我可以设置 var2 来拉取设置 var1 的命令而不是命令的输出吗?
答案1
您无法提取生成变量的命令,因为该信息已不存在。然而,您可以var1
使用 来延迟执行生成命令的时间eval
。例如:
var1="echo hello"
echo "var1: $var1"
var2="$var1"
echo "var2: $var2"
var1=$(eval "$var1")
echo "var1: $var1"
将打印:
var1: echo hello
var2: echo hello
var1: hello
由于您可以使用eval
它来执行内部命令,var1
直到需要该命令的输出为止,因此您可以将命令本身保留在var1
.
尽管这不是一个好的编码实践。在几乎所有情况下,最好有两个变量:一个保存命令,一个保存输出。eval
由于一些安全和一般调试问题,使用是不受欢迎的。
附带说明一下,在这种特定情况下,如果您有一个命令,其中唯一的 shell 特殊字符是空格,则多个 shell 将允许您从变量执行子 shell 执行,而无需eval
,即这将在大多数 shell 中工作:
var3=$($var1)
适用于bash
和ksh
变体。变体中没有zsh
。