我知道如果$VAR
包含一些字符串,我可以按句点分割该字符串以生成一个数组,如下所示:
% VAR=$ZSH_VERSION
% parts=(${(s:.:)VAR})
% printf '%s\n' $parts
5
0
7
例如,为了将at 字符的值与 ASCII 代码 0 分开,我必须在:
in标志之间放置什么?(s::)
$VAR
我已经尝试了我能想到的一切。例如
% VAR=$'5\0000\0007'
% parts=(${(s:\000:)VAR})
% printf '%s\n' $parts
5^@0^@7
这些都不起作用。
答案1
您需要使用p
标志来制作其他扩展标志(如下p
)识别转义序列:
$ printf '%s\n' ${(ps:\0:)VAR}
5
0
7
或使用简写:
printf '%s\n' ${(0)VAR}
保留空元素:
printf '%s\n' "${(0@)VAR}"
但您不能将其用于 from 的输出find ... -print0
,因为它\0
在输出中添加了尾随,您将始终获得最后一个空元素。