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