POSIXシェルの関数と変数の別々の名前空間

POSIXシェルの関数と変数の別々の名前空間

ダッシュでは、関数と変数が異なる名前空間にあるように見えます。

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保証ですか?

ベストアンサー1

保証:

2.9.5 機能定義コマンド

関数は、新しい位置引数を使用して複合コマンドを呼び出すための単純なコマンドとして使用されるカスタム名です。機能は「機能定義コマンド」によって定義されます。[...]

関数名は fname です。アプリケーションでは、この名前が特別な組み込みユーティリティの名前ではなく名前(XBD名を参照)であることを確認する必要があります。実装では、関数名に拡張子として追加の文字を許可できます(MAY)。実装では、関数と変数に対して別々の名前空間を維持する必要があります。

おすすめ記事