我很难理解为什么仅在以下一种情况下保留尾随换行符。请参阅脚本:
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
通过执行命令替换并将其替换为命令的标准输出来执行扩展,删除所有尾随的换行符。