答え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
あるいは、問題が少ない(そして間違いなくより速い)ライン処理機能を備えたプログラミング言語に切り替えることもできます。 )