Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bash子shell截断尾随的换行符_Bash - Fatal编程技术网

从bash子shell截断尾随的换行符

从bash子shell截断尾随的换行符,bash,Bash,Bash似乎从子shell的输出中删除了尾随的换行符。例如: $ echo "Newline: '$(echo $'\n')'" 将产生产出 Newline: '' Newline: ' ' 有人知道一种解决方法或防止这种截断发生的方法吗?经过更多的实验,我发现了一种使用shell变量的解决方法。基本上,我会确保输出不会以换行结束,然后在以后去掉添加的文本 output="$(echo $'\n'x )" output="${output%x}" echo "Newline: '$outp

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

$ echo "Newline: '$(echo $'\n')'"
将产生产出

Newline: ''
Newline: '
'

有人知道一种解决方法或防止这种截断发生的方法吗?

经过更多的实验,我发现了一种使用shell变量的解决方法。基本上,我会确保输出不会以换行结束,然后在以后去掉添加的文本

output="$(echo $'\n'x )"
output="${output%x}"
echo "Newline: '$output'"
这将提供适当的输出

Newline: '
'

您可以使用
-e
选项启用反斜杠转义的解释,并使用一个
echo
完成所有操作

$ echo -e "Newline: '\n'"
将产生产出

Newline: ''
Newline: '
'

如果您只需要变量中的换行符:

nl=$'\n'
如果您需要保留换行符,您可以这样做(您在自己的答案中显示):

导致:

'hello
'

谢谢Andrew,但我只是以内部的
echo$'\n'
为例。我的实际子shell要复杂得多。