为什么循环输出"x=y"的zsh中的"local x"



给定

for v in a b c; do
local y
y=$v
done

Zsh自动输出以下内容:

y=a
y=b

为什么会出现这种情况?有什么用?它不会输出y=c,所以它不能可靠地输出eval,但这种行为一定有原因。

zshbuiltins(1)手册页中,我们有

  • local->quot;与typeset相同">

  • typeset->。。

    如果未设置shell选项TYPESET_SILENT,则对于引用已设置的参数的每个剩余名称,参数的名称和值将以赋值的形式打印出来。对于新创建的参数,或者当下面列出的任何属性标志与名称一起给出时,都不会打印任何内容。

它出现在v=b和v=c的迭代中,local y报告上一次迭代中y集的值。

我不是zsh专家,但如果它像bash一样,那么只有两个变量作用域:全局和函数局部。循环不存在局部变量的概念。

你应该

  • local y从循环中取出,这样它就不会被不必要地重复执行,或者
  • 设置上述shell选项以进行本地关闭:setopt TYPESET_SILENT

最新更新