如果unquoted,这些字符分开words。它们是:
space tab newline | & ; ( ) < >
用来移除某些字符的特殊含义。包含3种quoting机制:escape character, single quotes, double quotes。
一个non-quoted的反斜杠是bash的转义字符,它保留下一个字符的字面值,而表示特殊含义,除了newline这个特殊情况。
如果出现了 \newline,且没有被quoted,\newline被当成一个 line continuation。
1 2 3 4 5 6 7 8 9 | $ printarg \ args: 1 0(1): sp $ printarg \a args: 1 0(1): a $ printarg \& args: 1 0(1): & |
注意第一行的\后面有个空格。
1 2 3 4 | $ printarg \ > test args: 1 0(4): t e s t |
可以看到\接换行,表示行连续。
单引号内的所有内容,保持它们的字面量,单引号里面不能再出现单引号。所有的扩展都无效了。
1 2 3 4 5 6 7 | $ printarg '`ls`' args: 1 0(4): ` l s ` $ printarg '\ > ' args: 1 0(2): \ \n |
可以看到此时\newline不是表示行连续,其内容包括在结果中。
除了 $ ` \ 这3个字符,其它所有字符保持字面量。
$和`用来实现shell expansion。\ 后面跟 $ ` " \ newline,用来转义这些字符,其中\newline表示line continuation。\ 后面跟任何其它字符,都不是转义,\ 被普通字母。
1 2 3 4 5 6 7 | $ printarg "\a" args: 1 0(2): \ a $ printarg "\ > " args: 1 0(0): |
上面的几种方法都不支持c语言中\n \t这种,ANSI-C Quoting就是这种转义。格式:$'string'。
1 2 3 | $ printarg $ '\t\n' args: 1 0(2): \t \n |