假設我在另一個變量中存儲了一個變量名:myvar=123varname=myvar現(xiàn)在,我想僅通過使用$ varname變量獲得123。有直接的方法嗎?我發(fā)現(xiàn)沒有內(nèi)置的bash可以按名稱查找,因此提出了以下建議:function var { v="\$$1"; eval "echo "$v; }所以var $varname # gives 123最終看起來還不錯,但是我想知道我是否錯過了更明顯的事情。提前致謝!
3 回答

catspeake
TA貢獻1111條經(jīng)驗 獲得超0個贊
在bash的手冊頁中:
${!varname}
如果參數(shù)的第一個字符是感嘆號,則將引入變量間接尋址級別。Bash使用由其余參數(shù)形成的變量的值作為變量的名稱;然后擴展此變量,并在其余替換中使用該值,而不是參數(shù)本身的值。這稱為間接擴展。

忽然笑
TA貢獻1806條經(jīng)驗 獲得超5個贊
沒有直接的符合Posix的語法,只有一個bashism。我通常這樣做:
eval t="\$$varname"
這將在任何Posix shell上都可以使用,包括那些bash登錄shell以及/bin/sh更小,更快的東西(例如)的系統(tǒng)ash。我喜歡bash并將其用于我的登錄shell,但我避免在命令文件中使用bashisms。
注意:編寫特定于bash的腳本的一個問題是,即使您可以指望安裝的bash,它也可能在路徑上的任何位置。在這種情況下,最好使用完全通用的/usr/bin/env shebang樣式,但是請注意,這仍然不是100%可移植的,并且存在安全問題。
添加回答
舉報
0/150
提交
取消