最后的新行“$(…)”在shell脚本中被删除.为什么?
有人能解释为什么这两个命令的输出不同吗?
$echo "NewLine1nNewLine2n" NewLine1 NewLine2 <-- Note 2nd newline here $echo "$(echo "NewLine1nNewLine2n")" NewLine1 NewLine2 $ <-- No second newline 有没有什么好办法可以在“$(….)”中将新行保留在输出的末尾?我想过只是添加一个虚拟字母并删除它,但我很想知道为什么这些新线条会消失. 解决方法
因为
that’s what POSIX specifies并且在Bourne shell中一直如此:
保留最终换行符的一种方法是 VAR="$(command; echo x)" # Append x to keep newline(s). VAR=${VAR%x} # Chop x. 可见: $x="$(whoami; echo x)" ; printf '<%s>n' "$x" "${x%x}" <user x> <user > 但为什么删除尾随换行符?因为通常你会这样想.我也在使用perl进行编程,我无法计算读取行或变量的次数,然后需要切换换行符: while (defined ($string = <>)) { chop $string; frobnitz($string); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |