为什么下面的命令打印Smith
但不打印\Smith
?
echo \Smith
答案1
应保留后续字符的字面值,<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”。