引用
https://wangdoc.com/bash/quotation.html
引号和转义
\ 转义
- 某些字符在 Bash 里面有特殊含义(比如$、&、*),如果想要原样输出这些特殊字符,就必须在它们前面加上反斜杠,使其变成普通字符。这就叫做“转义”(escape)。
$ echo \$date
$date
- 反斜杠本身也是特殊字符,如果想要原样输出反斜杠,就需要对它自身转义,连续使用两个反斜线(\)。
$ echo \\
\
- 反斜杠除了用于转义,还可以表示一些不可打印的字符。
\a:响铃
\b:退格
\n:换行
\r:回车
\t:制表符
如果想要在命令行使用这些不可打印的字符,可以把它们放在引号里面,然后使用echo命令的-e参数。
$ echo -e "a\tb"
a b
- 反斜杠转义换行为空格,实现多行命令
echo \
> fhc
fhc
单引号
单引号用于保留字符的字面含义,所有特殊字符在单引号里面,都会变为普通字符
$ echo '*'
*
- 在外层的单引号前面加上一个美元符号($),实现对里层的单引号转义(使用双引号更加合理)
$ echo $'it\'s'
it's
$ echo "it's"
it's
双引号
双引号比单引号宽松,大部分特殊字符在双引号里面,都会失去特殊含义,变成普通字符。
- 特殊字符:美元符号($)、反引号(`)和反斜杠(\)在双引号之中,依然有特殊含义,会被 Bash 自动扩展
$ echo "$SHELL"
/bin/bash
$ echo "`date`"
Mon Jan 27 13:33:18 CST 2020
- 双引号保存原始命令的输出格式(单引号不能实现命令,因为不包含特殊字符)
$ 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 文档
Here 文档以 两个小于号+文档名开头 以 文档名结尾
<< document
text
document
文档名为document
- Here 文档内部会发生变量替换,同时支持反斜杠转义,但是不支持通配符扩展,双引号和单引号也失去语法作用,变成了普通字符。
$ foo='hello world'
$ cat << document
$foo
"$foo"
document
hello world
"hello world"
- 如果不希望发生变量替换,可以把 Here 文档的开始标记放在单引号之中。
$ foo='hello world'
- Here 文档的本质是重定向,它将字符串重定向输出给某个命令,相当于包含了echo命令。 所以,Here 字符串只适合那些可以接受标准输入作为参数的命令,对于其他命令无效,比如echo命令就不能用 Here 文档作为参数。
Here 字符串
使用三个小于号(<<<)表示,它的作用是将字符串通过标准输入,传递给命令。
- 有些命令直接接受给定的参数,与通过标准输入接受参数,结果是不一样的。
$ cat <<< 'hi there'
hi there
# 等同于
$ echo 'hi there' | cat
hi there
$ cat 'hi there'
cat: 'hi there': No such file or directory
直接使用,视为打开文件夹,当前返回是找不到
快捷键
- Ctrl + L:清除屏幕并将当前行移到页面顶部。
- Ctrl + C:中止当前正在执行的命令。
- Shift + PageUp:向上滚动。
- Shift + PageDown:向下滚动。
- Ctrl + U:从光标位置删除到行首。
- Ctrl + K:从光标位置删除到行尾。
- Ctrl + D:关闭 Shell 会话。
- ↑,↓:浏览已执行命令的历史记录。
命令符
- bash 进入bash环境(非图形linux打开基本上就是)
- bash --version 查看Bash版本
- exit 退出bash环境
- pwd 显示当前所在目录
- echo 输出文本
- type 判断命令来源
- cat 在终端设备上显示文件内容
特殊字符
$$
命令组合,左完成右执行||
命令组合,左失败右执行~
扩展用户主目录?
扩展单个非空字符*
扩展任意个字符[]
匹配括号中的一个或以[1-5]中的一个{}
匹配大括号中的多个或以{1..5}中的全部$
or${}
变量扩展$()
子命令扩展$(())
算数扩展\
转义''
引用 无特殊""
引用 含特殊<<
Here 文档<<<
Here 字符串