bash - bash什麼是間接擴展 ${var*} 意味著什麼?!

  显示原文与译文双语对照的内容
122 2

我正在讀"面向初學者的 Bash指南。"。 這說明:

If PARAMETER 是 exclamation exclamation,Bash會使用從其餘部分的變數值作為變數的名稱,然後在替換的其餘部分使用這個變數,而不使用該變數的值,而不是使用本身。 這稱為間接擴展。

給出的示例為:


franky ~> echo ${!N*}


NNTPPORT NNTPSERVER NPX_PLUGIN_PATH



我在這裡不太清楚:

PARAMETER 其餘部分構成的變數的值

因為 PARAMETER 只是 N*,然後!

PARAMETER的其餘部分

就是 N* 怎麼會是一個變數? Bash是否在那裡搜索所有可能的命令?

时间: 原作者:

149 1

如果你閱讀 bash 手冊頁,它基本上確認了你所陳述的內容:

如果參數的第一個字元是感嘆號( ),則會引入變數間接定址級別。! Bash使用變數的它的余變數作為變數的名稱,然後擴展該變數,而該值則使用。 這稱為間接擴展。

但是,從那裡繼續閱讀:

下面描述的是 ${prefix*}${name[@]}的擴展。!

匹配前綴的${prefix*} 名稱。! 擴展到名稱以前綴開頭的變數的名稱,由 IFS 特殊變數的第一個字元分隔。

換句話說,你的特定示例 ${N*} 是一個與你所引用的規則相匹配的異常 。! 然而,它並不像在預期情況下那樣工作,如:


$ export xyzzy=plugh ; export plugh=cave



$ echo ${xyzzy} # normal, xyzzy to plugh


plugh



$ echo ${!xyzzy} # indirection, xyzzy to plugh to cave


cave



原作者:
...