引号和转义
最后更新于:2022-04-02 03:53:06
[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
```
';