无法使用printf输出负数,但回显有效

时间:2019-04-07 21:09:33

标签: bash unix

很抱歉,如果这是一个愚蠢的问题,并且在手册页上有明显的答案。我在那里找不到很好的信息。

这是一个初学者练习的问题,其中给出了两个非零的整数,您需要编写一个脚本来在新行上打印它们的和,差,乘积和商。

当然,有很简单的方法可以一行完成,但是这就是我最终要做的事情

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" ))"

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

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

改用它:

printf '%s\n' "$(( x / y ))"