2014-09-22 101 views
0

嗨我想通過連接兩個其他變量來設置一個變量。在bash腳本中連接變量

A=1 
B=2 
12=C 

echo $A$B 

期望的結果是C

但是我得到的答案永遠是12

這可能嗎?

修訂 例

A=X 
B=Y 
D=$A$B 

xy=test 

echo $D 

期望的結果是 「測試」

+3

12不是一個變量,並且沒有理由爲什麼它會自動映射? – Pieter21 2014-09-22 16:30:33

+0

不能是12個變量?我只是用它作爲例子。如果我們將12改爲XY – user3246938 2014-09-22 16:40:48

+0

爲了更清楚(也許得到更好的答案),我建議你將這個問題的名稱改爲「按值查找bash變量名」,這是你「重新嘗試去做。 – 2014-09-22 16:41:09

回答

2

它看起來像你想要indirect variable references

BASH讓你間接擴展參數 - 也就是說,一個變量可以包含另一個變量的名稱:

# Bash 
realvariable=contents 
ref=realvariable 
echo "${!ref}" # prints the contents of the real variable 

但作爲Pieter21表示他的評論12不是有效變量名。

+0

感謝您的回覆,但這不是我想要做的。我試圖通過使用變量來調用變量 – user3246938 2014-09-22 16:43:49

+0

是的,這就是它的作用。它可以讓你構造一個變量,其內容是另一個變量的名稱以獲取值。試試'realvariable = contents;一個=實; B =變量; REF = $ A $ B;回聲「$ {!ref}」'。 – 2014-09-22 16:48:41

+0

是的,這只是我想要的。感謝您的支持 – user3246938 2014-09-22 16:59:53

2

由於12是不是一個合法的變量名,這裏是用字符串變量的例子:

> a='hello' 
> b='world' 
> declare my_$a_$b='my string' 
> echo $my_hello_world 
my string 
+0

不,這不是我想要做的。我只是試圖通過從兩個其他變量創建變量名來調用$ 12 – user3246938 2014-09-22 16:35:59

+0

我想你需要一個動態變量,現在檢查答案。 – legends2k 2014-09-22 16:43:45

1

你所試圖做的是(幾乎)稱爲間接:http://wiki.bash-hackers.org/syntax/pe#indirection

...我做了一些快速測試,但它似乎不符合邏輯的做到這一點沒有第三個變量 - 你不能做連鎖間接直接作爲連接的變量/部分不會自己評估結果 - 您將不得不做另一次評估。我認爲先串聯它們可能是最簡單的。也就是說,你有機會重新思考你在做什麼。 哦,你不能使用數字(單獨或作爲起始字符)的變量名稱。

這裏,我們去:

cake="cheese" 

var1="ca" 
var2="ke" 

# this does not work as the indirection sees "ca" and "ke", not "cake". No output. 
echo ${!var1}${!var2} 

# there might be some other ways of tricking it to do this, but they don't look to sensible as indirection probably needs to work on a real variable. 
# ...this works, though: 
var3=${var1}${var2} 
echo ${!var3}