2014-03-25 78 views
0

有人可以解釋echo "${PWD/#$HOME/~}"PWD評估爲$HOME的情況下如何打印~。千萬不要使用echo來閱讀這種替換。這裏發生了什麼?使用shell腳本進行說明

回答

1

這不是echo這是你的車殼使Parameter Expansion using ${parameter/pattern/string} syntax

pattern被擴展爲一個模式,就像文件名擴展 。參數被展開,模式 與其值的最長匹配被替換爲字符串。如果模式以‘/’, 開頭,則模式的所有匹配都將替換爲字符串。通常只有 第一場比賽被替換。如果模式以‘#’開頭,則它必須匹配 參數擴展值的開頭。如果模式開始 與‘%’,它必須在參數的擴展值的末尾匹配。 如果字符串爲空,模式的匹配被刪除,並且/以下的 模式可能被省略。如果參數是‘@’‘*’,則會依次將替換 操作應用於每個位置參數,並且 擴展是結果列表。如果參數是以‘@’‘*’作爲下標的數組變量 ,則替換操作將依次應用於該數組的每個成員 ,並且該擴展是由此產生的 列表。

doesn't look like POSIX supports it

在你的情況,如果它PWD ENVVAR它開始取代$HOME ENVVAR(不是字符串字面'$HOME')與~輸出的值。

+0

您可以使用POSIX支持的'$ {PWD#$ HOME}'。它不會帶你一路,但可以構建類似的東西,也許有一個臨時變量。 – tripleee

+0

精美地解釋@ J.F。塞巴斯蒂安。謝謝大家:) – mdsingh

+0

對於那些想閱讀bash參數擴展的人來說,這裏是一個很好的鏈接http://www.linuxjournal.com/content/bash-parameter-expansion – mdsingh