当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : printf中的多次转义
帖子发表于 : 2017-04-11 23:41 

注册: 2016-07-08 17:43
帖子: 79
系统: debian8
送出感谢: 10
接收感谢: 0 次
这个容易理解。

debian8@debian:~$ printf "%-5s\n" "hah"
hah

这个呢? \\n --> \n
debian8@debian:~$ printf "%-5s\\n" "hah"
hah

按照上面的逻辑 \\\n如何解析? \\\n -->\\n --> \n 为何输出 \n(字面),咩有换行?

debian8@debian:~$ printf "%-5s\\\n" "hah"
hah \ndebian8@debian:~$

下面几个,我就菜了。

debian8@debian:~$ printf "%-5s\\\\n" "hah"
hah \ndebian8@debian:~$ printf "%-5s\\\\\n" "hah"
hah \
debian8@debian:~$ printf "%-5s\\\\\\n" "hah"
hah \


请解释一下,bash的这种行为?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: printf中的多次转义
帖子发表于 : 2017-04-12 2:53 

注册: 2013-05-26 6:58
帖子: 2013
系统: Debian 9
送出感谢: 846
接收感谢: 25
这里不仅printf命令有转义,还要处理shell的转义
printf "\\"其实传给printf的只有一个"\"
printf "\\\\"传给printf的就是两个"\"即"\\"
因为命令参数里如果有'\'的话,在shell里就需要转义,而传给命令的参数是转义之后的结果


_________________
Linux桌面优化综合贴[2017.09.18](欢迎各位补充或指正误区)
[2016.03.10]会C语言但看不懂英文文档的点这里,一个用C语言编写的简陋学习工具
单硬盘通过iso文件实机安装Debian的方法
重启或操作fcitx时失去响应的一个解决方法,不妨试试看


页首
 用户资料  
 
3 楼 
 文章标题 : Re: printf中的多次转义
帖子发表于 : 2017-04-12 7:15 

注册: 2016-07-08 17:43
帖子: 79
系统: debian8
送出感谢: 10
接收感谢: 0 次
<table>
<tr>
<td></td>
<td>\n</td>
<td>\\n</td>
<td>\\\n</td>
<td>\\\\n</td>
<td>\\\\\n</td>
<td>\\\\\\n</td>
<td>\\\\\\\n</td>
</tr>
<tr>
<td>escaping by "</td>
<td>none</td>
<td>\n</td>
<td>\\n</td>
<td>\\n</td>
<td>\\\n</td>
<td>\\\n</td>
<td>\\\\n</td>
</tr>
<tr>
<td>escaping by printf</td>
<td>newline</td>
<td>newline</td>
<td>\n literally</td>
<td>\n literally</td>
<td>\+newline</td>
<td>\+newline</td>
<td>\\n literally</td>
</tr>
</table>


附件:
analyse.png [9.4 KiB]
被下载 1 次


最后由 whaha 编辑于 2017-04-12 10:45,总共编辑了 1 次
页首
 用户资料  
 
4 楼 
 文章标题 : Re: printf中的多次转义
帖子发表于 : 2017-04-12 8:23 

注册: 2013-05-26 6:58
帖子: 2013
系统: Debian 9
送出感谢: 846
接收感谢: 25
仔细试了试,虽然我2楼原理说的没问题
但实测发现\n其实并不是转义后传递给程序,而是原样传递给程序,不知为何
viewtopic.php?f=21&t=483475&p=3188783#p3188783
楼主可以试试 echo "xxx"这样输出的就是转义后传递给程序的真实参数


_________________
Linux桌面优化综合贴[2017.09.18](欢迎各位补充或指正误区)
[2016.03.10]会C语言但看不懂英文文档的点这里,一个用C语言编写的简陋学习工具
单硬盘通过iso文件实机安装Debian的方法
重启或操作fcitx时失去响应的一个解决方法,不妨试试看


最后由 科学之子 编辑于 2017-04-12 8:59,总共编辑了 1 次

页首
 用户资料  
 
5 楼 
 文章标题 : Re: printf中的多次转义
帖子发表于 : 2017-04-12 8:54 

注册: 2013-05-26 6:58
帖子: 2013
系统: Debian 9
送出感谢: 846
接收感谢: 25
@whaha
我的问题找到了答案,同时又再次复习man bash
引用:
Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard.

用$'xxx'这样的形式转义应该就可以达到您的要求了
PS:
以前从来没用过这种格式就完全忽略了这种用法,原来这才是全能的escape用法


_________________
Linux桌面优化综合贴[2017.09.18](欢迎各位补充或指正误区)
[2016.03.10]会C语言但看不懂英文文档的点这里,一个用C语言编写的简陋学习工具
单硬盘通过iso文件实机安装Debian的方法
重启或操作fcitx时失去响应的一个解决方法,不妨试试看


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译