答案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
。如果您实际上计划在 shell 中进行编程,尤其是 POSIX shell(默认情况下 ZSH 不是),那么确实应该纠正这些缺陷;
printf "one\ntwo\n" |\
while IFS= read -r line || [ -n "$line" ]; do printf '%s\n' "$line"; done
或者,您可以切换到一种问题较少(并且无疑更快)的线路处理能力的编程语言。)