$a"\0"$b"\0"$c"\0"$d
나는 $a, $b, $c, $d 등의 인수를 수용하고 이를 표준 출력 에 기록하는 CLI 도구를 찾고 있습니다 . CLI에서 파이프라인 시작 부분에 사용할 수 있는 표준 도구가 있습니까? 내 구현에서는 echo
사용자 정의 구분 기호를 허용하지 않는 것 같습니다.
답변1
printf
이 문제는 거의 다음과 같이 해결될 수 있습니다.
printf "%s\0" "$a" "$b" "$c" ...
printf
필요에 따라 해당 형식 문자열을 반복합니다(이 경우 각 매개변수에 대해 한 번씩). 그러면 각 매개변수 뒤에 널 바이트가 따라오게 됩니다.
마지막 널 바이트를 제거하려면 GNU를 사용하십시오 head
.
printf "%s\0" "$a" "$b" "$c" ... | head -c-1
Zsh의 내장 기능 print
도 후처리 없이 이 작업을 수행할 수 있습니다.
print -rNn "$a" "$b" "$c" ...
( -r
이스케이프 처리를 비활성화하고 -N
인수를 null 바이트로 구분하여 종료하며 -n
터미널 줄 바꿈을 비활성화합니다. 감사합니다.강철 드라이버팁을 주세요! )
답변2
이 printf
명령은 필요에 따라 형식을 반복하므로 다음을 수행할 수 있습니다.
print "%s\0"
우리는 실제로 그것을 볼 수 있습니다:
$ printf "%s\0" hello there | hdump -8
00000000 68 65 6C 6C 6F 00 74 68 hello.th
00000008 65 72 65 00 ere.
$ printf "%s\0" hello there everyone out there | hdump -8
00000000 68 65 6C 6C 6F 00 74 68 hello.th
00000008 65 72 65 00 65 76 65 72 ere.ever
00000010 79 6F 6E 65 00 6F 75 74 yone.out
00000018 00 74 68 65 72 65 00 .there.
또한 문자열 끝에 터미널 NUL을 배치한다는 점에 유의하십시오. 이를 원하지 않으면 제거할 수 있습니다.sed 's/.$//'
$ printf "%s\0" hello there everyone out there | sed 's/.$//' | hdump -8
00000000 68 65 6C 6C 6F 00 74 68 hello.th
00000008 65 72 65 00 65 76 65 72 ere.ever
00000010 79 6F 6E 65 00 6F 75 74 yone.out
00000018 00 74 68 65 72 65 .there