![在 bash 中,一个换行符等于两个换行符?](https://linux22.com/image/1553370/%E5%9C%A8%20bash%20%E4%B8%AD%EF%BC%8C%E4%B8%80%E4%B8%AA%E6%8D%A2%E8%A1%8C%E7%AC%A6%E7%AD%89%E4%BA%8E%E4%B8%A4%E4%B8%AA%E6%8D%A2%E8%A1%8C%E7%AC%A6%EF%BC%9F.png)
因此,当我测试一直在研究的 Python 程序时,我注意到了这一点,echo -e "\n"
并且printf "\n"
根据if
Bash 中的语句。
尽管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文件)可以用等效但更快的 $(<文件)。