awk 调用system函数,再调用bash的printf函数
debian8@debian:~$ awk 'BEGIN{system("printf %xn 32")}'
20ndebian8@debian:~$
请看下面
printf %x\n 32
20ndebian8@debian:~$
awk 'BEGIN{system("printf %x\n 32")}'
0sh: 2: 32: not found
请问,这里的 awk 'BEGIN{system("printf %x\n 32")}' 为何会有这个结果?
问题没有这么简单哈,再请看
debian8@debian:~$ awk 'BEGIN{system("printf %x\\n 32")}'
20ndebian8@debian:~$
如何解释?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请参考linux的
system()
函数的说明.\n
在双引号里面的时候代表换行符,即system("printf %x\n 32")
相当于你在命令行里面先后敲了两个命令:printf %x
32
对于最后的结果
0sh: 2: 32: not found
可以拆分为三部分理解0
是printf %x
的运行结果sh: 2:
是print %x
的返回说明32: not found
是32
的运行报错结果可以使用
system("printf %x 32\n")
来试试,就能正确运行无错误因为当执行system("printf %xn 32") 到shell之前, awk已经根据n而让语句变成
所以真正shell执行时, 32将单独被shell执行了, 想解决的办法就是, 将语句转换成 printf '%xn' 32, 然后awk明白这个是一个字符串, 不需要它来转义, 但是又因为在awk里面, 单引号的转义是很复杂的, 所以我们可以用十六进制来表示: ' 对应 047