印刷できない特定の文字区切り文字で文字列を分割する方法は?

印刷できない特定の文字区切り文字で文字列を分割する方法は?

$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}"

ただし、出力に末尾の要素を追加して常に最後の空の要素を取得するfind ... -print0ため、fromの出力には使用できません。\0

関連情報