Var1设置为执行命令的内容,如何将Var2设置为Var1的命令

Var1设置为执行命令的内容,如何将Var2设置为Var1的命令

我希望有两个变量。

我已经有了如下的工作设置

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)

适用于bashksh变体。变体中没有zsh

相关内容