如何在某些不可打印字符分隔符处拆分字符串?

如何在某些不可打印字符分隔符处拆分字符串?

我知道如果$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在输出中添加了尾随,您将始终获得最后一个空元素。

相关内容