[TOC] ## 概述 Bash 只有一种数据类型,就是字符串,不管用户输入什么数据,Bash 都视为字符串。因此,字符串相关的引号和转义,对 Bash 来说就非常重要 ## 语法 ### 转义 某些字符在 Bash 里面有特殊含义(比如`$`、`&`、`*`)。 ``` $ echo $date $ $ echo \$date $ $date ``` 反斜杠除了用于转义,还可以表示一些不可打印的字符。 * `\a`:响铃 * `\b`:退格 * `\n`:换行 * `\r`:回车 * `\t`:制表符 ``` $ echo "a\tb" a\tb $ echo -e a\tb atb $ echo -e "a\tb" a b ``` ### 单引号 单引号使得 Bash 扩展、变量引用、算术运算和子命令,都失效了 ``` $ echo '$USER' $USER ``` ### 双引号 ``` $ echo "$SHELL" /bin/bash $ echo "`date`" Mon Jan 27 13:33:18 CST 2020 ``` 用于原始格式输出 ``` # 单行输出 $ echo $(cal) 一月 2020 日 一 二 三 四 五 六 1 2 3 ... 31 # 原始格式输出 $ echo "$(cal)" 一月 2020 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ``` ### Here 文档 ``` $ foo='hello world' $ cat << EOF $foo "$foo" '$foo' EOF $ hello world $ "hello world" $ 'hello world' ``` Here 文档的本质是重定向 ``` $ command << token string token # 等同于 $ echo string | command ``` ### Here 字符串 三个`<`号,语义好于第一种 ``` $ cat <<< 'hi there' # 等同于 $ echo 'hi there' | cat $ cat <<< "hello $foo" $ [TOC] hello doo ```