为何下面的输出结果一样

发布于 2022-09-04 19:57:13 字数 192 浏览 15 评论 0

debian8@debian:~$ awk 'BEGIN{system("printf '%x\\\\n'  32")}'
20ndebian8@debian:~$ awk 'BEGIN{system("printf '%x\\\\\n'  32")}'
20ndebian8@debian:~$ 

请详细解释一下?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绾颜 2022-09-11 19:57:13

首先awk后面的字符串相当于3个字符串的连接

  1. 'BEGIN{system("printf ' #网页中代码颜色显示红色,表示字符串

  2. %x\\\\n #网页中代码颜色显示黑色,没有引号括起来的字串

  3. ' 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文