2017-09-27 76 views
0

我的意圖是動態檢索表的值,在循環的第一次運行中,其中t = 1,表的值應該是「表」,應該是「其他表「在第二次運行,所以我試圖命名變量使用循環,但我的輸出是」1「,」2「而不是」表「,」其他表「,但如果我把表= $ TABLENAME $ 1,輸出是「表」。 我無法選擇錯誤,我是shell腳本編程新手,如果有任何錯誤,請原諒!謝謝!在bash中動態檢索表的值

TABLENAME1="table" 
TABLENAME2="other table" 
NUM_TABLE=2 
for ((t = 1; t <= ${NUM_TABLE}; t++)){ 
table=$TABLENAME$t 
echo $table 
} 
+1

'foobar = 1; foob​​az = 2;一個= FOO; B =巴; C =巴茲; d = $ A $ B; echo $ {!d}; d = $一個$ C; echo $ {!d}'在你的情況下'echo $ {!table}' –

+0

感謝你的解釋David,我明白了你的觀點。 – nope

+0

順便說一句,這在[BashFAQ#6](http://mywiki.wooledge.org/BashFAQ/006)中有全面的介紹,包括討論如何避免首先出現問題的方法(以關聯數組和其他結構作爲替代方法)。 –

回答

1

正如David C.蘭在他的評論中寫道,你的腳本應該是這樣的:

TABLENAME1="table" 
TABLENAME2="other table" 
NUM_TABLE=2 
for ((t = 1; t <= ${NUM_TABLE}; t++)){ 
    var_name="TABLENAME"$t 
    echo ${!var_name} 
} 

首先,你需要得到變量名(VAR_NAME),然後使用$ {!VAR_NAME}將變量名擴展爲其值

+0

謝謝馬克西姆的解釋,現在對我有意義。 – nope

+0

heh。起初,我以爲你*是David Rankin,並且正準備對你進行回覆而不是標記它(如[如何回答]中所述)(https://stackoverflow.com/help/how-to -回答))。雖然新人們並不知道常見問題解答是什麼讓他們更寬容。 :) –