为何下面的输出结果一样
debian8@debian:~$ awk 'BEGIN{system("printf '%x\\\\n' 32")}'
20ndebian8@debian:~$ awk 'BEGIN{system("printf '%x\\\\\n' 32")}'
20ndebian8@debian:~$
请详细解释一下?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先awk后面的字符串相当于3个字符串的连接
'BEGIN{system("printf '
#网页中代码颜色显示红色,表示字符串%x\\\\n
#网页中代码颜色显示黑色,没有引号括起来的字串' 32")}'
#网页中代码颜色显示红色第一个和第三个字符串是有单引号引起来的,会原样输出
第二个字符串会变成:
%x\\n
加双引号的
\
和不加双引号的\
区别:加引号的斜线,当后面不是特殊字符时,会原样保留,如
echo "a\b" #显示a\b
不加引号的斜线,当后面不是特殊字符时,不会显示,如
echo a\b #显示ab
所以第二个命令里面第二个字符串虽然多了一个
\
,但是后面是n,就像echo \n #显示n
一样,她最终还是变成
%x\\n
传递给awk的字符串实际上是:
BEGIN{system("printf %x\\n 32")}
awk中斜线也是转义字符,她传递给system函数时,字符串
"printf %x\\n 32"
就会变成:printf %x\n 32
你可以在命令行运行上面的命令,就是你的结果。
这里
printf
的参数有没有加引号,shell转义后传递给printf
的实际相当于printf %xn 32