#!/usr/bin/env bash
n=3
awk "BEGIN {printf \"%.\"$n\"f\", (2*2.22222222)}"
结果:4.444
但:
perl -e "printf \"%.3f\", (2*2.22222222)"
如何在 perl cmd 中将 3 替换为 n?
答案1
有多种方法可以做到这一点。您可能会发现使用 perl 执行此操作会像使用 awk 一样麻烦,但实际上您不应该那样做。以下是 perl 和 awk 的一些更简洁的方法:
$ awk -v n="$n" 'BEGIN{printf "%."n"f\n", (2*2.22222222)}'
4.444
或者更好的是,使用 awk 的内部输出格式变量(OFMT
),像这样(感谢@steeldriver):
$ awk -v OFMT="%.${n}f" 'BEGIN{print (2*2.22222222)}'
4.444
并且,在 Perl 中,定义一个保存 printf 格式的变量,然后在运行时将所需的数字作为参数传递,这样它将成为 ARGV 数组的第一个元素($ARGV[0]
):
$ perl -e '$frmt="%.$ARGV[0]f\n"; printf $frmt, (2*2.22222222);' $n
4.444
或者,导出 shell 变量n
,以便 perl 可以读取它$ENV{n}
:
$ export n
$ perl -e '$frmt="%.$ENV{n}f\n"; printf $frmt, (2*2.22222222);'
4.444