
スプリントシェル(他強く打つそしてビジーボックスグレーどちらの例でも、print foo: ''
)は以前に定義された変数の値を取ります。つまり、ローカルを使用した保護は機能しません。
$ foo=ee; bar() { local foo; echo "foo: '$foo'"; }; bar
foo: 'ee'
空であると宣言する必要があります。
$ foo=ee; bar() { local foo=; echo "foo: '$foo'"; }; bar
foo: ''
これはdash
バグ(報告する価値がある)ですか、それともlocal
変数が初期化されると予想されますか?ローカルの問題はPOSIXではないということです。試してみました(源泉これは、異なるシェルで実装がどのように異なるかを示していますlocal
。
答え1
観察されたアクションは、dash
シェルで予想されるアクションと同様に記録されます。これは間違いではありません。dash
シェルマニュアルから:
変数が作成されると、周囲の範囲内の同じ名前の変数(存在する場合)の
local
初期値とフラグを継承します。それ以外の場合、変数は最初に設定解除されます。exported
readonly