最近,我聽到一個故事,在shell腳本中使用花括號中的變量${variable}
時,從環境變量中獲取其值(如果存在),但如果它被用作$variable
一個從本地變量獲取其值(因爲它應該是).. 是真的嗎?Mythbusting shell變量擴展
因爲據我所知$...
和${...}
是等效的形式,我從來沒有遇到過這樣的問題。除非是過去的誤解,否則有人可能會說這種情況是可能的。
最近,我聽到一個故事,在shell腳本中使用花括號中的變量${variable}
時,從環境變量中獲取其值(如果存在),但如果它被用作$variable
一個從本地變量獲取其值(因爲它應該是).. 是真的嗎?Mythbusting shell變量擴展
因爲據我所知$...
和${...}
是等效的形式,我從來沒有遇到過這樣的問題。除非是過去的誤解,否則有人可能會說這種情況是可能的。
這個故事是無稽之談,就變量範圍而言這兩種形式都是等價的。以下是the standard說:
${parameter}
值,如果有的話,
parameter
將被取代。參數名稱或符號可以用大括號括起來,除了位置參數不止一個數字,或者參數後面跟着一個可以解釋爲名稱一部分的字符之外,大括號是可選的。匹配的大括號將通過計算大括號水平,跳過封閉的引用字符串和命令替換來確定。
如果參數名稱或符號未包含在花括號中,則擴展名將使用最長的有效名稱(請參見XBD規範術語表中的名稱),不管該名稱表示的符號是否存在。當shell掃描其輸入以確定名稱的邊界時,它不會被已知定義的名稱所限制。例如,如果
F
是定義的變量殼,命令:echo $Fred
不回送的
$F
接着red
值;它會選擇最長可能的有效名稱Fred
,在這種情況下可能會取消設置。
這應該是幾乎微不足道的驗證自己。沒有? –
@MattBall我嘗試了幾個炮彈,無法複製,我也不會認爲這只是一個笑話 – rook