在unix中获取环境变量的值

时间:2013-07-09 14:25:03

标签: bash unix

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

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

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

5 个答案:

答案 0 :(得分:13)

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

$ VAR1=Data1
$ VAR2=Data2
$ VAR3=VAR2
$ echo "${!VAR3}"
Data2

答案 1 :(得分:2)

我不使用bash,但是

mydata.properties:

VAR1=Data1
VAR2=Data2
VAR3=$VAR2

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

答案 2 :(得分:2)

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

VAR3=${VAR2}

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

答案 3 :(得分:0)

你想要

VAR2=$VAR3

然后

echo "Value of VAR3 is $VAR3"

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

答案 4 :(得分: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相同,并且您不关心引用。