回答
eval echo \"\$$bar\"
會做到這一點。
請注意[eval']的安全含義(http://mywiki.wooledge.org/BashFAQ/048)。 –
該解決方案具有與非Bash shell(例如,嵌入式系統或Docker容器等輕量級環境)POSIX兼容的優點。 您可以將值賦予另一個變量,如下所示: '''sh var = $(eval echo \「\ $$ bar \」) ''' –
接受的答案很好。然而,@愛迪生問及如何爲陣列做同樣的事情。訣竅是你想讓你的變量持有「[@]」,以便數組用「!」擴展。看看這個功能轉儲變量:
$ function dump_variables() {
for var in "[email protected]"; do
echo "$var=${!var}"
done
}
$ STRING="Hello World"
$ ARRAY=("ab" "cd")
$ dump_variables STRING ARRAY ARRAY[@]
此輸出:
STRING=Hello World
ARRAY=ab
ARRAY[@]=ab cd
當剛剛ARRAY
給出的,顯示的第一個元素爲那正是由!
擴大。通過給出ARRAY[@]
格式,可以獲得數組及其所有值的擴展。
處理數組的好處。任何想法如何獲得數組*索引* [manual](http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)表明這通常是用'$ {!ARRAY [@]}'來完成的,這似乎與變量間接語法衝突。 – dimo414
@ dimo414是的,通過間接獲取密鑰更棘手。您只需傳遞名稱,然後在方法中進行擴展:'local -a'keys =(「$ {!'」$ var「'[@]}」)''。 [關於Bash黑客的間接文章](http://wiki.bash-hackers.org/syntax/arrays#indirection)更深入。 – bishop
爲了更清楚如何使用數組做到這一點:
arr=('a' 'b' 'c')
# construct a var assigning the string representation
# of the variable (array) as its value:
var=arr[@]
echo "${!var}"
- 1. 範圍變量的巴什
- 2. 巴什 - 功能變化的變量值
- 3. 巴什 - 變量指數提高功率
- 4. 巴什 - 命令和變量擴展
- 5. 巴什 - 從可變
- 6. 會話變量錯誤巴赫預訂
- 7. 從變量讀入變量
- 8. 變量變量
- 9. 變量變量
- 10. 什麼是「變量=變量|| {}」在JavaScript
- 11. 爲什麼變量=變量+1工作?
- 12. 變量變量:什麼時候有用?
- 13. 什麼是這種變量$變量
- 14. 變量++和變量是什麼意思?
- 15. PHP變量變量
- 16. PHP變量變量
- 17. PHP變量變量
- 18. 巴什 - 檢查是否變量是任何的許多選項
- 19. 巴什 - 增加新的生產線包括變量
- 20. 爲什麼變量不變?
- 21. PHP:與變量串聯的新變量(變量變量)
- 22. 變量PHP變量
- 23. preg_replace%變量$變量
- 24. PHP變量變量
- 25. JavaScript變量變量
- 26. Yii變量變量($$)
- 27. 什麼是變量?
- 28. 變量| =變量的含義?
- 29. 變量內的變量
- 30. PHP中的變量變量
請參見[BashFAQ/006](http://mywiki.wooledge.org/BashFAQ/006)。此外,您不應該嘗試在作業左側使用美元符號。 –