如何从逻辑上讲清楚:printf中的多次转义
这个容易理解。
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的这种行为?
回答:
bash对于双引号首先会先进行“处理”再传递给某个命令,我们从显示一个bash变量就可以看出。例:
[root@~]#echo "PS1=${PS1}"PS1=[\[\e[32;40m\]\u@\w]\$
echo命令不会解析bash变量,所以肯定是bash在传递给命令echo之前,对一个用双引号括起来的字符串进行了处理。
回归提问,例:printf "%-5s\\\\\n" "hah" 首先bash解析字符串"%-5s\\\\\n",变成:
'%-5s\\\n' 传给printf,printf根据它自身的规定解析是一个斜线(\\),加上一个换行(\n)
如何让Bash不对字串进行解析?可以把双引号改成单引号。
经过bash解析后的字串到底是什么?可以用echo "%-5s\\\\\n",查看,得到的字符串就是传给printf的字符串。
总结:双引号中斜线解析后传给命令的字串中个数规律:
解析后斜线数量=int((解析前斜线数量+1)/2) int表示取整。
1个和2个都解析成1个,3个和4个都解析成2个…………
Bash中的处理和segmentfault的回答一样,我在回答时,在正文要写一倍数量的斜线才能得到我最终想要展示的斜线数量。
回答:
以上是 如何从逻辑上讲清楚:printf中的多次转义 的全部内容, 来源链接: utcz.com/p/193854.html