我有一个属性文件来设置一些环境变量说:
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
请帮助我如何获得此输出。
答案 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中进行参考。语法可能相当棘手。它涉及使用eval
和echo
来设置值:
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
相同,并且您不关心引用。