为什么ZSH局部变量赋值失败?

为什么ZSH局部变量赋值失败?

我正在阅读这个问题和答案:zsh - 变量赋值不起作用。帖子解释了如何修复它,但没有说明原因。为什么在这种情况下局部变量赋值会失败?

还有一些类似行为的例子,例如:

myfun()
{
local x=$(echo "a b"); echo ${x} 
}

myfun2()
{
local x 
x=$(echo "a b")
echo ${x}
}

myfun3()
{
local x=$(echo "a b")
echo ${x}
}

输出结果如下:

a
a b
a

如果我在所有情况下都将引号括在“x="$(echo "a b")” 上,我就会得到正确的变量分配。

如果我在 bash 中运行同样的东西,所有函数都会得到“a b”。

有人能解释一下为什么 bash 和 zsh 在这里的行为不同吗?

答案1

-x如果您使用(bash和)运行脚本,zsh您将看到 $(...) 代码的解释/解析方式不同。这是因为,常见问题解答中提到,zsh 中的单词拆分与向后/bash/sh 不兼容。

您可以使用SH_WORD_SPLIT来解决这个差异。

好的,所以这不是单词拆分问题,因为我们有一个命令替换,引用文档再次:

...如果替换没有用双引号引起来,则使用参数将输出分解为单词IFS...

所以你的替代方案是local IFS="":/

相关内容