1

我在 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...
4

3 回答 3

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:因为它没有得到价值。

于 2013-04-06T21:50:25.943 回答
3

只需使用 bash 的内置printf命令:

$ printf '%.2f\n' 123.456
123.46

我还建议使用printf而不是echo任何复杂的东西。echo在各种 shell 中有多个版本,并且作为单独的程序。也是如此printf,但它的行为更加一致。

例如,而不是

echo -en "\nWithdraw an amount: "

您可以使用:

printf '\nWithdraw an amount: '

或者,如果字符串可能包含%字符:

printf '\n%s: ' 'Withdraw an amount'
于 2013-04-06T21:58:37.830 回答
0

格雷格说 awk应该这样做

$ awk 'BEGIN {printf "%.3f\n", 10 / 3}'
3.333
于 2013-04-06T21:49:07.430 回答