本文整理 Linux Shell 中的转义字符。
在 Linux Shell 中,有很多字符是有特殊含义的,如果期望把这个字符当作普通字符来处理,需要经过 \
的转义。
在双引号中即可变普通字符的特殊字符
` ` *
空格 ‘\ `
这是转义空格。如果路径中包含空格,那么使用 \
转义可以避免路径被分割成 Shell 的两个参数。
我有另一篇描述 Linux Shell 中路径空格转义相关的博客:
星号 ‘*`
如果单独使用 *
将会表示当前路径下枚举的所有文件或文件夹。如果希望保持 *
的原意,那么将其包裹在引号内,或者使用转义 \*
。
井号 #
表示注释。
换行符
在引号中,也可以直接换行。这样换行符就是字符串的一部分。
即便在引号中也依然被 Shell 解释的特殊字符
"
$
`
\
双引号 ‘"’
双引号的作用是避免空格将本来属于同一段参数的字符串分割成两部分。那么如果真的需要双引号的话就需要使用 \
来转义。
1
echo "Hello \"Walterlv\""
这样才可以输出:Hello "Walterlv"
。
反引号 `
跟引号一样的作用。
在引号中也需要转义。
美元符 \$
在 Linux Shell 中,这是变量的引用。例如 ${x} 就是引用 x
变量。
1
2
$ echo "上一个程序的返回值为:\$? = $?"
上一个程序的返回值为:$? = 127
在引号中也需要转义。
反斜杠 \
因为 \
是转义字符,所以其本身的使用也必然需要转义。
在引号中也需要转义。
任意字符
任意字符也可以使用 \
转义,虽然没用,但也是一个特性。
1
2
$ echo \H\e\l\l\o\ \"\W\a\l\t\e\r\l\v\"
Hello "Walterlv"
参考资料
- Escape Characters - Shell Scripting Tutorial
- How to enable linux support double backslashes “\” as the path delimiter - Stack Overflow
- shell - Backslash in Path - Unix & Linux Stack Exchange
- shell - Which characters need to be escaped when using Bash? - Stack Overflow
本文会经常更新,请阅读原文: https://blog.walterlv.com/post/linux-shell-escape.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected]) 。