Shell

POSIX shell 中函式和變數的單獨命名空間

  • January 18, 2018

在 dash 中,函式和變數似乎存在於不同的命名空間中:

fn(){
   fn="hello world"
}
fn; echo "The value is $fn!" #prints: The value is hello world!
fn; echo "The value is $fn!" #prints: The value is hello world!
#the fn variable doesn't conflict with the fn function

這是特定於破折號的功能還是 POSIX 保證?

保證

2.9.5 功能定義命令

函式是使用者定義的名稱,用作簡單命令以呼叫具有新位置參數的複合命令。用“函式定義命令”定義函式。$$ … $$

該函式名為 fname;應用程序應確保它是一個名稱(參見 XBD 名稱)並且它不是一個特殊的內置實用程序的名稱。實現可以允許函式名中的其他字元作為副檔名。實現應為函式和變數維護單獨的名稱空間。

引用自:https://unix.stackexchange.com/questions/319852