我的非常可怕的標題道歉 - 和質量後差 - 但我基本上想要做的是這樣的:是否有可能從bash中的其他變量構建變量名?
for I in 1 2 3 4
echo $VAR$I # echo the contents of $VAR1, $VAR2, $VAR3, etc.
顯然,上述方法無效 - 這將(我認爲)嘗試呼應名爲$VAR$I
的變量這在Bash中可能嗎?
我的非常可怕的標題道歉 - 和質量後差 - 但我基本上想要做的是這樣的:是否有可能從bash中的其他變量構建變量名?
for I in 1 2 3 4
echo $VAR$I # echo the contents of $VAR1, $VAR2, $VAR3, etc.
顯然,上述方法無效 - 這將(我認爲)嘗試呼應名爲$VAR$I
的變量這在Bash中可能嗎?
是的,但不這樣做。改用數組。
如果你仍然堅持做這樣的說法......
$ foo1=123
$ bar=foo1
$ echo "${!bar}"
123
你應該考慮使用bash
陣列進行這樣的工作:
pax> set arr=(9 8 7 6)
pax> set idx=2
pax> echo ${arr[!idx]}
7
這肯定看起來像一個數組類型的情況。這裏有一個如何使用數組在bash,有一個非常好的討論的鏈接(用許多實例):Arrays
for I in 1 2 3 4 5; do
TMP="VAR$I"
echo ${!TMP}
done
我有一個一般的規則,如果我需要間接訪問變量(同上陣列),那麼它是時候把腳本從shell轉換成Perl/Python /等。 shell中的高級編碼儘管可能很快變得混亂。
對於您不想重構你的變量成陣列的情況下...
的一種方式......
$ for I in 1 2 3 4; do TEMP=VAR$I ; echo ${!TEMP} ; done
另一種方式......
$ for I in 1 2 3 4; do eval echo \$$(eval echo VAR$I) ; done
我還沒找到更簡單的方法。例如,這不起作用...
$ for I in 1 2 3 4; do echo ${!VAR$I} ; done
bash: ${!VAR$I}: bad substitution
我的答案的一部分以前是由@ Dummy00001發佈的 - 唯一一個真正回答問題的人。 – nobar 2014-04-02 16:16:05
在你的答案中抄錄鏈接頁面的某些部分直接理解本來是很好的......但這是一個很好的參考! – 2017-12-06 19:16:23
for I in {1..5}; do
echo $((VAR$I))
done
+1但不這樣做。改用數組。 – Nifle 2010-10-18 21:25:12
感謝您的建議陣列。使用你和pax的帖子,我設法讓它工作。乾杯。 – Stephen 2010-10-18 21:44:14
它不適用於'kshell' – g4ur4v 2014-07-23 10:28:56