为何Bash单引号会将\n解析为换行符?
Bash单引号中
\n被解析为换行的原因及影响字符 问题原因
这不是Bash单引号的解析问题,而是你使用的echo命令是BSD风格的实现(macOS自带的bash 3.2配套的就是BSDecho)。
Bash严格遵循了单引号规则——把'a\nb'原封不动传递给了echo命令,但BSDecho默认会自动解析字符串中的转义字符,所以它把接收到的\n转换成了换行符输出。
如果要验证Bash的单引号行为,可用printf替代echo执行:
printf '%s\n' 'a\nb'
输出会是a\nb,因为printf默认不会解析转义字符,完全按字面输出。
受影响的字符
BSDecho默认会解析以下转义字符:
\n:换行符\t:水平制表符\b:退格符\r:回车符\v:垂直制表符\c:终止后续输出(例如执行echo 'hello\cworld'只会输出hello)\\:输出反斜杠本身
补充说明:Linux系统上的GNUecho默认不会解析转义字符,必须添加-e选项才会处理,因此在Linux上执行echo 'a\nb'会直接输出a\nb,符合Bash单引号的字面保留规则。
内容的提问来源于stack exchange,提问作者peterjwest
相关产品推荐
相关产品推荐

