Shell

破折號和本地關鍵字不重置外殼

  • July 17, 2021

dash shell(與兩個範例 print的bashbusybox ashfoo: ''實現不同)採用先前定義的變數的值,即用本地保護不起作用:

$ 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 中的實現有多麼不同)。

您觀察到的行為已記錄在案以及dashshell 中的預期內容。這不是一個錯誤。從dash外殼的手冊:

當一個變數被創建local時,它會從周圍作用域中具有相同名稱的變數(如果有的話)繼承初始值和exported 標誌readonly。否則,該變數最初是未設置的。

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