2013-07-09 103 views
4

我有一個屬性文件來設置一些環境變量說:獲取環境變量的值在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

請幫助我如何得到這個輸出。

+3

「但我正在犯錯誤。「 - **什麼**「錯誤」? – 2013-07-09 14:26:30

回答

13

如果你真的需要展開VAR3點(而不是隻設置VAR3到VAR2的價值開始)的變量,你可以使用間接變量擴展與${!varname}

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

我不使用bash,但

mydata.properties: 

VAR1=Data1 
VAR2=Data2 
VAR3=$VAR2 

應該這樣做。請注意最後一行中var2的額外$ infront。

+0

回聲聲明仍然不會只有這種變化 –

+0

'echo「VAR3是$ {VAR3}」'不會打印'VAL3是Data2'?怎麼會這樣?這是bash屬性文件或一般行爲的特殊屬性嗎? – tike

+0

這不是問題中的'echo'代碼 - 問題在於'echo'VAR3是$$ VAR3「'或'echo」VAR3是$ {$ VAR3}'。其中第一個給出了一個錯誤的替代錯誤,其中第二個輸出'$'的值,後面是文字'VAR3' –

0

你想

VAR2=$VAR3 

然後

echo "Value of VAR3 is $VAR3" 

注意在這兩個地方的單一$。您使用$來引用變量的值,因此您在分配VAR2的值時以及在回顯命令中打印它的值時需要使用它。

1

您可能想養成這樣做的習慣:

VAR3=${VAR2} 

這是一樣的VAR3=$VAR2,但是當你使用嵌入到其他文本變量(如VAR3=${VAR2}_foo),您將需要{},所以它在默認情況下使用它們是一個好主意。

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,而你不知道不關心參考。