1

最近,我聽到一個故事,在shell腳本中使用花括號中的變量${variable}時,從環境變量中獲取其值(如果存在),但如果它被用作$variable一個從本地變量獲取其值(因爲它應該是).. 是真的嗎Mythbusting shell變量擴展

因爲據我所知$...${...}是等效的形式,我從來沒有遇到過這樣的問題。除非是過去的誤解,否則有人可能會說這種情況是可能的。

+2

這應該是幾乎微不足道的驗證自己。沒有? –

+1

@MattBall我嘗試了幾個炮彈,無法複製,我也不會認爲這只是一個笑話 – rook

回答

1

這個故事是無稽之談,就變量範圍而言這兩種形式都是等價的。以下是the standard說:

${parameter} 

值,如果有的話,parameter將被取代。

參數名稱或符號可以用大括號括起來,除了位置參數不止一個數字,或者參數後面跟着一個可以解釋爲名稱一部分的字符之外,大括號是可選的。匹配的大括號將通過計算大括號水平,跳過封閉的引用字符串和命令替換來確定。

如果參數名稱或符號未包含在花括號中,則擴展名將使用最長的有效名稱(請參見XBD規範術語表中的名稱),不管該名稱表示的符號是否存在。當shell掃描其輸入以確定名稱的邊界時,它不會被已知定義的名稱所限制。例如,如果F是定義的變量殼,命令:

echo $Fred 

不回送的$F接着red值;它會選擇最長可能的有效名稱Fred,在這種情況下可能會取消設置。