短跑外壳(不同于巴什和繁忙的盒子灰两个示例 print foo: ''
) 均采用先前定义的变量的值,即用 local 进行保护不起作用:
$ 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,尽管有是一次尝试(来源这显示了不同 shell 中的实现有多么不同local
)。
答案1
您观察到的行为以及dash
shell 中预期的行为都会被记录下来。这不是一个错误。来自dash
外壳手册:
当创建一个变量时,它会继承周围范围内同名变量(如果有)的
local
初始值和exported
标志。readonly
否则,该变量最初未设置。