Shell
破折號和本地關鍵字不重置外殼
dash shell(與兩個範例 print的bash和busybox ash
foo: ''
實現不同)採用先前定義的變數的值,即用本地保護不起作用:$ foo=ee; bar() { local foo; echo "foo: '$foo'"; }; bar foo: 'ee'
它需要將其聲明為空:
$ foo=ee; bar() { local foo=; echo "foo: '$foo'"; }; bar foo: ''
它是一個
dash
錯誤(值得報告)還是local
期望初始化變數?local 的問題在於它不是 POSIX,儘管有一次嘗試(source顯示了local
各種 shell 中的實現有多麼不同)。
您觀察到的行為已記錄在案以及
dash
shell 中的預期內容。這不是一個錯誤。從dash
外殼的手冊:當一個變數被創建
local
時,它會從周圍作用域中具有相同名稱的變數(如果有的話)繼承初始值和exported
標誌readonly
。否則,該變數最初是未設置的。