为什么大多数情况下 Bash 中的变量结尾的换行符会被删除?

为什么大多数情况下 Bash 中的变量结尾的换行符会被删除?

我很难理解为什么仅在以下一种情况下保留尾随换行符。请参阅脚本:

declare -a B

B[1]='foo'
B[2]=$'foo\n'
B[3]="$( echo 'foo' )"
B[4]="$( echo -e 'foo\n' )"
B[5]="$( printf '%s\n' 'foo' )"
B[6]="$( cat <<END
foo

END
       )"

# Print each value.
for RESULT in "${B[@]}"
do
        echo "[${RESULT}]"
done

运行结果如下:

[foo]
[foo
]
[foo]
[foo]
[foo]
[foo]

我原本以为第一个没有换行符;第四个和第六个各有两个换行符;其他的各有一个换行符。但结果,只有第二个有换行符。

请问发生什么事了?

答案1

如下man bash所述命令替换,粗体强调我的:

猛击command通过执行命令替换并将其替换为命令的标准输出来执行扩展,删除所有尾随的换行符

相关内容