bash对于双引号首先会先进行“处理”再传递给某个命令,我们从显示一个bash变量就可以看出。例:
[root@~]#echo "PS1=${PS1}"
PS1=[[e[32;40m]u@w]$
echo命令不会解析bash变量,所以肯定是bash在传递给命令echo之前,对一个用双引号括起来的字符串进行了处理。
回归提问,例:printf "%-5s\\
" "hah" 首先bash解析字符串"%-5s\\
",变成:
'%-5s\
' 传给printf,printf根据它自身的规定解析是一个斜线(\),加上一个换行(
)
如何让Bash不对字串进行解析?可以把双引号改成单引号。
经过bash解析后的字串到底是什么?可以用echo "%-5s\\
",查看,得到的字符串就是传给printf的字符串。
总结:双引号中斜线解析后传给命令的字串中个数规律:
解析后斜线数量=int((解析前斜线数量+1)/2) int表示取整。
1个和2个都解析成1个,3个和4个都解析成2个…………
Bash中的处理和segmentfault的回答一样,我在回答时,在正文要写一倍数量的斜线才能得到我最终想要展示的斜线数量。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…