인쇄할 수 없는 특정 문자 구분 기호에서 문자열을 분할하는 방법은 무엇입니까?

인쇄할 수 없는 특정 문자 구분 기호에서 문자열을 분할하는 방법은 무엇입니까?

$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

관련 정보