我知道如果$VAR包含一些字符串,我可以将这个字符串拆分为句点,以生成一个数组,如下所示:
% VAR=$ZSH_VERSION
% parts=(${(s:.:)VAR})
% printf '%s\n' $parts
5
0
7
Run Code Online (Sandbox Code Playgroud)
我必须:在(s::)标志之间放什么才能将$VARat 字符的值与 ASCII 代码 0分开,比如说?
我已经尝试了所有我能想到的。例如
% VAR=$'5\0000\0007'
% parts=(${(s:\000:)VAR})
% printf '%s\n' $parts
5^@0^@7
Run Code Online (Sandbox Code Playgroud)
它都不起作用。
您需要使用pflag 使其他扩展标志(如下p)识别转义序列:
$ printf '%s\n' ${(ps:\0:)VAR}
5
0
7
Run Code Online (Sandbox Code Playgroud)
或使用速记:
printf '%s\n' ${(0)VAR}
Run Code Online (Sandbox Code Playgroud)
保留空元素:
printf '%s\n' "${(0@)VAR}"
Run Code Online (Sandbox Code Playgroud)
但是您不能将它用于输出find ... -print0,因为它\0在输出中添加了尾随,您将始终获得最后一个空元素。
| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |