【发布时间】:2022-09-23 22:20:06
【问题描述】:
给定
for v in a b c; do
local y
y=$v
done
Zsh 自动输出以下内容:
y=a
y=b
为什么会出现这种情况?有什么用?它不会输出y=c,因此它不可靠eval\'able,但这种行为一定是有原因的。
给定
for v in a b c; do
local y
y=$v
done
Zsh 自动输出以下内容:
y=a
y=b
为什么会出现这种情况?有什么用?它不会输出y=c,因此它不可靠eval\'able,但这种行为一定是有原因的。
在zshbuiltins(1) 联机帮助页中,我们有
local -> "与typeset 相同..."
typeset -> ...
如果未设置 shell 选项
TYPESET_SILENT,则对于引用参数的每个剩余名称已经设置好了,参数的名称和值以赋值的形式打印出来。对于新创建的参数,或者下面列出的任何属性标志与名称一起给出时,不会打印任何内容。
它出现在 v=b 和 v=c 的迭代中,local y 正在报告上一次迭代.
我不是 zsh 专家,但如果它像 bash,那么只有 2 个变量作用域:全局和函数局部。没有循环局部变量的概念。
你应该
local y 退出循环,这样它就不会被不必要地重复执行,或者setopt TYPESET_SILENT
【讨论】: