不能用printf输出负数,但echo工作[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

对不起,如果这是一个愚蠢的问题,在一些联机帮助页上有一个明显的答案。我在那里找不到好消息。

这是一个初学者练习题,其中给出了两个非零整数,你需要编写一个脚本来打印它们的总和,差异,产品和商,每个都在一个新行上。

当然,有一种非常简单的方法可以在一行中完成这项工作,但这就是我最终要做的事情

read x
read y
printf "$(( "$x" + "$y" ))\n"
printf "$(( "$x" - "$y" ))\n"
printf "$(( "$x" * "$y" ))\n"
printf "$(( "$x" / "$y" ))\n"

虽然如果x和y为正且x大于y,这样可以正常工作,但当任何操作产生负结果时(即当x或y为负或x小于y时),我会收到错误

例如,如果x为50且y为20,则得到

70
30
1000
2

但如果x是20和y 50

70
./twon: line 3: printf: -3: invalid option
printf: usage: printf [-v var] format [arguments]
1000
0

类似的,如果我尝试负数,让x = -50和y = 20

./twon: line 3: printf: -3: invalid option
printf: usage: printf [-v var] format [arguments]
./twon: line 4: printf: -7: invalid option
printf: usage: printf [-v var] format [arguments]
./twon: line 5: printf: -1: invalid option
printf: usage: printf [-v var] format [arguments]
./twon: line 6: printf: -2: invalid option
printf: usage: printf [-v var] format [arguments]

但是,如果我用printf替换echo -e命令

read x
read y
echo -e "$(( "$x" + "$y" ))"
echo -e "$(( "$x" - "$y" ))"
echo -e "$(( "$x" * "$y" ))"
echo -e "$(( "$x" / "$y" ))"

一切正常,我得到任何一对整数的所有操作结果。

我在这里错过了什么?

bash unix
1个回答
0
投票

请改用:

printf '%s\n' "$(( x / y ))"
© www.soinside.com 2019 - 2024. All rights reserved.