ダッシュキーワードとローカルキーワードはシェルをリセットしません。

ダッシュキーワードとローカルキーワードはシェルをリセットしません。

スプリントシェル(他強く打つそしてビジーボックスグレーどちらの例でも、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初期値とフラグを継承します。それ以外の場合、変数は最初に設定解除されます。exportedreadonly

おすすめ記事