我在用着Zsh 的参数扩展标志将字符串拆分为数组。
这有效:
string="one
two"
array=("${(f)string}")
echo "${array[1]}"
# Returns:
# one
这不起作用:
string="one\ntwo"
array=("${(f)string}")
echo "${array[1]}"
# Returns:
# one
# two
我们怎样才能使扩展将 解释\n
为换行符?
答案1
该zshexpn
手册涵盖了此类操作;一个选项是e
参数扩展标志(与(f)
分割相同的部分),但e
作为生成文字的一部分,会执行很多操作(参数扩展、命令替换和算术扩展)\n
。或者也许您确实希望所有这些操纵发生?
% string="a\nb" ; print -l ${(f)${(e)string}}
a
b
更确切地说,g
它仅处理由内置 echo 处理的转义序列:
% string="a\nb" ; array=( ${(f)${(g::)string}} ) ; print $array[2]
b
更准确的是仅按字面量进行拆分\n
:
% string="a\nb" ; print -l ${(s.\\n.)string}
a
b