Bash - 格式化值

时间:2013-04-06 21:43:48

标签: linux bash shell

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

3 个答案:

答案 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