답변1
이는 최종 출력 라인을 끝내기 위해 개행 문자를 포함하지 않도록 프로그램에 지시하는 ZSH의 방법입니다.
% PS1="someothershellprompt "
someothershellprompt printf "hello world"
hello world%
someothershellprompt PS1='%# '
%
해결 방법은 프로그램이 최종 개행 문자가 포함된 행을 내보내도록 하는 것입니다. 따라서 귀하의 경우에는 "Hello World!\n"
최종 개행 문자를 포함하는 다른 방법을 사용할 수 있습니다.
마지막 줄 바꿈이 없으면 잘못된 코드에서 데이터가 자동으로 손실될 수 있습니다.
% printf "one\ntwo" | while read line; do echo $line; done
one
%
따라서 항상 마지막 개행 문자를 포함하는 것이 가장 좋습니다(파일이 텍스트 파일이 되려면 POSIX에서 해당 문자가 있어야 함).
(위 루프에는 많은 결함이 있다는 점에 유의하십시오 while
. 실제로 쉘, 특히 POSIX 쉘(ZSH는 기본적으로 지원되지 않음)에서 프로그래밍하려는 경우 이러한 결함을 실제로 수정해야 합니다.
printf "one\ntwo\n" |\
while IFS= read -r line || [ -n "$line" ]; do printf '%s\n' "$line"; done
또는 문제가 덜한(그리고 의심할 여지 없이 더 빠른) 라인 처리 기능을 갖춘 프로그래밍 언어로 전환할 수도 있습니다. )