在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”?
似乎是因为替换规则,所以'10。 Force Joining优先于'19。 订购'。
这里是zsh文档:
规则这是替代规则的摘要......10. 强制加入如果存在
(j)
标志,或者不存在(j)
标志,但要按规则11给出的字符串进行拆分,并且在规则5中未进行连接,则该值中的任何单词都将连接在一起使用给定的字符串或$ IFS的第一个字符(如果没有)。请注意,(F)
标志隐式提供了以这种方式加入的字符串。...19. 订购中如果结果仍然是数组,并且存在(o)
或(O)
标志之一,则对数组重新排序。