在zsh中, (${(@s.\n.)s}) 和 (${(@s/\n/)s}) 有什么区别

在zsh中, (${(@s.\n.)s}) 和 (${(@s/\n/)s}) 有什么区别

(${(@s.\n.)s})在 zsh 中, (点)和(斜杠)之间有什么区别(${(@s/\n/)s}),例如:

s=a\\nb\\nc\\nd

a=(${(@s.\n.)s})
b=(${(@s/\n/)s})

答案1

没有区别。无论您使用什么字符,该字符都会分隔您想要分割变量值的字符串。

zsh例如,手册在示例中使用分隔.字符串,而小节标题使用:

s:string:

在分隔符字符串处强制进行字段拆分。请注意,由两个或多个字符组成的字符串意味着它们必须按顺序匹配;这与参数中两个或多个字符的处理不同IFS。 [...]

[...];因此如下:

  line="one::three"
  print -l "${(s.:.)line}"

为一和三生成两行输出并忽略空字段。要覆盖此行为,请(@)同时提供标志,即 ${(@s.:.)line}

在手册该部分的开头,提到了分隔符可以是任何字符的事实。还提到您可以一起使用[and ],以及匹配其他类型的括号对(我的重点):

以下标志(除了p)后跟一个或多个参数,如图所示。 任意角色,或匹配对(...), {...}, [...], 或<...>, 可以用来代替冒号作为分隔符,但请注意,当标志采用多个参数时,每个参数周围必须有一对匹配的分隔符。

相关内容