在 bash 中,一个换行符等于两个换行符?

在 bash 中,一个换行符等于两个换行符?

因此,当我测试一直在研究的 Python 程序时,我注意到了这一点,echo -e "\n"并且printf "\n"根据ifBash 中的语句。

尽管echo -e "\n"打印两个换行符(默认情况下会附加一个),但 printf 只打印一个。

if [ "$(echo -e "\n")" == "$(printf "\n")" ]
then
    echo 1
fi

if [ $(echo -e "\n") -eq $(printf "\n") ]
then
    echo 1
fi

echo -e "\n"在 bash 中,两个都输出 1。我还注意到,将输出分配给变量只会为和输出一个换行符printf "\n"

A=$(echo -e "\n")
B=$(printf "\n")

echo $A # outputs a single newline
echo $B # also outputs a single newline

所以我在想echo使用 fx.stderr 输出换行符可能会有所不同吗?

答案1

换行符通过命令替换删除$()。bash 的手册页说:

命令替换允许命令的输出替换命令名。有两种形式:

$(command)

或者

`command`

Bash 通过执行命令在子 shell 环境中,用命令的标准输出替换命令替换,删除所有尾随的换行符。嵌入的换行符不会被删除,但它们可能会在分词过程中被删除。命令替换 $(cat文件)可以用等效但更快的 $(<文件)。

相关内容