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 美元(cat)为什么要换行_Bash - Fatal编程技术网

Bash 美元(cat)为什么要换行

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

foo.sh:

#/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<<<