4.4 转义和引用

4.4 转义和引用 #

4.4.1 特殊字符 #

一个字符不仅有字面意义,还有元意(meta-meaning)

  • # 注释
  • ; 分号
  • \ 转义符号
  • “ 和 ’ 引号

引号 #

  • ’ 单引号,完全引用。

  • " 双引号,不完全引用,变量会进行解释。

  • ` 反引号,执行命令

括号 #

  • (),(()),$() 圆括号

单独使用圆括号会产生一个子 shell (yz=123)

数组初始化 lPS=(ip1 ip2 ip3)

  • [],[[]] 方括号

[](方括号)是传统的条件测试语法,也被称为单方括号条件测试。它执行基本的条件测试,主要用于进行字符串比较和数值比较。例如,可以来检查两个字符串是否相等,或者一个数值是否大于另一个数值。

[[]](双方括号)是高级的条件测试语法,也被称为双方括号条件测试。它是 Bash shell 的扩展功能,提供了更多的条件测试选项和功能。它支持字符串比较、模式匹配、正则表达式匹配、文件匹配等更复杂的条件测试。此外,双方括号还提供了更灵活的逻辑运算符和字符串操作符。

在使用条件测试时,以下是一些[]和[[]]的区别和注意事项:

  1. [] 需要在参数和操作符周围使用空格,而 [[]] 不需要使用空格。

  2. [] 是 POSIX 标准的一部分,因此在大多数 Shell 中都可以使用。而 [[]] 是 Bash shell 的扩展功能,只能在 Bash 或兼容 Bash 的 Shell 中使用。

  3. [] 使用标准的文本模式匹配,而 [[]] 支持更灵活的模式匹配,如通配符模式 * 和 ?、正则表达式匹配等。

  4. []执行条件测试时,会将变量进行拆分和文件名扩展(如果启用了 globbing)。而 [[]] 不会进行这样的操作,因此更适合处理包含特殊字符的变量。

综上,[[]] 提供了更多功能和灵活性,特别适用于 Bash shell 中的条件测试和逻辑运算。但是,如果需要编写可移植的脚本或在非 Bash 环境中运行,可能需要使用 [],因为它是更通用的条件测试语法形式。

  • <> 尖括号重定向符号

  • {} 花括号

输出范围 echo{0..9}

文件复制 cp /etc/passwd[,.bak],这个命令其实是 cp /etc/passwd /etc/passwd.bak

运算和逻辑符号 #

  • + - * / % 算数运算符

  • > < = 比较运算符

  • && || !逻辑运算符

其他符号 #

  • # 注释符
  • ; 命令分隔符
  • case 语句的分隔符要转义 ;;
  • : 空指令
  • . 和 source 命令相同
  • ~ 家目录
  • , 分隔目录
  • * 通配符
  • ? 条件测试或通配符
  • $ 取值符号
  • | 管道符
  • & 后台运行
  • 空格

4.4.2 转义符号 #

  • \n,\r,\t 单个字母的转义

  • \$,\",\\ 单个非字母的转义