printf语句应根据类似于的符号生成输出 文件格式表示法用于描述此卷中的文件格式 POSIX.1-2008(参见XBD文件格式表示法)。
File Format Notation定义%a
:
表示浮点数的浮点数参数 转换为“[ - ] 0xh.hhhhp±d”[...]
的样式
然而,Gawk和Mawk都不支持这个:
$ gawk 'BEGIN {printf "%a", 1}'
%a
$ mawk 'BEGIN {printf "%a", 1}'
mawk: run time error: improper conversion(number 1) in printf("%a")
为什么会这样?
答案 0 :(得分:2)
您正在查看POSIX 2008 SUSv4(Single Unix Specification)文档。很多软件都在此之前,gawk
包括在内。我怀疑gawk
实现是2001 SUSv2,并且还没有完全更新。
Linux(glibc)printf(3)
man page提到了这个问题(请参阅%a
的描述大约一半,抱歉没有链接的锚点):
a,A
(C99;不在SUSv2中)对于转换,double参数在样式[ - ] 0xh.hhhhp±中转换为十六进制表示法(使用字母abcdef); [...]
nawk
/ mawk
/ gawk
不要简单地逐字调用基础libc的printf()
或sprintf()
,它们或多或少地重新实现格式字符串处理。对于mawk
,请参阅do_printf()
例如,功能。 Perl还实现了自己的格式处理,sprintf
man page更加关注细节。
做支持%a
/ %A
的事情是:
printf
(即/usr/bin/printf
)printf
,因为如果libc支持bash-2.05 sprintf
,因为perl-5.22.0 请参阅此处接受的答案,了解其他一些背景知识:The format specifier %a for printf() in C