4

我有一个属性文件来设置一些环境变量说:

mydata.properties:

VAR1=Data1
VAR2=Data2

现在我想定义一个名为 VAR3 的新变量,它可以保存 VAR1 或 VAR2,例如:

mydata.properties:

VAR1=Data1
VAR2=Data2
VAR3=VAR2

为了使这些变量可用于我的 bash 会话,我正在使用此命令

source mydata.properties

现在我的要求是打印 VAR3 的值,以便它可以打印源 VAR2 变量的内部数据,例如:

Value of VAR3 is Data2

我尝试了不同的选择,例如

echo "Value of VAR3 is $$VAR3"

这给了我垃圾输出。

或者echo "Value of VAR3 is ${$VAR3}"

这给了我错误Value of ${$VAR3}: bad substitution

请帮助我如何获得此输出。

4

5 回答 5

13

如果您确实需要扩展 VAR3 指向的变量(而不仅仅是将 VAR3 设置为 VAR2 的值),您可以使用间接变量扩展${!varname}

$ VAR1=Data1
$ VAR2=Data2
$ VAR3=VAR2
$ echo "${!VAR3}"
Data2
于 2013-07-09T15:34:54.457 回答
2

我不使用 bash,但是

mydata.properties:

VAR1=Data1
VAR2=Data2
VAR3=$VAR2

应该这样做。请注意最后一行中 var2 的额外 $ infront。

于 2013-07-09T14:29:14.723 回答
2

你可能想养成这样做的习惯:

VAR3=${VAR2}

这与 相同VAR3=$VAR2,但是当您使用嵌入在其他文本中的变量(如VAR3=${VAR2}_foo)时,您将需要{},因此默认情况下使用它们是个好主意。

于 2013-07-09T14:34:08.917 回答
0

你要

VAR2=$VAR3

然后

echo "Value of VAR3 is $VAR3"

注意$两个地方的单。您使用$来引用变量的值,因此在分配 VAR2 的值时以及在 echo 命令中打印其值时需要使用它

于 2013-07-09T14:29:38.667 回答
0

我想您想知道如何在 BASH 中进行引用。语法可能相当棘手。它涉及使用evalecho能够设置值:

VAR2=Data2
VAR3=VAR2   #Reference!

echo "The value of $VAR3 is $(eval echo \$$VAR3)"

最好使用散列数组而不是尝试直接使用引用:

REF[VAR3]=$VAR2

echo "The value of VAR3 = ${REF[VAR3]}"

或者,正如其他人指出的那样,您可以简单地这样做:

VAR3="$VAR2"

如果您只想设置$VAR3为相同$VAR2,并且您不关心引用。

于 2013-07-09T14:58:54.453 回答