请帮助我,如何在我的bash脚本中显示结果编号

请帮助我,如何在我的bash脚本中显示结果编号,bash,printf,Bash,Printf,我的剧本 echo -n "number 1 : "; read bil1 echo -n "number 2 :"; read bil2 jlh=$(echo $bil1 + $bil2 |bc -l |sed -e 's/^\./0./' -e 's/^-\./-0' -e 's/\.0*$//'); printf "Your result : %d + %d = %'d\n" $bil1 $bil2 $jlh 如果我在$bil1中输入“0.1”,在$bil2中输入“0.4”,

我的剧本

 echo -n "number 1 : ";
 read bil1
 echo -n "number 2 :";
 read bil2
 jlh=$(echo $bil1 + $bil2 |bc -l |sed -e 's/^\./0./' -e 's/^-\./-0' -e 's/\.0*$//');
 printf "Your result : %d + %d = %'d\n" $bil1 $bil2 $jlh
如果我在$bil1中输入“0.1”,在$bil2中输入“0.4”,结果是

line 24: printf: 0.1: invalid number
line 24: printf: 0.4: invalid number
line 24: printf: 0.5: invalid number
Your result : 0 + 0 = 0
我想:

Your result : 0.1 + 0.4 = 0.5
如何在我的bash中显示该结果???

使用expr

jlh=
expr$bil1+$bil2
将计算$bil1+$bil2并将变量jlh设置为相同的值

printf“您的结果:%d+%d=%d\n”$bil1$bil2$jlh

将根据需要打印结果

对于处理浮点数,您需要使用bc,这在中有很好的解释

您使用的是用于整数的
%d
格式<代码>%f是浮点数的正确格式。-有关格式代码的完整参考信息,请参阅
sprintf
手册页<代码>%'.1f可能是您在这里想要的(感谢Adrian指出这一点!)

错误使用
%d
实际上不会导致printf失败,只会像您所经历的那样截断数字(例如0.4->0)


还有一个小问题:第二个
sed
表达式缺少终止符(没有尾随的
/

例如,您应该使用bc。因为bash不支持浮点数,所以可以通过管道将表达式传输到bc并使用bc的输出进行打印

为了简单起见,我选择了echo而不是printf

#!/bin/bash

 echo -n "number 1 : ";
 read bil1
 echo -n "number 2 :";
 read bil2

 echo "$bil1 + $bil2 = $( echo "$bil1 + $bil2" | bc)"
神奇发生在
$(echo“$bil1+$bil2”| bc)
部分。在这里,我们通过管道传输您想要
bc
的表达式,并在该行开头的echo输出中使用bc的输出,该输出:

number 1 : 0.1
number 2 :0.4
0.1 + 0.4 = .5

在我的系统中,但正如其他人所指出的,您应该安装bc(当然,如果没有安装的话)

,但我希望我的bash脚本用于整数和floatsPerhaps,您实际上希望将它们格式化为字符串(
%s
),因为这样可以保留它们的确切内容
%d
%f
都在某种程度上重新格式化了它们的输入,似乎您希望保留它们的确切文本。在这种情况下,您应该将它们视为“字符串”,而不是“整数”或“浮点数”@kampu:directive中的
是GNU(?)扩展名的含义我现在想不起来了。@chepner:aaahhh…对于“标准”的新定义,它的意思是“GNU标准”而不是POSIX标准…好的。@kampu我想你有一个
l
而不是
1
bash
不支持浮动,所以你必须使用例如
bc
(或其他外部计算器来为您完成此项工作)。如果这是一个选项,您可以使用支持本机浮动的
ksh
。另请参见。复制: