破折号和本地关键字不重置 shell

破折号和本地关键字不重置 shell

短跑外壳(不同于巴什繁忙的盒子灰两个示例 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

您观察到的行为以及dashshell 中预期的行为都会被记录下来。这不是一个错误。来自dash外壳手册:

当创建一个变量时,它会继承周围范围内同名变量(如果有)的local初始值和exported 标志。readonly否则,该变量最初未设置。

相关内容