我在bash中编写了一个简单的帐户脚本,但我无法找到显示浮点值的标准方法。这是使用awk的最佳解决方案吗?平衡也打印出0.00,我忘了包含一些东西吗?
#!/bin/bash
function printBalance()
{
echo | awk 'BEGIN { printf "\nCurrent balance: %.2f\n", balance }'
sleep 1
}
function makeWithdraw()
{
echo -en "\nWithdraw an amount: "
read deposit
if [ "$withdraw" -gt "$balance" ]; then
echo -en "\nInsufficient funds"
sleep 1
else
balance=$(( balance - withdraw ))
fi
}
balance=$((RANDOM%100+1))
# code continues...
答案 0 :(得分:3)
现在我看到了遗漏的内容:awk
需要提供变量balance
:
如果你有$myvar
,你必须:
awk -v awk_internal_var=${myvar} '{printf "%s", awk_internal_var}'
在你的情况下:
echo | awk -v balance=${balance} 'BEGIN { printf "\nCurrent balance: %.2f\n", balance }'
这就是打印0.00
的原因:因为它没有得到价值。
答案 1 :(得分:3)
只需使用bash的内置printf
命令:
$ printf '%.2f\n' 123.456
123.46
我还建议使用printf
而不是echo
来处理复杂的事情。在各种shell中有多个echo
版本,并且作为单独的程序。 <{1}}也是如此,但其行为更加一致。
例如,而不是
printf
你可以使用:
echo -en "\nWithdraw an amount: "
或者,如果字符串可能包含printf '\nWithdraw an amount: '
个字符:
%
答案 2 :(得分:0)
Greg says awk
应该这样做
$ awk 'BEGIN {printf "%.3f\n", 10 / 3}'
3.333