反斜杠的含义

反斜杠的含义

为什么下面的命令打印Smith但不打印\Smith

echo \Smith

答案1

反斜杠是 shell 语法中的转义字符那:

应保留后续字符的字面值,<newline> 除外。 ... <反斜杠> ... 应被删除

so\S与 意思相同S,因为S不是换行符,也不是可以转义的 shell 特殊字符($, ", ', {, [, `, \, |, &, ;, <, >, (, ), ?, , *, [, #, ~, =, %,或 tab ) 。要在给定的参数中包含文字反斜杠echo,请依次使用\或任何其他引用运算符对其进行转义:

echo \\Smith

或者

echo '\Smith'

或者

echo "\Smith"

\双引号内仍保留特殊含义,但后跟 时则不保留S,仅当后跟\`$"换行符时)。

现在,许多echo实现也会\在其参数中找到时进行特殊处理(尽管通常不会在后面跟着S,但不能保证),因此您可能想改用printf

printf '%s\n' '\Smith'

注意:这是示例未引用案例的指定行为,但如果以其他方式引用或read来自文件,则它可以更改

答案2

\S转义S,它不是特殊字符,因此给出S。您需要加倍反斜杠才能打印它:echo \\Smith

编辑:但更一般而言,最好使用printf.查看 和 之间的区别echo x\\by,其中输出“y”(“x”被退格键覆盖\b)与某些版本的echo(dash、zsh),以及printf "%s\n" x\\by输出“x\by”。

相关内容