请帮助我,如何在我的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
。另请参见。复制: