Bash 美元(cat)为什么要换行
foo.sh:Bash 美元(cat)为什么要换行,bash,Bash,foo.sh: #/bin/bash x=“$(类别)” echo“got>>>$xBash命令替换操作符故意删除尾随的换行符;这有文档记录: Bash通过在子shell环境中执行命令来执行扩展,并用命令的标准输出替换命令替换,同时删除所有后续换行符 这种行为不是Bash特有的,它是由Bourne Devented Shell在它之前完成的。原因是方便——因为大多数程序的输出都以换行结束,保留它们需要处理输出的代码来考虑换行 由于换行符仅从末尾移除,因此可以通过在末尾添加虚拟字符并手动将其剥离来
#/bin/bash
x=“$(类别)”
echo“got>>>$xBash命令替换操作符故意删除尾随的换行符;这有文档记录:
Bash通过在子shell环境中执行命令来执行扩展,并用命令的标准输出替换命令替换,同时删除所有后续换行符
这种行为不是Bash特有的,它是由Bourne Devented Shell在它之前完成的。原因是方便——因为大多数程序的输出都以换行结束,保留它们需要处理输出的代码来考虑换行
由于换行符仅从末尾移除,因此可以通过在末尾添加虚拟字符并手动将其剥离来解决此行为:
#> echo abc | foo.sh
got >>>abc<<<
#保留尾随换行符
$a=“$(echo foo;echo.)”;a=${a:0:-1}
$echo“>>>$a>>$b
#> echo abc | foo.sh
got >>>abc<<<
# 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<<<