如何用十进制作为变量来显示 perl printf

如何用十进制作为变量来显示 perl printf
#!/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

相关内容