假設我在另一個變量中存儲了一個變量名:myvar=123varname=myvar現在,我想僅通過使用$ varname變量獲得123。有直接的方法嗎?我發現沒有內置的bash可以按名稱查找,因此提出了以下建議:function var { v="\$$1"; eval "echo "$v; }所以var $varname # gives 123最終看起來還不錯,但是我想知道我是否錯過了更明顯的事情。提前致謝!
3 回答
catspeake
TA貢獻1111條經驗 獲得超0個贊
在bash的手冊頁中:
${!varname}
如果參數的第一個字符是感嘆號,則將引入變量間接尋址級別。Bash使用由其余參數形成的變量的值作為變量的名稱;然后擴展此變量,并在其余替換中使用該值,而不是參數本身的值。這稱為間接擴展。
忽然笑
TA貢獻1806條經驗 獲得超5個贊
沒有直接的符合Posix的語法,只有一個bashism。我通常這樣做:
eval t="\$$varname"
這將在任何Posix shell上都可以使用,包括那些bash登錄shell以及/bin/sh更小,更快的東西(例如)的系統ash。我喜歡bash并將其用于我的登錄shell,但我避免在命令文件中使用bashisms。
注意:編寫特定于bash的腳本的一個問題是,即使您可以指望安裝的bash,它也可能在路徑上的任何位置。在這種情況下,最好使用完全通用的/usr/bin/env shebang樣式,但是請注意,這仍然不是100%可移植的,并且存在安全問題。
- 3 回答
- 0 關注
- 576 瀏覽
添加回答
舉報
0/150
提交
取消
