引用

https://wangdoc.com/bash/quotation.html

引号和转义

\ 转义

  1. 某些字符在 Bash 里面有特殊含义(比如$、&、*),如果想要原样输出这些特殊字符,就必须在它们前面加上反斜杠,使其变成普通字符。这就叫做“转义”(escape)。
$ echo \$date
$date
  1. 反斜杠本身也是特殊字符,如果想要原样输出反斜杠,就需要对它自身转义,连续使用两个反斜线(\)。
$ echo \\
\
  1. 反斜杠除了用于转义,还可以表示一些不可打印的字符。
    \a:响铃
    \b:退格
    \n:换行
    \r:回车
    \t:制表符
    如果想要在命令行使用这些不可打印的字符,可以把它们放在引号里面,然后使用echo命令的-e参数。
$ echo -e "a\tb"
a        b
  1. 反斜杠转义换行为空格,实现多行命令
echo \
> fhc
fhc

单引号

单引号用于保留字符的字面含义,所有特殊字符在单引号里面,都会变为普通字符

$ echo '*'
*
  1. 在外层的单引号前面加上一个美元符号($),实现对里层的单引号转义(使用双引号更加合理)
$ echo $'it\'s'
it's

$ echo "it's"
it's

双引号

双引号比单引号宽松,大部分特殊字符在双引号里面,都会失去特殊含义,变成普通字符。

  1. 特殊字符:美元符号($)、反引号(`)和反斜杠(\)在双引号之中,依然有特殊含义,会被 Bash 自动扩展
$ echo "$SHELL"
/bin/bash

$ echo "`date`"
Mon Jan 27 13:33:18 CST 2020
  1. 双引号保存原始命令的输出格式(单引号不能实现命令,因为不包含特殊字符)
$ 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
  1. Here 文档内部会发生变量替换,同时支持反斜杠转义,但是不支持通配符扩展,双引号和单引号也失去语法作用,变成了普通字符。
$ foo='hello world'
$ cat << document
$foo
"$foo"
document

hello world
"hello world"
  1. 如果不希望发生变量替换,可以把 Here 文档的开始标记放在单引号之中。
$ foo='hello world'
  1. Here 文档的本质是重定向,它将字符串重定向输出给某个命令,相当于包含了echo命令。 所以,Here 字符串只适合那些可以接受标准输入作为参数的命令,对于其他命令无效,比如echo命令就不能用 Here 文档作为参数。

Here 字符串

使用三个小于号(<<<)表示,它的作用是将字符串通过标准输入,传递给命令。

  1. 有些命令直接接受给定的参数,与通过标准输入接受参数,结果是不一样的。
$ 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 字符串