Bash似乎从子shell的输出中删除了尾随的换行符。例如:
$ echo "Newline: '$(echo $'\n')'"
将产生输出
Newline: ''
是否有人知道某种解决方法或防止此截断的方法?
答案 0 :(得分:3)
如果您只需要变量中的换行符:
nl=$'\n'
如果您需要保留换行符,可以执行此操作(您在自己的答案中显示):
f () { echo "hello"; }
output=$(f; echo "x")
output=${output%x}
echo "'$output'"
导致:
'hello
'
答案 1 :(得分:1)
经过一些实验,我找到了使用shell变量的解决方法。基本上,我确保输出不会以换行符结尾,然后我将删除添加的文本
output="$(echo $'\n'x )"
output="${output%x}"
echo "Newline: '$output'"
这给出了正确的输出
Newline: '
'
答案 2 :(得分:0)
您可以使用-e
选项启用反斜杠转义的解释,并使用一个echo
执行所有操作。
$ echo -e "Newline: '\n'"
将产生输出
Newline: '
'