Bash - 使用通配符删除字符后的所有文本

Bash - Remove all text after characters using wildcards

我看到 this SO answer 展示了如何删除 Bash 中字符串中某个字符后的所有文本。有了这些信息,我可以做这样的事情来舍入一个数字:

NUMBER=10.12345
NUMBER=${NUMBER%.*} # 10

但是,我想保留小数点后两位数。我怎样才能让 10.12345 变成 10.12?我不需要正确舍入,只需 trim。也许在 运行 ${NUMBER%.*}?

时带有通配符

您可以使用 printf 舍入浮点数。尝试 printf "%.2f" "${NUMBER}"。您也可以将该值保存到变量中:printf -v myvar "%.2f" "${NUMBER}".

使用 =~ 运算符:

$ num=10.12345
$ [[ $num =~ ^[0-9]*(.[0-9]{1,2})? ]] && echo $BASH_REMATCH
10.12
$ num=10
$ [[ $num =~ ^[0-9]*(.[0-9]{1,2})? ]] && echo $BASH_REMATCH
10