尾随换行符将从bash subshel​​l中截断

时间:2010-12-15 23:25:48

标签: bash

Bash似乎从子shell的输出中删除了尾随的换行符。例如:

$ echo "Newline: '$(echo $'\n')'"

将产生输出

Newline: ''

是否有人知道某种解决方法或防止此截断的方法?

3 个答案:

答案 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: '
'