对带有Oa标志的参数扩展结果使用标量或数组赋值时的顺序不同

问题描述 投票:2回答:1

在zsh中,如果我执行以下操作

x=(1 2 3)
y=${(Oa)x}
z=(${(Oa)x})

然后echo $y将输出1 2 3,但echo $z将输出3 2 1

显然,y是一个标量,z是一个数组,但是为什么对y的标量赋值最终没有给它赋“ 3 2 1”?

zsh parameter-expansion
1个回答
0
投票

似乎是因为替换规则,所以'10。 Force Joining优先于'19。 订购'。

这里是zsh文档:

规则这是替代规则的摘要......10. 强制加入如果存在(j)标志,或者不存在(j)标志,但要按规则11给出的字符串进行拆分,并且在规则5中未进行连接,则该值中的任何单词都将连接在一起使用给定的字符串或$ IFS的第一个字符(如果没有)。请注意,(F)标志隐式提供了以这种方式加入的字符串。...19. 订购中如果结果仍然是数组,并且存在(o)(O)标志之一,则对数组重新排序。

--- zshparam(1), rules, zsh parameters

© www.soinside.com 2019 - 2024. All rights reserved.