foo.sh:
PivotTable
在shell中
#!/bin/bash
x="$(cat)"
echo "got >>>$x<<<"
尾随换行符何处消失?
答案 0 :(得分:6)
Bash命令替换运算符故意丢弃尾随换行符;这记录在in the manual:
Bash通过在子shell环境中执行命令并使用命令的标准输出替换命令替换来执行扩展,并删除任何尾随换行符。
这种行为并不特定于Bash,它是由Bourne-descended shell在它之前完成的。原因是方便 - 因为大多数节目&#39;输出以换行符结束,保留它们将需要处理输出的代码以考虑换行符。
由于换行只是从末尾删除,因此可以通过在末尾添加虚拟字符并手动剥离来解决此问题:
# preserve trailing newlines
$ a="$(echo foo; echo .)"; a=${a:0:-1}
$ echo ">>>$a<<<"
>>>foo
<<<
# also works for programs that don't output a newline
$ b="$(printf foo; echo .)"; b=${b:0:-1}
$ echo ">>>$b<<<"
>>>foo<<<
有关更复杂的解决方法,请参阅this answer。