Shell 速查表
1. I/O 重定向
符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| 重定向 |
| 文件不存在则创建,存在则清空后写入 |
| 重定向 |
| 追加到文件末尾 |
| 重定向 |
| 将文件内容作为输入 |
| 重定向 |
|
|
| 重定向 |
| 错误输出写入文件 |
| 追加 |
| 错误输出追加到文件 |
| 重定向 |
| Bash 用法,兼容性不如 |
| 让 |
| 顺序非常重要 |
| 让 |
| 常用于输出错误信息 |
| 丢弃标准输出 |
| 黑洞设备 |
| 丢弃错误输出 |
| 忽略报错 |
| 丢弃所有输出 |
| 静默执行 |
2. 管道与流程控制
符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| 管道,将前一个命令的 |
| 默认只传 |
| 将 |
| Bash 中等价于 |
| 前一个命令成功才执行后一个 |
| 依赖退出码 |
| 前一个命令失败才执行后一个 |
| 常用于失败兜底 |
| 顺序执行,不管前一个成功还是失败 |
| 单纯串联 |
| 后台执行 |
| 当前 shell 不阻塞 |
| 取反退出码 |
| 成功变失败,失败变成功 |
3. 分组与作用域
符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| 在子 Shell 中执行 |
| 内部环境变化不会影响外部 |
| 在当前 Shell 中分组执行 |
| 会影响当前 shell 环境 |
| 修改当前 Shell 的文件描述符或替换当前进程 |
| 后续命令输出也会被重定向 |
4. 变量、展开与替换
符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| 变量展开 |
| 取变量值 |
| 明确变量边界 |
| 推荐用于拼接 |
| 变量为空或未定义时使用默认值 |
| 常用于参数兜底 |
| 为空或未定义时赋默认值 |
| 会写回变量 |
| 变量已定义且非空时返回替代值 |
| 条件展开 |
| 取变量长度 |
| 字符串长度 |
| 命令替换 |
| 推荐,支持嵌套 |
| 命令替换(旧写法) |
| 不推荐,嵌套难看 |
| 算术扩展 |
| 仅整数运算 |
5. 通配与匹配
符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| 匹配任意长度字符 |
| Shell 通配,不是正则 |
| 匹配单个字符 |
| 匹配 1 个字符 |
| 匹配字符集合 |
| 匹配指定字符之一 |
| 匹配范围 |
| 也是 shell glob |
6. 引号与转义
符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| 双引号,保留空格,允许变量展开 |
| 最常用 |
| 单引号,原样保留,不展开变量 |
| 内容完全字面量 |
| 转义符 |
| 让特殊字符失去特殊含义 |
| 续行 |
| 将一行命令拆成多行 |
7. Here 文本输入
符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| Here Document,多行文本输入 |
| 常用于生成配置文件 |
| Here Document,禁止变量展开 |
| 保留原始内容 |
| Here String,单字符串输入 |
| 比 |
8. 注释与特殊用途
符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| 注释 |
| 引号内不算注释 |
| 空命令(no-op) |
| 常用于清空文件、占位 |
| 参数结束标记 |
| 防止文件名被当成选项 |
9. 文件描述符相关
写法 | 含义 | 示例 | 说明 |
|---|---|---|---|
|
|
| 标准输入 |
|
|
| 标准输出 |
|
|
| 标准错误 |
| 将 FD 3 指向当前 |
| 常用于备份输出 |
| 将 |
| 配合备份使用 |
| 关闭 FD 3 |
| 释放自定义 FD |
10. 常见组合写法
只在成功时继续
失败时输出错误
后台运行并记录日志
错误也进管道
统计文件行数
生成多行文件
备份并恢复 stdout/stderr
11. 易错点速记
2>&1 顺序不能乱
正确:
错误语义不同:
| 默认不传 stderr
只传 stdout。
* 是 Shell 展开,不是正则
cmd & 不等于守护进程
只是后台运行,终端关闭后可能退出。
() 和 {} 不同
前者不影响当前 shell,后者会影响。
12. 一行口诀
极简速查
符号 | 作用 |
|---|---|
| 覆盖重定向 |
| 追加重定向 |
| 重定向 |
| 重定向 |
|
|
| 管道 |
|
|
| 后台执行 |
| 前一个成功才执行后一个 |
| 前一个失败才执行后一个 |
| 顺序执行,不管成功失败 |
| 取反退出码 |
| 子 Shell 执行 |
| 当前 Shell 分组 |
| 命令替换 |
| 算术扩展 |
| 任意字符通配 |
| 单字符通配 |
| 字符集通配 |
| 保留空格,允许变量展开 |
| 原样保留,不展开 |
| 转义 |
| Here Document |
| Here String |
| 注释 |