4.4 转义和引用 #
4.4.1 特殊字符 #
一个字符不仅有字面意义,还有元意(meta-meaning)
- # 注释
- ; 分号
- \ 转义符号
- “ 和 ’ 引号
引号 #
-
’ 单引号,完全引用。
-
" 双引号,不完全引用,变量会进行解释。
-
` 反引号,执行命令
括号 #
- (),(()),$() 圆括号
单独使用圆括号会产生一个子 shell (yz=123)
数组初始化 lPS=(ip1 ip2 ip3)
- [],[[]] 方括号
[](方括号)是传统的条件测试语法,也被称为单方括号条件测试。它执行基本的条件测试,主要用于进行字符串比较和数值比较。例如,可以来检查两个字符串是否相等,或者一个数值是否大于另一个数值。
[[]](双方括号)是高级的条件测试语法,也被称为双方括号条件测试。它是 Bash shell 的扩展功能,提供了更多的条件测试选项和功能。它支持字符串比较、模式匹配、正则表达式匹配、文件匹配等更复杂的条件测试。此外,双方括号还提供了更灵活的逻辑运算符和字符串操作符。
在使用条件测试时,以下是一些[]和[[]]的区别和注意事项:
-
[] 需要在参数和操作符周围使用空格,而 [[]] 不需要使用空格。
-
[] 是 POSIX 标准的一部分,因此在大多数 Shell 中都可以使用。而 [[]] 是 Bash shell 的扩展功能,只能在 Bash 或兼容 Bash 的 Shell 中使用。
-
[] 使用标准的文本模式匹配,而 [[]] 支持更灵活的模式匹配,如通配符模式 * 和 ?、正则表达式匹配等。
-
[]执行条件测试时,会将变量进行拆分和文件名扩展(如果启用了 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 单个字母的转义
-
\$,\",\\ 单个非字母的转义