为何`printf "2+2" | bc`报错,`echo "2+2" | bc`却正常?
为什么
printf "2+2" | bc报错而echo "2+2" | bc正常? bc的运行逻辑:bc是交互式计算器,它必须读取到换行符或者输入结束信号(EOF)才会执行表达式计算。如果输入没有换行,bc会认为表达式还没输入完成,会一直等待后续内容,直到管道关闭时,它才发现输入不完整,因此抛出语法错误。
echo和printf的输出差异:
echo "2+2"默认会在输出字符串末尾自动追加一个换行符,传给bc的内容是2+2\n,bc识别到换行符,判定表达式完整,于是计算并输出结果4。printf "2+2"仅输出字符串本身,不会自动添加换行符,传给bc的内容就是纯2+2,没有换行触发计算,直到管道关闭,bc因输入不完整报错。
验证示例:
- 给printf手动加换行:
printf "2+2\n" | bc,就能正常输出4。 - 让echo不输出换行:
echo -n "2+2" | bc,同样会触发语法错误,和printf的情况一致。
内容的提问来源于stack exchange,提问作者phenivol
相关产品推荐
相关产品推荐

