|
SHLVL 每 次 启 动
一 个 |
bash 的 实 例 时 都
会 增 加 。
的 ID, 在
启 动 时 初 始 化
。 这 个 变 量 是
只 读 的 。 下 列
变 量 被 shell 使 用 。
有 时 bash 会 为 变
量 赋 默 认 值 ;
这 些 情 况 在 下
面 会 标 出 。
BASH_ENV 如
果 bash 在 执 行 一
个 shell 脚 本 时 设 定
了 这 个 变 量 ,
它 的 值 将 被 解
释 为 一 个 文 件
名 , 包 含 着 初
始 化 shell 用 到 的 命
令 , 就 像 ~/.bashrc
中 一 样 。
BASH_ENV 的 值 在
被 解 释 为 一 个
文 件 名 之 前 要
经 过 参 数 扩 展
, 命 令 替 换 和
算 术 扩 展 。 不
会 使 用 PATH
来 查 找 结 果 文
件 名 。
|
CDPATH 命 令 |
|
cd 的 搜 索 路 径
。 这 是 一 个 冒
号 分 隔 的 目 录
列 表 , shell 从 中 查
找 |
cd 命 令
的 目 标 目 录 。
可 以 是 这 样 :
".:~:/usr".
COLUMNS 用
在 内 建 命 令 select
当 中 , 用 来 判
断 输 出 选 择 列
表 时 的 终 端 宽
度 。 自 动 根 据
SIGWINCH 信 号 来 设 置
。
COMPREPLY 一 个 数 组 变
量 , bash 从 中 读
取 可 能 的 命 令
补 全 。 它 是 由
命 令 补 全 功 能
调 用 的 shell 函 数 产
生 的 。
|
FCEDIT 内 建 命 令 |
|
fc 默 认 的 编 辑
器 。 |
|
FIGNORE 一
个 冒 号 分 隔 的
后 缀 名 列 表 ,
在 进 行 文 件 名
补 全 时 被 忽 略
(参 见 下 面 的
READLINE 章 节 )。
一 个 后 缀 满 足
其 中 之 一 的 文
件 名 被 排 除 在
匹 配 的 文 件 名
之 外 。 可 以 是
这 样 : ".o:~".
GLOBIGNORE 一 个 冒 号 分
隔 的 模 式 列 表
, 定 义 了 路 径
名 扩 展 时 要 忽
略 的 文 件 名 集
合 。 如 果 一 个
文 件 名 与 路 径
扩 展 模 式 匹 配
, 同 时 匹 配
GLOBIGNORE 中 的 一
个 模 式 时 , 它
被 从 匹 配 列 表
中 删 除 。
HISTCONTROL 如 果 设 置 为
ignorespace, 以 space 开 头
的 行 将 不 会 插
入 到 历 史 列 表
中 。 如 果 设 置
为 ignoredups, 匹 配 上
一 次 历 史 记 录
的 行 将 不 会 插
入 。 设 置 为
ignoreboth 会 结 合 这
两 种 选 项 。 如
果 没 有 定 义 ,
或 者 设 置 为 其
他 值 , 所 有 解
释 器 读 取 的 行
都 将 存 入 历 史
列 表 , 但 还 要
经 过 HISTIGNORE 处 理
。 这 个 变 量 的
作 用 可 以 被
HISTIGNORE 替 代 。 多
行 的 组 合 命 令
的 第 二 和 其 余
行 都 不 会 被 检
测 , 不 管 HISTCONTROL
是 什 么 , 都 会
加 入 到 历 史 中
。
HISTFILE 保 存 命 令 历
史 的 文 件 名 (参
见 下 面 的 HISTORY
历 史 章 节 )。
默 认 值 是
~/.bash_history。 如 果 取
消 定 义 , 在 交
互 式 shell 退 出 时 命
令 历 史 将 不 会
保 存 。
HISTFILESIZE 历 史 文 件
中 包 含 的 最 大
行 数 。 当 为 这
个 变 量 赋 值 时
, 如 果 需 要 的
话 , 历 史 文 件
将 被 截 断 来 容
纳 不 超 过 这 个
值 的 行 。 默 认
值 是 500。 历 史 文
件 在 交 互 式 shell 退
出 时 也 会 被 截
断 到 这 个 值 。
HISTIGNORE 一 个 冒 号 分
隔 的 模 式 列 表
, 用 来 判 断 那
个 命 令 行 应 当
保 存 在 历 史 列
表 中 。 每 个 模
式 都 定 位 于 行
首 , 必 须 匹 配
整 行 (没 有 假 定
添 加 ’*’)。 在
HISTCONTROL 指 定 的 测
试 结 束 后 , 这
里 的 每 个 模 式
都 要 被 测 试 。
除 了 平 常 的 shell 模
式 匹 配 字 符 ,
’&’ 匹 配 上
一 个 历 史 行 。
’&’ 可 以 使
用 反 斜 杠 来 转
义 ; 反 斜 杠 在
尝 试 匹 配 之 前
将 被 删 除 。 多
行 的 组 合 命 令
的 第 二 行 以 及
后 续 行 都 不 会
被 测 试 , 不 管
HISTIGNORE 是 什 么 ,
都 将 加 入 到 历
史 中 。
HISTSIZE 命 令 历 史 中
保 存 的 历 史 数
量 (参 见 下 面 的
HISTORY 历 史 章
节 )。 默 认 值 是
500。
|
HOME 当 前 用 户 的
个 人 目 录 ; 内
建 命 令 |
|
cd 的 默 认 参 数
。 在 执 行 波 浪
线 扩 展 时 也 |
用 到 这
个 变 量 。
HOSTFILE 包
含 一 个 格 式 和
/etc/hosts 相 同 的 文
件 名 , 当 shell 需 要
补 全 主 机 名 时
要 读 取 它 。 shell 运
行 过 程 中 可 以
改 变 可 能 的 主
机 名 补 全 列 表
; 改 变 之 后 下
一 次 需 要 主 机
名 补 全 时 bash 会
将 新 文 件 的 内
容 添 加 到 旧 列
表 中 。 如 果 定
义 了 HOSTFILE 但
是 没 有 赋 值 ,
bash 将 尝 试 读 取
/etc/hosts 文 件 来 获
得 可 能 的 主 机
名 补 全 列 表 。
当 取 消 HOSTFILE
的 定 义 时 , 主
机 名 列 表 将 清
空 。
|
IFS 内 部 字 段 分
隔 符 |
|
Internal Field Separator 用 来
在 扩 展 之 后 进
行 分 |
词 , 使
用 内 部 命 令 read
将 行 划 分 成 词
。 默 认 值 是
’’<space><tab><newline>’’。
IGNOREEOF 控
制 交 互 式 shell 接 受
到 唯 一 一 个
EOF 字 符 时
的 行 为 。 如 果
有 定 义 , 值 是
需 要 在 一 行 的
开 始 连 续 输 入
EOF 字 符 ,
直 到 可 以 使 bash
退 出 的 字 符 个
数 。 如 果 这 个
变 量 存 在 , 但
是 值 不 是 一 个
数 字 或 者 没 有
赋 值 , 默 认 值
是 10。 如 果 变 量
没 有 定 义 ,
EOF 标 志 着
输 入 的 结 束 。
INPUTRC
readline 的
启 动 配 置 文 件
, 而 不 是 默 认
的 ~/.inputrc (参 见 下
面 的 READLINE 章
节 )。
|
LANG 用 来 决 定 没
有 特 地 用 |
|
LC_ 变 量 指 定 的
语 言 环 境 项 。 |
|
|
LC_ALL 这 个 变 量
超 越 了 |
|
|
|
LANG 和 所
有 其 他 指 定 语
言 环 境 项 的 LC_
变 量 。
LC_COLLATE 这 个 变 量 决
定 了 为 路 径 扩
展 的 结 果 排 序
时 的 字 母 顺 序
, 决 定 了 范 围
表 达 式 的 行 为
, 等 价 类 , 和
路 径 扩 展 中 的
归 并 顺 序 以 及
模 式 匹 配 。
LC_CTYPE 这 个 变 量 决
定 了 字 符 的 解
释 和 路 径 扩 展
以 及 模 式 匹 配
中 字 符 类 的 行
为 。
LC_MESSAGES 这 个 变 量 决
定 了 翻 译 以 $
前 导 的 双 引 号
字 符 串 时 的 语
言 环 境 。
LC_NUMERIC 这 个 变 量 决
定 了 格 式 化 数
字 时 的 语 言 环
境 分 类 。
|
LINES 内 建 命 令 |
|
select 用 它 来 判
断 输 出 选 择 列
表 时 的 列 宽 度
。 在 收 到 |
SIGWINCH 信 号
时 自 动 设 置 。
|
MAIL 如 果
这 个 参 数 设 置
为 一 个 文 件 名
, 并 且 没 有 设
置 环 境 变 量 |
|
MAILPATH
的
话 , bash
将 在 这 个 文 件
中 通 知 用 户 有
邮 件 到 达 。
MAILCHECK 指
定 bash 检 查 邮 件
的 频 率 是 多 少
, 以 秒 为 单 位
。 默 认 值 是 60 秒
。 需 要 检 查 邮
件 的 时 候 , shell 在
显 示 提 示 符 之
前 将 进 行 检 查
。 如 果 取 消 它
的 定 义 , 或 者
设 置 为 并 非 大
于 等 于 零 的 数
值 , shell 将 禁 止 邮
件 检 查 。
MAILPATH 一 个 冒 号 分
隔 的 文 件 名 列
表 , 从 中 检 查
邮 件 。 当 邮 件
到 达 某 个 特 殊
文 件 中 时 , 输
出 的 特 定 消 息
可 以 通 过 将 文
件 名 与 消 息 以
’?’ 分 隔 来 指 定
。 在 消 息 的 文
本 中 , $_ 扩 展
为 当 前 邮 件 文
件 的 文 件 名 。
例 如 :
MAILPATH=’/var/mail/bfox?"You
have mail":~/shell-mail?"$_ has mail!"’
Bash 为 这 个 变 量
提 供 默 认 值 ,
但 是 它 使 用 的
用 户 邮 件 文 件
的 位 置 是 系 统
相 关 的 (例 如 ,
/var/mail/$USER)。
|
OPTERR 如 果 设 置
为 |
|
1, bash 显 示 内
建 命 令 getopts 产 生
的 错 误 消 息 (参
见 下 |
面 的
shell 内 建 命 令 (SHELL
BUILTIN COMMANDS) 章 节 )。
每 次 shell 启 动 时 或
者 一 个 shell 脚 本 被
执 行 时 OPTERR
被 初 始 化 为 1。
|
PATH 搜 索
命 令 的 路 径 。
它 是 一 个 冒 号
分 割 的 目 录 列
表 , |
|
shell 从 中 搜
索 命 令 |
(参 见 下
面 的 命 令 执
行 (COMMAND EXECUTION) 段 落
)。 默 认 的 路 径
是 系 统 相 关 的
, 是 由 安 装 bash
的 系 统 管 理 员
设 置 的 。 通 常
它 的 值 是
’’/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.’’。
POSIXLY_CORRECT 如
果 bash 启 动 环 境
中 有 这 个 变 量
, 它 将 在 读 取
启 动 配 置 文 件
之 前 进 入 posix
mode, 就 好 像 提
供 了 --posix 启 动 参
数 一 样 。 如 果 shell
运 行 过 程 中 设
置 了 它 , bash 就
启 用 posix mode, 就
好 像 执 行 了 set -o
posix 命 令 一 样 。
PROMPT_COMMAND 如 果 有 定
义 , 它 的 值 将
作 为 一 个 命 令
, 每 次 显 示 主
提 示 符 之 前 都
会 执 行 。
|
PS1 这 个 参 数 的
值 被 扩 展 |
|
(参 见 下 面 的
PROMPTING 提 示 符
段 落 ), 用 作 主
提 |
示 符 字
符 串 。 默 认 值
是 ’’\s-\v\$
’’。
|
PS2 这 个
参 数 的 值 同 |
|
PS1 一 起
被 扩 展 , 用 作
次 提 示 符 字 符
串 。 默 认 值 是
’’> |
’’。
|
PS3 这 个
参 数 的 值 被 用
作 内 建 命 令 |
|
select 的 提
示 符 (参 见 上 面
的 SHELL |
GRAMMAR 语
法 章 节 )。
|
PS4 这 个
参 数 的 值 同 |
|
PS1 一 起
被 扩 展 , 在 执
行 跟 踪 中 在 bash
显 示 每 个 命 令 |
之 前 显
示 。 需 要 的 话
, PS4 的 第
一 个 字 符 会 被
复 制 多 次 , 来
指 示 indirection 的 层 数
。 默 认 值 是
’’+ ’’。
TIMEFORMAT 在
前 缀 time 保 留 字 的
管 道 中 , 这 个
参 数 的 值 用 作
格 式 字 符 串 ,
指 定 计 时 信 息
如 何 显 示 。 字
符 % 引 入 的 转
义 序 列 , 被 扩
展 为 时 间 值 或
其 他 信 息 。 转
义 序 列 和 它 们
的 含 义 如 下 所
示 ; 括 号 中 是
可 选 的 成 分 。
|
%% 一 个 字 面 上
的 |
%。 |
|
|
%[p][l]R 经 历 的
时 间 , 以 |
|
|
秒 计 算
。
|
|
|
|
|
|
%[p][l]U |
|
CPU 在 用 户 模 式
下 执 行 的 秒 数
。 |
|
|
%[p][l]S |
|
CPU 在 系 统 模 式
下 执 行 的 秒 数
。 |
|
|
%P |
|
CPU 使 用 率 , 算
法 是 (%U + %S) / %R。 |
|
可 选 的
p 是 指 定 精 度
(小 数 点 后 数 字
位 数 ) 的 数 值 。
如 果 是 0 就 不 输
出 小 数 点 或 小
数 值 。 最 多 指
定 到 小 数 点 后
三 位 ; 如 果 p
大 于 3 就 会 被 改
为 3。 如 果 没 有
指 定 p, 默 认
使 用 3。 可 选 的
l 指 定 了 长 格
式 , 包 含 分 钟
, 格 式 是
MMmSS.FFs。 p 的
值 决 定 了 是 不
是 包 含 小 数 位
。 如 果 没 有 设
置 这 个 值 , bash
假 定 它 的 值 是
$’\nreal\t%3lR\nuser\t%3lU\nsys%3lS’。
如 果 它 是 空 值
, 就 不 会 显 示
计 时 信 息 。 显
示 格 式 字 符 串
的 时 候 , 会 加
上 一 个 前 导 的
新 行 符 。
|
TMOUT 如 果
设 置 为 大 于 |
|
0 的 值 ,
TMOUT 被 当 作 内 建
命 令 read 的 默 认
超 时 等 待 |
时 间 。
如 果 等 待 终 端
输 入 时 , TMOUT 秒
之 后 仍 然 没 有
输 入 , select 命 令
将 终 止 。 在 交
互 的 shell 中 , 它 的
值 被 解 释 为 显
示 了 主 提 示 符
之 后 等 待 输 入
的 秒 数 。 如 果
经 过 这 个 秒 数
之 后 仍 然 没 有
输 入 , Bash 将 退
出 。
auto_resume 这
个 变 量 控 制 了 shell
如 何 与 用 户 和
作 业 控 制 交 互
。 如 果 设 置 了
这 个 变 量 , 一
个 不 包 含 重 定
向 的 单 个 词 的
简 单 命 令 , 将
作 为 恢 复 被 中
断 的 作 业 的 指
示 。 不 允 许 出
现 模 棱 两 可 的
情 况 ; 如 果 有
多 个 作 业 都 以
这 个 词 起 始 ,
将 恢 复 最 近 运
行 的 作 业 。 在
这 种 情 形 下 ,
被 中 断 的 作 业
的 name 是 用 于 启
动 它 的 命 令 行
。 如 果 值 设 置
为 exact, 给 出 的
字 符 串 必 须 精
确 匹 配 被 中 断
的 作 业 名 ; 如
果 设 置 为 substring,
给 出 的 字 符 串
需 要 匹 配 被 中
断 的 作 业 名 的
子 串 。 值 substring
的 功 能 与 作 业
标 识 符 %? 功 能
类 似 (参 见 下 面
的 JOB CONTROL 作 业 控
制 章 节 )。 如
果 设 置 为 任 何
其 他 值 , 给 出
的 字 符 串 必 须
是 被 中 断 的 作
业 的 前 缀 ; 这
样 做 与 作 业 标
识 符 % 功 能 类
似 。
histchars 两 到 三 个 字
符 , 控 制 着 历
史 扩 展 和 分 段
(tokenization, 参 见 下 面
的 HISTORY EXPANSION 历 史
扩 展 章 节 )。
第 一 个 字 符 是
history expansion(历 史 扩 展
) 字 符 , 这 个 字
符 表 明 了 历 史
扩 展 的 开 始 ,
通 常 是 ’!’。
第 二 个 字 符 是
quick substitution(快 速 替
换 ) 字 符 , 它 是
重 新 运 行 上 次
输 入 的 命 令 ,
但 将 命 令 中 的
字 符 串 替 换 为
另 一 个 的 简 写
, 默 认 是
’^’。 可 选 的
第 三 个 字 符 是
指 示 如 果 作 为
一 个 词 的 开 始
, 那 么 一 行 中
剩 余 字 符 是 注
释 。 通 常 这 个
字 符 是 ’#’。
历 史 注 释 字 符
使 得 对 一 行 中
剩 余 字 符 在 历
史 替 换 中 被 跳
过 。 它 不 一 定
使 shell 解 释 器 将 这
一 行 的 剩 余 部
分 当 作 注 释 。
Arrays
Bash 提 供 了 一 维
数 组 变 量 。 任
何 变 量 都 可 以
作 为 一 个 数 组
; 内 建 命 令 declare
可 以 显 式 地 定
义 数 组 。 数 组
的 大 小 没 有 上
限 , 也 没 有 限
制 在 连 续 对 成
员 引 用 和 赋 值
时 有 什 么 要 求
。 数 组 以 整 数
为 下 标 , 从 0 开
始 。 如 果 变 量
赋 值 时 使 用 语
法 name[subscript]=value,
那 么 就 会 自 动
创 建 数 组 。
subscript 被 当 作 一
个 算 术 表 达 式
, 结 果 必 须 是
大 于 等 于 0 的 值
。 要 显 式 地 定
义 一 个 数 组 ,
使 用 declare -a name (参
见 下 面 的 shell 内
建 命 令 (SHELL BUILTIN
COMMANDS) 章 节 )。 也
可 以 用 declare -a
name[subscript] 这
时 subscript 被 忽 略
。 数 组 变 量 的
属 性 可 以 用 内
建 命 令 declare 和
readonly 来 指 定 。 每
个 属 性 对 于 所
有 数 组 元 素 都
有 效 。 数 组 赋
值 可 以 使 用 复
合 赋 值 的 方 式
, 形 式 是
name=(value1 ...
valuen), 这 里 每
个 value 的 形 式 都
是 [subscript]=string。
string 必 须 出 现 。
如 果 出 现 了 可
选 的 括 号 和 下
标 , 将 为 这 个
下 标 赋 值 , 否
则 被 赋 值 的 元
素 的 下 标 是 语
句 中 上 一 次 赋
值 的 下 标 加 一
。 下 标 从 0 开 始
。 这 个 语 法 也
被 内 建 命 令 declare
所 接 受 。 单 独
的 数 组 元 素 可
以 用 上 面 介 绍
的 语 法
name[subscript]=value 来 赋
值 。 数 组 的 任
何 元 素 都 可 以
用 ${name[subscript]} 来 引
用 。 花 括 号 是
必 须 的 , 以 避
免 和 路 径 扩 展
冲 突 。 如 果
subscript 是 @ 或 是
*, 它 扩 展 为
name 的 所 有 成 员
。 这 两 种 下 标
只 有 在 双 引 号
中 才 不 同 。 在
双 引 号 中 ,
${name[*]} 扩 展 为 一
个 词 , 由 所 有
数 组 成 员 的 值
组 成 , 用 特 殊
变 量 IFS 的
第 一 个 字 符 分
隔 ; ${name[@]} 将 name
的 每 个 成 员 扩
展 为 一 个 词 。
如 果 数 组 没 有
成 员 , ${name[@]} 扩
展 为 空 串 。 这
种 不 同 类 似 于
特 殊 参 数 * 和
@ 的 扩 展 (参 见
上 面 的 Special Parameters
段 落 )。
${#name[subscript]} 扩 展 为
${name[subscript]} 的 长 度
。 如 果 subscript 是
* 或 者 是 @,
扩 展 结 果 是 数
组 中 元 素 的 个
数 。 引 用 没 有
下 标 数 组 变 量
等 价 于 引 用 元
素 0。 内 建 命 令
unset 用 于 销 毁 数
组 。 unset name[subscript]
将 销 毁 下 标 是
subscript 的 元 素 。
unset name, 这 里 name
是 一 个 数 组 ,
或 者 unset
name[subscript], 这 里
subscript 是 * 或 者
是 @, 将 销 毁
整 个 数 组 。 内
建 命 令 declare, local,
和 readonly 都 能 接 受
-a 选 项 , 从 而
指 定 一 个 数 组
。 内 建 命 令 read
可 以 接 受 -a 选
项 , 从 标 准 输
入 读 入 一 列 词
来 为 数 组 赋 值
。 内 建 命 令 set
和 declare 使 用 一 种
可 以 重 用 为 输
入 的 格 式 来 显
示 数 组 元 素 。
命 令 行
的 扩 展 是 在 拆
分 成 词 之 后 进
行 的 。 有 七 种
类 型 的 扩 展 :
brace expansion(花 括 号 扩
展 ), tilde expansion(波 浪
线 扩 展 ), parameter and variable
expansion(参 数 和 变 量
扩 展 ), command substitution(命
令 替 换 ), arithmetic
expansion(算 术 扩 展 ), word
splitting(词 的 拆 分 ),
和 pathname expansion(路 径
扩 展 ). 扩 展 的 顺
序 是 : brace expansion, tilde expansion,
parameter, variable 和 arithmetic expansion 还
有 command substitution (按 照 从
左 到 右 的 顺 序 ),
word splitting, 最 后 是 pathname
expansion. 还 有 一 种 附
加 的 扩 展 : process
subtitution (进 程 替 换 )
只 有 在 支 持 它
的 系 统 中 有 效
。 只 有 brace expansion, word splitting,
和 pathname expansion 在 扩 展
前 后 的 词 数 会
发 生 改 变 ; 其
他 扩 展 总 是 将
一 个 词 扩 展 为
一 个 词 。 唯 一
的 例 外 是 上 面
提 到 的 "$@" 和
"${name[@]}" (参
见 PARAMETERS参
数 )。
Brace
Expansion
Brace expansion 是 一 种 可
能 产 生 任 意 字
符 串 的 机 制 。
这 种 机 制 类 似
于 pathname expansion, 但 是
并 不 需 要 存 在
相 应 的 文 件 。
花 括 号 扩 展 的
模 式 是 一 个 可
选 的 preamble(前 导 字
符 ), 后 面 跟 着 一
系 列 逗 号 分 隔
的 字 符 串 , 包
含 在 一 对 花 括
号 中 , 再 后 面
是 一 个 可 选 的
postscript(附 言 )。 前
导 被 添 加 到 花
括 号 中 的 每 个
字 符 串 前 面 ,
附 言 被 附 加 到
每 个 结 果 字 符
串 之 后 , 从 左
到 右 进 行 扩 展
。 花 括 号 扩 展
可 以 嵌 套 。 扩
展 字 符 串 的 结
果 没 有 排 序 ;
而 是 保 留 了 从
左 到 右 的 顺 序
。 例 如 , a{d,c,b}e
扩 展 为 ’ade ace abe’。
花 括 号 扩 展 是
在 任 何 其 他 扩
展 之 前 进 行 的
, 任 何 对 其 他
扩 展 有 特 殊 意
义 的 字 符 都 保
留 在 结 果 中 。
它 是 严 格 字 面
上 的 。 Bash 不 会
对 扩 展 的 上 下
文 或 花 括 号 中
的 文 本 做 任 何
语 义 上 的 解 释
。 正 确 的 花 括
号 扩 展 必 须 包
含 没 有 引 用 的
左 括 号 和 右 括
号 , 以 及 至 少
一 个 没 有 引 用
的 逗 号 。 任 何
不 正 确 的 表 达
式 都 不 会 被 改
变 。 可 以 用 反
斜 杠 来 引 用 {
或 , 来 阻 止 将
它 们 识 别 为 花
括 号 表 达 式 的
一 部 分 。 为 了
避 免 与 参 数 扩
展 冲 突 , 字 符
串 ${ 不 被 认 为
有 效 的 组 合 。
这 种 结 构 通 常
用 来 简 写 字 符
串 的 公 共 前 缀
远 比 上 例 中 为
长 的 情 况 , 例
如 :
mkdir
/usr/local/src/bash/{old,new,dist,bugs} 或 者
:
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} 花
括 号 扩 展 导 致
了 与 历 史 版 本
的 sh 的 一 点 不
兼 容 。 在 左 括
号 或 右 括 号 作
为 词 的 一 部 分
出 现 时 , sh 不
会 对 它 们 进 行
特 殊 处 理 , 会
在 输 出 中 保 留
它 们 。 Bash 将 括
号 从 花 括 号 扩
展 结 果 的 词 中
删 除 。 例 如 ,
向 sh 输 入 file{1,2}
会 导 致 不 变 的
输 出 。 同 样 的
输 入 在 bash 进 行
扩 展 之 后 , 会
输 出 file1 file2 . 如 果
需 要 同 sh 严 格
地 保 持 兼 容 ,
需 要 在 启 动 bash
的 时 候 使 用 +B
选 项 , 或 者 使
用 set 命 令 加 上
+B 选 项 来 禁 用
花 括 号 扩 展 (参
见 下 面 的 shell 内
建 命 令 (SHELL BUILTIN
COMMANDS) 章 节 )。
Tilde
Expansion 如 果 一 个 词
以 没 有 引 用 的
波 浪 线 字 符
(’~’) 开 始 , 所
有 在 第 一 个 没
有 引 用 的 斜 线
(’/’) 之 前 的 字
符 (或 者 是 这 个
词 的 所 有 字 符
, 如 果 没 有 没
引 用 的 斜 线 的
话 ) 都 被 认 为 是
tilde-prefix(波 浪 线 前
缀 )。 如 果 tilde-prefix 中
没 有 被 引 用 的
字 符 , 那 么 波
浪 线 之 后 的 字
符 串 被 认 为 是
login name(登 录 名 )。
如 果 登 录 名 是
空 字 符 串 , 波
浪 线 将 被 替 换
为 shell 参 数 HOME
的 值 。 如 果 没
有 定 义
HOME, 将 替
换 为 执 行 此 shell 的
用 户 的 个 人 目
录 。 否 则 , tilde-prefix
被 替 换 为 与 指
定 登 录 名 相 联
系 的 个 人 目 录
。 如 果 tilde-prefix 是
’~+’, 将 使 用 shell
变 量 PWD 的
值 来 替 换 。 如
果 tilde-prefix 是 ’~-’,
并 且 设 置 了 shell 变
量 OLDPWD,
将 使 用 这 个 变
量 值 来 替 换 。
如 果 在 tilde-prefix 中 ,
波 浪 线 之 后 的
字 符 串 由 一 个
数 字 N 组 成 ,
前 缀 可 选 的 ’+’
或 者 ’-’, 那 么
tilde-prefix 将 被 替 换 为
目 录 栈 中 相 应
的 元 素 , 就 是
将 tilde-prefix 作 为 参 数
执 行 内 建 命 令
dirs 显 示 的 结 果
。 如 果 tilde-prefix 中 波
浪 线 之 后 的 字
符 是 一 个 数 字
, 没 有 前 缀 ,
那 么 就 假 定 有
一 个 ’+’。 如 果
登 录 名 不 合 法
, 或 者 波 浪 线
扩 展 失 败 , 这
个 词 将 不 会 变
化 。 在 变 量 赋
值 中 , 对 于 :
或 = 之 后 的 字
符 串 会 立 即 检
查 未 引 用 的
tilde-prefix。 这 种 情 况
下 , 仍 然 会 进
行 波 浪 线 扩 展
。 因 此 , 可 以
使 用 带 波 浪 线
的 文 件 名 来 为
PATH, MAILPATH,
和 CDPATH 赋 值
, shell 将 赋 予 扩 展
之 后 的 值 。
Parameter
Expansion 字 符 ’$’
引 入 了 参 数 扩
展 , 命 令 替 换
和 算 术 扩 展 。
要 扩 展 的 参 数
名 或 符 号 可 能
包 含 在 花 括 号
中 , 花 括 号 可
选 的 , 但 是 可
以 使 得 要 扩 展
的 变 量 不 会 与
紧 随 其 后 的 字
符 合 并 , 成 为
新 的 名 称 。 使
用 花 括 号 的 时
候 , 匹 配 的 右
括 号 是 第 一 个
’}’, 并 且 它
没 有 被 反 斜 杠
引 用 或 包 含 在
一 个 引 用 的 字
符 串 中 , 也 没
有 包 含 在 一 个
嵌 入 的 算 术 扩
展 , 命 令 替 换
或 是 参 数 扩 展
中 。
${parameter} 被 替 换 为
parameter 的 值 。 如
果 parameter 是 一 个
位 置 参 数 , 并
且 数 字 多 于 一
位 时 ; 或 者 当
紧 随 parameter 之 后
有 不 属 于 名 称
一 部 分 的 字 符
时 , 都 必 须 加
上 花 括 号 。 如
果 parameter 的 第 一
个 字 符 是 一 个
感 叹 号 , 将 引
进 一 层 间 接 变
量 。 bash 使 用 以
parameter 的 其 余 部
分 为 名 的 变 量
的 值 作 为 变 量
的 名 称 ; 接 下
来 新 的 变 量 被
扩 展 , 它 的 值
用 在 随 后 的 替
换 当 中 , 而 不
是 使 用 parameter 自
身 的 值 。 这 也
称 为 indirect expansion(间
接 扩 展 ). 例 外 情
况 是 下 面 讲 到
的 ${!prefix*}。 下 面
的 每 种 情 况 中
, word 都 要 经 过
波 浪 线 扩 展 ,
参 数 扩 展 , 命
令 替 换 和 算 术
扩 展 。 如 果 不
进 行 子 字 符 串
扩 展 , bash 测 试
一 个 没 有 定 义
或 值 为 空 的 参
数 ; 忽 略 冒 号
的 结 果 是 只 测
试 未 定 义 的 参
数 。
${parameter:-word}
Use Default
Values(使 用 默 认 值
)。 如 果 parameter 未
定 义 或 值 为 空
, 将 替 换 为 word
的 扩 展 。 否 则
, 将 替 换 为
parameter 的 值 。
${parameter:=word}
Assign Default
Values(赋 默 认 值 )。
如 果 parameter 未 定
义 或 值 为 空 ,
word 的 扩 展 将 赋
予 parameter. parameter 的
值 将 被 替 换 。
位 置 参 数 和 特
殊 参 数 不 能 用
这 种 方 式 赋 值
。
${parameter:?word}
Display Error if Null or
Unset(显 示 错 误 ,
如 果 未 定 义 或
值 为 空 )。 如 果
parameter 未 定 义 或
值 为 空 , word (或
一 条 信 息 , 如
果 word 不 存 在 ) 的
扩 展 将 写 入 到
标 准 错 误 ; shell 如
果 不 是 交 互 的
, 则 将 退 出 。
否 则 , parameter 的
值 将 被 替 换 。
${parameter:+word}
Use Alternate
Value(使 用 可 选 值
)。 如 果 parameter 未
定 义 或 值 为 空
, 不 会 进 行 替
换 ; 否 则 将 替
换 为 word 扩 展 后
的 值 。
${parameter:offset}
${parameter:offset:length}
Substring
Expansion(子 字 符 串 扩
展 )。 扩 展 为
parameter 的 最 多 length
个 字 符 , 从 offset
指 定 的 字 符 开
始 。 如 果 忽 略
了 length, 扩 展 为
parameter 的 子 字 符
串 , 从 offset 指 定
的 字 符 串 开 始
。 length 和 offset 是
算 术 表 达 式 (参
见 下 面 的 ARITHMETIC
EVALUATION 算 术 求 值
段 落 )。 length 必 须
是 一 个 大 于 等
于 0 的 数 值 。 如
果 offset 求 值 结 果
小 于 0, 值 将 当
作 从 parameter 的 值
的 末 尾 算 起 的
偏 移 量 。 如 果
parameter 是 @, 结 果
是 length 个 位 置 参
数 , 从 offset 开 始
。 如 果 parameter 是
一 个 数 组 名 ,
以 @ 或 * 索 引 , 结
果 是 数 组 的 length
个 成 员 , 从
${parameter[offset]} 开 始
。 子 字 符 串 的
下 标 是 从 0 开 始
的 , 除 非 使 用
位 置 参 数 时 ,
下 标 从 1 开 始 。
${!prefix*}
扩 展 为 名 称 以
prefix 开 始 的 变 量
名 , 以 特 殊 变
量 IFS 的 第
一 个 字 符 分 隔
。
${#parameter} 替 换 为
parameter 的 值 的 长
度 (字 符 数 目 )。
如 果 parameter 是 *
或 者 是 @, 替 换
的 值 是 位 置 参
数 的 个 数 。 如
果 parameter 是 一 个
数 组 名 , 下 标
是 * 或 者 是 @,
替 换 的 值 是 数
组 中 元 素 的 个
数 。
${parameter#word}
${parameter##word}
word 被 扩
展 为 一 个 模 式
, 就 像 路 径 扩
展 中 一 样 。 如
果 这 个 模 式 匹
配 parameter 的 值 的
起 始 , 那 么 扩
展 的 结 果 是 将
parameter 扩 展 后 的
值 中 , 最 短 的
匹 配 (’’#’’
的 情 况 ) 或 者 最
长 的 匹 配
(’’##’’的 情
况 ) 删 除 的 结 果
。 如 果 parameter 是
@ 或 者 是 *, 则
模 式 删 除 操 作
将 依 次 施 用 于
每 个 位 置 参 数
, 最 后 扩 展 为
结 果 的 列 表 。
如 果 parameter 是 一
个 数 组 变 量 ,
下 标 是 @ 或 者
是 *, 模 式 删 除
将 依 次 施 用 于
数 组 中 的 每 个
成 员 , 最 后 扩
展 为 结 果 的 列
表 。
${parameter%word}
${parameter%%word}
word 被 扩
展 为 一 个 模 式
, 就 像 路 径 扩
展 中 一 样 。 如
果 这 个 模 式 匹
配 parameter 扩 展 后
的 值 的 尾 部 ,
那 么 扩 展 的 结
果 是 将 parameter 扩
展 后 的 值 中 ,
最 短 的 匹 配
(’’%’’ 的 情
况 ) 或 者 最 长 的
匹 配
(’’%%’’的 情
况 ) 删 除 的 结 果
。 如 果 parameter 是
@ 或 者 是 *, 则
模 式 删 除 操 作
将 依 次 施 用 于
每 个 位 置 参 数
, 最 后 扩 展 为
结 果 的 列 表 。
如 果 parameter 是 一
个 数 组 变 量 ,
下 标 是 @ 或 者
是 *, 模 式 删 除
将 依 次 施 用 于
数 组 中 的 每 个
成 员 , 最 后 扩
展 为 结 果 的 列
表 。
${parameter/pattern/string}
${parameter//pattern/string}
patterm 被
扩 展 为 一 个 模
式 , 就 像 路 径
扩 展 中 一 样 。
parameter 被 扩 展 ,
其 值 中 最 长 的
匹 配 pattern 的 内 容
被 替 换 为 string。
在 第 一 种 形 式
中 , 只 有 第 一
个 匹 配 被 替 换
。 第 二 种 形 式
使 得 pattern 中 所 有
匹 配 都 被 替 换
为 string。 如 果
pattern 以 # 开 始 ,
它 必 须 匹 配
parameter 扩 展 后 值
的 首 部 。 如 果
pattern 以 % 开 始 ,
它 必 须 匹 配
parameter 扩 展 后 值
的 尾 部 。 如 果
string 是 空 值 ,
pattern 的 匹 配 都 将
被 删 除 , pattern 之
后 的 / 将 被 忽
略 。 如 果 parameter
是 @ 或 者 是 *,
则 替 换 操 作 将
依 次 施 用 于 每
个 位 置 参 数 ,
最 后 扩 展 为 结
果 的 列 表 。 如
果 parameter 是 一 个
数 组 变 量 , 下
标 是 @ 或 者 是
*, 模 式 删 除 将
依 次 施 用 于 数
组 中 的 每 个 成
员 , 最 后 扩 展
为 结 果 的 列 表
。
Command
Substitution 命 令 替 换
(Command substitution) 允 许 以
命 令 的 输 出 替
换 命 令 名 。 有
两 种 形 式 :
$(command)
还 有
’command’
Bash
进 行 扩 展 的 步
骤 是 执 行 command,
以 它 的 标 准 输
出 替 换 它 , 并
且 将 所 有 后 续
的 新 行 符 删 除
。 内 嵌 的 新 行
符 不 会 删 除 ,
但 是 它 们 可 能
会 在 词 的 拆 分
中 被 删 除 。 命
令 替 换 $(cat file)
可 以 用 等 价 但
是 更 快 的 方 法
$(< file) 代 替 。
当 使 用 旧 式 的
反 引 号 ("’’")
替 换 形 式 时 ,
反 斜 杠 只 有 其
字 面 意 义 , 除
非 后 面 是 $,
’, 或 者 是 \.
第 一 个 前 面 没
有 反 斜 杠 的 反
引 号 将 结 束 命
令 替 换 。 当 使
用 $(command) 形 式 时
, 括 号 中 所 有
字 符 组 成 了 整
个 命 令 ; 没 有
被 特 殊 处 理 的
字 符 。 命 令 替
换 可 以 嵌 套 。
要 在 使 用 反 引
号 形 式 时 嵌 套
, 可 以 用 反 斜
杠 来 转 义 内 层
的 反 引 号 。 如
果 替 换 发 生 在
双 引 号 之 中 ,
结 果 将 不 进 行
词 的 拆 分 和 路
径 扩 展 。
Arithmetic
Expansion 算 术 扩 展 允
许 算 术 表 达 式
的 求 值 和 结 果
的 替 换 。 算 术
扩 展 的 格 式 是
:
$((expression))
表 达 式 expression 被
视 为 如 同 在 双
引 号 之 中 一 样
, 但 是 括 号 中
的 双 引 号 不 会
被 特 殊 处 理 。
表 达 式 中 所 有
词 都 经 过 了 参
数 扩 展 , 字 符
串 扩 展 , 命 令
替 换 和 引 用 的
删 除 。 算 术 替
换 可 以 嵌 套 。
求 值 根 据 下 面
算 术 求 值 (ARITHMETIC
EVALUATION) 章 节 中 列
出 的 规 则 进 行
。 如 果 表 达 式
expression 非 法 , bash
输 出 错 误 提 示
消 息 , 不 会 进
行 替 换 。
Process
Substitution
Process substitution (进 程 替
换 ) 只 有 在 支 持
命 名 管 道 (FIFOs),
或 者 支 持 使 用
/dev/fd 方 式 为 打 开
的 文 件 命 名 的
系 统 中 才 可 用
。 它 的 形 式 是
<(list) 或 者 是
>(list)。 进 程
list 运 行 时 的 输
入 或 输 出 被 连
接 到 一 个 FIFO 或
者 /dev/fd 中 的 文 件
。 文 件 的 名 称
作 为 一 个 参 数
被 传 递 到 当 前
命 令 , 作 为 扩
展 的 结 果 。 如
果 使 用 >(list)
形 式 , 向 文 件
写 入 相 当 于 为
list 提 供 输 入 。
如 果 使 用
<(list) 形 式 ,
可 以 读 作 为 参
数 传 递 的 文 件
来 获 得 list 的 输
出 。 如 果 可 能
的 话 , 进 程 替
换 是 与 参 数 和
变 量 扩 展 , 命
令 替 换 和 算 术
扩 展 同 时 发 生
的 。
Word
Splitting
shell 检 测 不 在 双 引
号 引 用 中 发 生
的 参 数 扩 展 ,
命 令 替 换 和 算
术 扩 展 的 结 果
, 进 行 word splitting(词
的 拆 分 )。
shell 将
IFS 的 每 个
字 符 都 作 为 定
界 符 , 根 据 这
些 字 符 来 将 其
他 扩 展 的 结 果
分 成 词 。 如 果
IFS 没 有 定
义 , 或 者 它 的
值 是 默 认 的
<space><tab><newline>, 那
么 IFS 字 符
的 任 何 序 列 都
将 作 为 分 界 之
用 。 如 果
IFS 的 值 是
默 认 之 外 的 值
, 那 么 词 开 头
和 结 尾 的 空 白
字 符 space 和 tab 都
将 被 忽 略 , 只
要 空 白 字 符 在
IFS 的 值 之
内 (即 , IFS
包 含 空 白 字 符
)。 任 何 在
IFS 之 中 但
是 不 是 IFS
空 白 的 字 符 ,
以 及 任 何 相 邻
的 IFS 空 白
字 符 , 将 字 段
分 隔 开 来 。
IFS 空 白 字
符 的 序 列 也 被
作 为 分 界 符 。
如 果 IFS 的
值 是 空 , 不 会
发 生 词 的 拆 分
。 显 式 给 出 的
空 值 参 数 (""
或 ’’) 将 被 保
留 。 隐 含 的 空
值 参 数 , 来 自
于 空 值 的 参 数
扩 展 , 如 果 没
有 引 用 则 将 被
删 除 。 如 果 空
值 的 参 数 在 双
引 号 引 用 中 扩
展 , 结 果 是 空
值 的 参 数 , 将
被 保 留 。 注 意
如 果 没 有 发 生
扩 展 , 不 会 进
行 词 的 拆 分 。
Pathname
Expansion 词 的 拆 分 之
后 , 除 非 设 置
过 -f 选 项 , bash
搜 索 每 个 词 ,
寻 找 字 符 *, ?,
和 [. 如 果 找 到
了 其 中 之 一 ,
那 么 这 个 词 被
当 作 一 个 pattern(模
式 ), 被 替 换 为
匹 配 这 个 模 式
的 文 件 名 以 字
母 顺 序 排 列 的
列 表 。 如 果 没
有 找 到 匹 配 的
文 件 名 , 并 且 shell
禁 用 了 nullglob 选 项
, 这 个 词 将 不
发 生 变 化 。 如
果 设 置 了 nullglob 选
项 并 且 没 有 找
到 匹 配 , 这 个
词 将 被 删 除 。
如 果 启 用 了
nocaseglob 选 项 , 匹
配 时 将 不 考 虑
字 母 的 大 小 写
。 当 模 式 用 作
路 径 名 扩 展 时
, 字 符
’’.’’ 如 果
在 一 个 名 称 的
开 始 或 者 紧 随
一 个 斜 杠 之 后
, 那 么 它 必 须
被 显 式 地 匹 配
, 除 非 设 置 了
dotglob shell 选 项 。 当
匹 配 一 个 路 径
名 时 , 斜 杠 符
必 须 被 显 式 地
匹 配 。 其 他 情
况 下 , 字 符
’’.’’ 不 会
被 特 殊 对 待 。
参 见 下 面 的 shell
内 建 命 令 (SHELL BUILTIN
COMMANDS) 中 对 shopt
的 介 绍 , 其 中
有 shell 选 项 nocaseglob,
nullglob, 和 dotglob 的 描
述 。 环 境 变 量
GLOBIGNORE 可 以 用
来 限 制 匹 配 pattern
的 文 件 名 集 合
。 如 果 设 置 了
GLOBIGNORE, 每 个
匹 配 的 文 件 名
如 果 匹 配
GLOBIGNORE 中 任 何
一 个 模 式 的 话
将 从 匹 配 的 列
表 中 删 除 。 文
件 名 ’’.’’
和 ’’..’’ 总
是 被 忽 略 , 即
使 设 置 了
GLOBIGNORE。 但 是
, 设 置 GLOBIGNORE
和 启 用 shell 选 项
dotglob 效 果 是 相 同
的 , 因 此 所 有
其 他 以
’’.’’ 开 头
的 文 件 名 将 被
匹 配 。 要 得 到
原 来 的 行 为 (忽
略 所 有 以
’’.’’ 开 头
的 文 件 名 ), 可
以 将 ’’.*’’
添 加 为 GLOBIGNORE
的 模 式 之 一 。
选 项 dotglob 被 禁 用
, 如 果 GLOBIGNORE
没 有 定 义 时 。
Pattern
Matching 任 何 模 式 中
出 现 的 字 符 ,
除 了 下 面 描 述
的 特 殊 模 式 字
符 外 , 都 匹 配
它 本 身 。 模 式
中 不 能 出 现 NUL 字
符 。 如 果 要 匹
配 字 面 上 的 特
殊 模 式 字 符 ,
它 必 须 被 引 用
。 特 殊 模 式 字
符 有 下 述 意 义
:
|
* 匹 配 任 何 字
符 串 包 含 空 串
。 |
|
|
|
? 匹 配 任 何 单
个 字 符 。 |
|
|
|
[...] 匹 配 所 包
含 的 任 何 字 符
之 一 。 用 一 个
连 字 符 |
|
(’-’) 分 隔 的 一
对 字 符 意 思 |
是 一 个
range expression (范 围 表 达
式 ); 任 何 排 在
它 们 之 间 的 字
符 , 包 含 它 们
, 都 被 匹 配 。
排 序 使 用 当 前
语 言 环 境 的 字
符 顺 序 和 字 符
集 。 如 果 [ 之
后 的 第 一 个 字
符 是 一 个 ! 或
是 一 个 ^ 那 么
任 何 不 包 含 在
内 的 字 符 将 被
匹 配 。 范 围 表
达 式 中 字 符 的
顺 序 是 由 当 前
语 言 环 境 和 环
境 变 量 LC_COLLATE 的
值 (如 果 设 置 了
的 话 ) 决 定 的 。
一 个 - 只 有 作
为 集 合 中 第 一
个 或 最 后 一 个
字 符 时 才 能 被
匹 配 。 一 个 ]
只 有 是 集 合 中
第 一 个 字 符 时
才 能 被 匹 配 。
在 [ 和 ] 中 ,
character classes (字 符 类 )
可 以 用 [:class:]
这 样 的 语 法 来
指 定 , 这 里 class
是 在 POSIX.2 标 准 中
定 义 的 下 列 类
名 之 一 :
alnum alpha ascii blank cntrl digit graph lower print punct
space upper word xdigit 一 个 字
符 类 匹 配 任 何
属 于 这 一 类 的
字 符 。 word 字 符
类 匹 配 字 母 ,
数 字 和 字 符 _。
在 [ 和 ] 中 ,
可 以 用 [=c=]
这 样 的 语 法 来
指 定 equivalence class (等
价 类 )。 它 匹 配
与 字 符 c 有 相
同 归 并 权 值 (collation
weight, 由 当 前 语 言
环 境 定 义 ) 的 字
符 。 在 [ 和 ]
中 , 语 法
[.symbol.] 匹 配 归
并 符 号 (collating symbol)
symbol。 如 果 使 用
内 建 命 令 shopt 启
用 了 shell 选 项
extglob, 将 识 别 另
外 几 种 模 式 匹
配 操 作 符 。 下
面 的 描 述 中 ,
pattern-list 是 一 个 或
多 个 模 式 以 |
分 隔 的 列 表 。
复 合 的 模 式 可
以 使 用 一 个 或
多 个 下 列 的 子
模 式 构 造 出 来
:
?(pattern-list) 匹 配 所
给 模 式 零 次 或
一 次 出 现
*(pattern-list) 匹 配 所
给 模 式 零 次 或
多 次 出 现
+(pattern-list) 匹 配 所
给 模 式 一 次 或
多 次 出 现
@(pattern-list) 准 确 匹
配 所 给 模 式 之
一
!(pattern-list) 任 何 除
了 匹 配 所 给 模
式 之 一 的 字 串
Quote
Removal 经 过 前 面 的
扩 展 之 后 , 所
有 未 引 用 的 字
符 \, ’, 以 及
并 非 上 述 扩 展
结 果 的 字 符 "
都 被 删 除 。
在 命 令
执 行 前 , 它 的
输 入 和 输 出 可
能 被 redirected (重 定 向
), 使 用 一 种 shell
可 以 解 释 的 特
殊 记 法 。 重 定
向 也 可 以 用 于
为 当 前 shell 执 行 环
境 打 开 和 关 闭
文 件 。 下 列 重
定 向 操 作 符 可
以 前 置 或 者 放
在 simple command (简 单 命
令 ) 之 中 的 任 何
位 置 , 或 者 放
在 command 之 后 。 重
定 向 是 以 出 现
的 顺 序 进 行 处
理 的 , 从 左 到
右 。 下 列 描 述
中 , 如 果 文 件
描 述 符 被 忽 略
, 并 且 第 一 个
重 定 向 操 作 符
是 <, 那 么 重 定
向 指 的 是 标 准
输 入 (文 件 描 述
符 是 0)。 如 果 重
定 向 操 作 符 的
第 一 个 字 符 是
>, 那 么 重 定 向
指 的 是 标 准 输
出 (文 件 描 述 符
是 1)。 下 列 描 述
中 , 重 定 向 操
作 符 之 后 的 词
如 果 没 有 特 殊
说 明 , 都 要 经
过 brace expansion, tilde expansion, parameter
expansion, command substitution, arithmetic expansion, quote
removal, pathname expansion, 还 有 word
splitting。 如 果 扩 展
为 多 于 一 个 词
, bash 将 报 错 。
注 意 重 定 向 的
顺 序 非 常 重 要
。 例 如 , 命 令
ls >
dirlist 2>&1 将 标 准
输 出 和 标 准 错
误 重 定 向 到 文
件 dirlist, 而 命 令
ls
2>&1 > dirlist 只 会
将 标 准 输 出 重
定 向 到 文 件 dirlist,
因 为 在 标 准 输
出 被 重 定 向 到
文 件 dirlist 中 之 前
, 标 准 错 误 被
复 制 为 标 准 输
出 。 一 些 文 件
名 在 重 定 向 中
被 bash 特 殊 处 理
, 如 下 表 所 示
:
/dev/fd/fd 如 果 fd 是
一 个 合 法 的 整
数 , 文 件 描 述
符 fd 将 被 复 制
。
/dev/stdin 文 件 描 述 符
0 被 复 制 。
/dev/stdout 文 件 描 述 符
1 被 复 制 。
/dev/stderr 文 件 描 述 符
2 被 复 制 。
/dev/tcp/host/port 如
果 host 是 一 个 合
法 的 主 机 名 或
Internet 地 址 , 并 且
port 是 一 个 整 数
端 口 号 或 服 务
名 , bash 试 图 建
立 与 相 应 的 socket
(套 接 字 ) 的 TCP 连 接
。
/dev/udp/host/port 如
果 host 是 一 个 合
法 的 主 机 名 或
Internet 地 址 , 并 且
port 是 一 个 整 数
端 口 号 或 服 务
名 , bash 试 图 建
立 与 相 应 的 socket
(套 接 字 ) 的 UDP 连 接
。 打 开 或 创 建
文 件 错 误 将 导
致 重 定 向 出 错
。
Redirecting
Input 重 定 向 输 入
使 得 以 word 扩 展
结 果 为 名 的 文
件 被 打 开 并 通
过 文 件 描 述 符
n 读 取 , 如 果
没 有 指 定 n 那
么 就 作 为 标 准
输 入 (文 件 描 述
符 为 0) 读 取 。 重
定 向 输 入 的 一
般 形 式 是 :
[n]<word
Redirecting
Output 重 定 向 输 出
使 得 以 word 扩 展
结 果 为 名 的 文
件 被 打 开 并 通
过 文 件 描 述 符
n 写 入 , 如 果
没 有 指 定 n 那
么 就 作 为 标 准
输 出 (文 件 描 述
符 为 1) 写 入 。 重
定 向 的 一 般 形
式 是 :
[n]>word
如 果 重 定 向 操
作 符 是 >, 并
且 启 用 了 内 建
命 令 set 的 noclobber
选 项 , 那 么 如
果 word 扩 展 后 得
到 的 文 件 名 存
在 并 且 是 一 个
普 通 的 文 件 ,
重 定 向 将 失 败
。 如 果 重 定 向
操 作 符 是 >|, 或
者 重 定 向 操 作
符 是 > 并 且 没
有 启 用 内 建 命
令 set 的 noclobber 选
项 , 那 么 即 使
word 得 出 的 文 件
名 存 在 , 也 会
尝 试 进 行 重 定
向 。
Appending
Redirected Output (添 加 到 重
定 向 后 的 输 出
尾 部 ) 这 种 方 式
的 输 出 重 定 向
使 得 以 word 扩 展
结 果 为 名 的 文
件 被 打 开 并 通
过 文 件 描 述 符
n 从 尾 部 添 加
。 如 果 没 有 指
定 n 就 使 用 标
准 输 出 (文 件 描
述 符 1)。 如 果 文
件 不 存 在 , 它
将 被 创 建 。 重
定 向 的 一 般 形
式 是 :
[n]>>word
Redirecting
Standard Output and Standard Error
Bash 允 许 使 用 这
种 结 构 将 标 准
输 出 和 标 准 错
误 (文 件 描 述 符 1
和 2) 重 定 向 到 以
word 扩 展 结 果 为
名 的 文 件 中 。
有 两 种 重 定 向
标 准 输 出 /标 准
错 误 的 形 式 :
&>word
还 有 >&word 两
种 形 式 中 , 推
荐 使 用 第 一 种
。 它 与 >word
2>&1 在 语 义 上
等 价 。
Here
Documents 这 种 重 定 向
使 得 shell 从 当 前 源
文 件 读 取 输 入
, 直 到 遇 到 仅
包 含 word 的 一 行
(并 且 没 有 尾 部
空 白 , trailing blanks) 为
止 。 直 到 这 一
点 的 所 有 行 被
用 作 命 令 的 标
准 输 入 。
here-document
的 格 式 是 :
<<[-]word
here-document
delimiter 不 会 对word 进
行 parameter expansion, command substitution,
arithmetic expansion, 或 者 pathname
expansion。 如 果 word 中
任 何 字 符 是 引
用 的 , delimiter 将
是 对 word 进 行 引
用 删 除 的 结 果
, here-document 中 的 行 不
会 被 扩 展 。 如
果 word 没 有 被 引
用 , here-documnet 中 的 所
有 行 都 要 经 过
parameter expansion, command substitution, 和
arithmetic expansion。 在 后 一
种 情 况 下 , 字
符 序 列 \<newline> 被
忽 略 ; 必 须 用
\ 来 引 用 字 符
\, $, 和 ’. 如
果 重 定 向 操 作
符 是 <<-, 那 么
所 有 前 导 的 tab 字
符 都 被 从 输 入
行 和 包 含 delimiter
的 行 中 删 除 。
这 样 使 得 shell 脚 本
中 的 here-document 可 以 被
更 好 地 缩 进 。
Here
Strings
here-document 的 变 种 , 形
式 是
<<<word
word
被 扩 展 , 提 供
给 命 令 作 为 标
准 输 入 。
Duplicating
File Descriptors (复 制 文 件
描 述 符 ) 重 定 向
操 作 符
[n]<&word
用 于 复 制 文 件
描 述 符 。 如 果
word 扩 展 为 一 个
或 多 个 数 字 ,
n 代 表 的 文 件
描 述 符 将 成 为
那 个 文 件 描 述
符 的 复 制 。 如
果 word 中 的 数 字
并 未 指 定 一 个
被 用 于 读 取 的
文 件 描 述 符 ,
将 产 生 一 个 重
定 向 错 误 。 如
果 word 扩 展 为 -,
文 件 描 述 符 n
将 被 关 闭 。 如
果 没 有 指 定
n, 将 使 用 标
准 输 入 (文 件 描
述 符 0)。 类 似 的
, 操 作 符
[n]>&word
用 于 复 制 输 出
文 件 描 述 符 。
如 果 没 有 指 定
n, 将 使 用 标
准 输 出 (文 件 描
述 符 1)。 如 果 word
中 的 数 字 并 未
指 定 一 个 被 用
于 输 出 的 文 件
描 述 符 , 将 产
生 一 个 重 定 向
错 误 。 特 殊 情
况 下 , 如 果 忽
略 了 n, 并 且
word 并 非 扩 展 为
一 个 或 多 个 数
字 , 标 准 输 出
和 标 准 错 误 将
被 重 定 向 , 和
前 面 描 述 的 一
样 。
Moving File
Descriptors 重 定 向 操 作
符
[n]<&digit-
将 文 件 描 述 符
digit 移 动 为 文 件
描 述 符 n, 或 标
准 输 入 (文 件 描
述 符 0), 如 果 没
有 指 定 n 的 话
。 digit 复 制 为 n
之 后 就 被 关 闭
了 。 类 似 的 ,
重 定 向 操 作 符
[n]>&digit-
将 文 件 描 述 符
digit 移 动 为 文 件
描 述 符 n, 或 标
准 输 出 (文 件 描
述 符 1), 如 果 没
有 指 定 n 的 话
。
Opening File
Descriptors for Reading and Writing 重 定
向 操 作 符
[n]<>word
使 得 以 word 扩 展
结 果 为 名 的 文
件 被 打 开 , 通
过 文 件 描 述 符
n 进 行 读 写 。
如 果 没 有 指 定
n 那 么 就 使 用
文 件 描 述 符 0。
如 果 文 件 不 存
在 , 它 将 被 创
建 。
Aliases
(别 名 机 制 ) 允 许
将 一 个 词 来 替
换 为 一 个 字 符
串 , 如 果 它 是
一 个 简 单 命 令
的 第 一 个 词 的
话 。 shell 记 录 着 一
个 别 名 列 表 ,
可 以 使 用 内 建
命 令 alias 和 unalias
来 定 义 和 取 消
(参 见 下 面 的
shell 内 建 命 令 (SHELL
BUILTIN COMMANDS) 章 节 )。
每 个 命 令 的 第
一 个 词 , 如 果
没 有 引 用 , 都
将 被 检 查 是 否
是 一 个 别 名 。
如 果 是 , 这 个
词 将 被 它 所 指
代 的 文 本 替 换
。 别 名 和 替 换
的 文 本 可 以 包
含 任 何 有 效 的 shell
输 入 , 包 含 上
面 列 出 的 metacharacters
(元 字 符 ) , 特 殊
情 况 是 别 名 中
不 能 包 含 =。
替 换 文 本 的 第
一 个 词 也 被 检
查 是 否 是 别 名
, 但 是 如 果 它
与 被 替 换 的 别
名 相 同 , 就 不
会 再 替 换 第 二
次 。 这 意 味 着
可 以 用 ls 作 为 ls
-F 的 别 名 , bash
不 会 递 归 地 展
开 替 换 文 本 。
如 果 别 名 的 最
后 一 个 字 符 是
blank, 那 么 命 令 中
别 名 之 后 的 下
一 个 词 也 将 被
检 查 是 否 能 进
行 别 名 展 开 。
别 名 可 以 使 用
alias 命 令 来 创 建
或 列 举 出 来 ,
使 用 unalias 命 令 来
删 除 。 在 替 换
文 本 中 没 有 参
数 机 制 。 如 果
需 要 参 数 , 应
当 使 用 shell 函 数 (参
见 下 面 的 FUNCTIONS
(函 数 ) 段 落 )。
如 果 shell 不 是 交 互
的 , 别 名 将 不
会 展 开 , 除 非
使 用 内 建 命 令
shopt 设 置 了
expand_aliases 选 项 。 关
于 别 名 的 定 义
和 使 用 中 的 规
则 比 较 混 乱 。
Bash 在 执 行 一 行
中 的 任 何 命 令
之 前 , 总 是 读
入 至 少 完 整 一
行 的 输 入 。 别
名 在 命 令 被 读
取 时 展 开 , 而
不 是 在 执 行 的
时 候 。 因 此 ,
别 名 定 义 如 果
和 另 一 个 命 令
在 同 一 行 , 那
么 不 会 起 作 用
, 除 非 读 入 了
下 一 行 。 别 名
定 义 之 后 , 同
一 行 中 的 命 令
不 会 受 新 的 别
名 影 响 。 这 种
行 为 在 函 数 执
行 时 存 在 争 议
, 因 为 别 名 替
换 是 在 函 数 定
义 被 读 取 时 发
生 的 , 而 不 是
函 数 被 执 行 的
时 候 , 因 为 函
数 定 义 本 身 是
一 个 复 合 命 令
。 结 果 , 在 函
数 中 定 义 的 别
名 只 有 当 这 个
函 数 执 行 完 才
会 生 效 。 为 了
保 险 起 见 , 应
当 总 是 将 别 名
定 义 放 在 单 独
的 一 行 , 不 在
复 合 命 令 中 使
用 alias。 不 管 什
么 情 况 下 , 别
名 都 被 shell 函 数 超
越 (be superseded)。
一 个 shell 函
数 , 以 上 面 SHELL
GRAMMAR 中 描 述 的
方 法 定 义 , 保
存 着 一 系 列 的
命 令 , 等 待 稍
后 执 行 。 当 shell 函
数 名 作 为 一 个
简 单 命 令 名 使
用 时 , 这 个 函
数 名 关 联 的 命
令 的 序 列 被 执
行 。 函 数 在 当
前 shell 的 上 下 文 环
境 中 执 行 ; 不
会 创 建 新 的 进
程 来 解 释 它 们
(这 与 shell 脚 本 的 执
行 形 成 了 对 比
)。 当 执 行 函 数
时 , 函 数 的 参
数 成 为 执 行 过
程 中 的 位 置 参
数 (positional parameters)。 特 殊
参 数 # 被 更 新
以 反 映 这 个 变
化 。 位 置 参 数 0
不 会 改 变 。 函
数 执 行 时 ,
FUNCNAME 变 量 被
设 置 为 函 数 的
名 称 。 函 数 和
它 的 调 用 者 在 shell
执 行 环 境 的 所
有 其 他 方 面 都
是 一 样 的 , 特
殊 情 况 是
DEBUG 陷 阱 (参
见 下 面 对 内 建
函 数 trap 的 描 述
, 在 shell 内 建 命
令 (SHELL BUILTIN COMMANDS) 章
节 中 ) 不 会 被 继
承 , 除 非 函 数
设 置 了 trace 属 性
(参 见 下 面 对 内
建 函 数 declare
的 描 述 )。 函 数
中 的 局 部 变 量
可 以 使 用 内 建
命 令 local 来 声 明
。 通 常 情 况 下
, 变 量 和 它 们
的 值 在 函 数 和
它 的 调 用 者 之
间 是 共 享 的 。
如 果 函 数 中 执
行 了 内 建 命 令
return, 那 么 函 数
结 束 , 执 行 从
函 数 调 用 之 后
的 下 一 个 命 令
开 始 。 函 数 结
束 后 , 位 置 参
数 的 值 以 及 特
殊 参 数 # 都 将
重 置 为 它 们 在
函 数 执 行 前 的
值 。 函 数 名 和
定 义 可 以 使 用
内 建 命 令 declare 或
typeset 加 上 -f 参 数
来 列 出 。 如 果
在 declare 或 typeset 命
令 中 使 用 -F 选
项 将 只 列 出 函
数 名 。 函 数 可
以 使 用 内 建 命
令 export 加 上 -f 参
数 导 出 , 使 得
子 shell 中 它 们 被 自
动 定 义 。 函 数
可 以 是 递 归 的
。 对 于 递 归 调
用 的 次 数 没 有
硬 性 限 制 。
在 一 定
的 环 境 下 , shell 允
许 进 行 算 术 表
达 式 的 求 值 (参
见 内 建 命 令 let
和 Arithmetic Expansion (算 术
表 达 式 ))。 求 值
使 用 固 定 宽 度
的 整 数 , 不 检
查 是 否 溢 出 ,
但 是 被 零 除 会
被 捕 获 , 标 记
为 错 误 。 操 作
数 及 其 优 先 级
和 聚 合 程 度 与 C
语 言 中 相 同 。
下 列 操 作 数 的
列 表 按 照 相 同
优 先 级 的 操 作
数 其 级 别 来 分
组 。 列 出 的 级
别 顺 序 是 优 先
级 递 减 的 。
id++
id-- 变 量 自 增
/自 减 (在 后 )
++id --id 变 量
自 增 /自 减 (在 前
)
|
- + |
|
(单 目 的 ) 取 负
/取 正 |
|
|
! ~ |
|
|
|
逻 辑 和
位 取 反
|
|
|
|
** 乘 幂 |
|
|
* / % 乘 , 除 ,
取 余 |
|
|
+ - 加 , 减 |
|
|
<< >> 左 |
|
/右 位 移
<= >= < > 比 较
|
== != 相 等 |
|
/不 等 |
|
|
& 位 与 |
|
(AND)
或 (exclusive OR)
| 位 或 (OR)
&& 逻 辑 与 (AND)
|| 逻 辑 或 (OR)
expr?expr:expr
条 件 求 值
= *= /= %= += -= <<= >>= &= ^= |=
赋 值
expr1 , expr2 逗 号 表
达 式
shell 变
量 可 以 作 为 操
作 数 ; 在 表 达
式 求 值 之 前 会
进 行 参 数 扩 展
。 在 表 达 式 中
, 可 以 用 名 称
引 用 shell 变 量 , 不
必 使 用 参 数 扩
展 的 语 法 。 变
量 被 引 用 时 ,
其 值 被 作 为 算
术 表 达 式 来 求
值 。 shell 变 量 用 于
表 达 式 中 时 ,
不 必 启 用 整 数
属 性 。 以 0 为 前
导 的 常 量 被 当
作 八 进 制 数 ,
以 0x 或 0X 作 为 前 导
表 明 是 十 六 进
制 。 其 他 情 况
下 , 数 字 的 形
式 是 [base#]n, 这 里
base 是 一 个 2 到 64
的 十 进 制 数 值
, 作 为 数 字 的
基 数 , n 是 在
这 个 基 数 中 数
字 的 值 。 如 果
忽 略 了 base#, 将
以 10 为 基 数 。 大
于 10 的 数 字 依 次
以 小 写 字 母 ,
大 写 字 母 , @ 和 _
表 示 。 如 果 base
小 于 或 等 于 36,
在 表 示 10 与 35 之 间
的 数 字 时 小 写
字 母 和 大 写 字
母 可 以 互 换 。
操 作 符 根 据 优
先 级 顺 序 进 行
求 值 。 圆 括 号
中 的 子 表 达 式
被 最 先 求 值 ,
可 能 会 超 越 上
面 的 优 先 级 规
则 。
条 件 表
达 式 用 于 [[ 复
合 命 令 以 及 内
建 命 令 test 和 [
中 , 用 来 测 试
文 件 属 性 , 进
行 字 符 串 和 算
术 比 较 。 表 达
式 使 用 下 面 的
单 目 或 二 进 制
操 作 构 造 。 如
果 某 操 作 的 任
何 file 参 数 的 形
式 是 /dev/fd/n, 那 么
将 检 查 文 件 描
述 符 n。 如 果
某 操 作 的 file 参
数 是 /dev/stdin,
/dev/stdout 或 者 /dev/stderr
之 一 , 将 分 别
检 查 文 件 描 述
符 0, 1 和 2。
-a file 如
果 file 存 在 则 为
真 。
-b file 如 果 file 存
在 且 为 块 设 备
则 为 真 。
-c file 如 果 file 存
在 且 为 字 符 设
备 则 为 真 。
-d file 如 果 file 存
在 且 是 一 个 目
录 则 为 真 。
-e file 如 果 file 存
在 则 为 真 。
-f file 如 果 file 存
在 且 为 普 通 文
件 则 为 真 。
-g file 如 果 file 存
在 且 是 设 置 组
ID的 (sgid) 则 为 真 。
-h file 如 果 file 存
在 且 为 符 号 链
接 则 为 真 。
-k file 如 果 file 存
在 且 设 置 了
’’sticky’’ 位 (粘
滞 位 ) 则 为 真 。
-p file 如 果 file 存
在 且 是 一 个 命
名 管 道 (FIFO) 则 为 真
。
-r file 如 果 file 存
在 且 可 读 则 为
真 。
-s file 如 果 file 存
在 且 大 小 大 于
零 则 为 真 。
|
-t fd 如 果 文 件
描 述 符 |
|
fd 是 打 开 的 且
对 应 一 个 终 端
则 为 真 。 |
|
-u file 如
果 file 存 在 且 是
设 置 用 户 ID的 (suid)
则 为 真 。
-w file 如 果 file 存
在 且 可 写 则 为
真 。
-x file 如 果 file 存
在 且 可 执 行 则
为 真 。
-O file 如 果 file 存
在 且 为 有 效 用
户 ID所 拥 有 则 为
真 。
-G file 如 果 file 存
在 且 为 有 效 组
ID所 拥 有 则 为 真
。
-L file 如 果 file 存
在 且 为 符 号 链
接 则 为 真 。
-S file 如 果 file 存
在 且 为 套 接 字
则 为 真 。
-N file 如 果 file 存
在 且 上 次 读 取
后 被 修 改 过 则
为 真 。
file1 -nt file2 如 果
file1 比 file2 要 新
(根 据 修 改 日 期
), 或 者 如 果 file1
存 在 而 file2 不 存
在 , 则 为 真 。
file1 -ot file2 如 果
file1 比 file2 更 旧
, 或 者 如 果 file1
不 存 在 而 file2 存
在 , 则 为 真 。
file1 -ef file2 如 果
file1 和 file2 指 的
是 相 同 的 设 备
和 inode 号 则 为 真 。
-o optname 如 果 启 用
了 shell 选 项 optname 则
为 真 。 参 见 下
面 对 内 建 命 令
set 的 -o 选 项 的
描 述 中 的 选 项
列 表 。
-z string 如 果 string
的 长 度 为 0 则 为
真 。
-n string
|
string 如 果 |
|
string 的 长 度 非 0
则 为 真 。 |
|
string1 ==
string2 如 果 字 符 串
相 等 则 为 真 。
= 可 以 用 于 使
用 == 的 场 合 来
兼 容 POSIX 规 范 。
string1 != string2 如 果
字 符 串 不 相 等
则 为 真 。
string1 < string2 如 果
string1 在 当 前 语 言
环 境 的 字 典 顺
序 中 排 在 string2 之
前 则 为 真 。
string1 > string2 如 果
string1 在 当 前 语 言
环 境 的 字 典 顺
序 中 排 在 string2 之
后 则 为 真 。
arg1 OP arg2
OP
是 -eq, -ne, -lt, -le,
-gt, 或 -ge 之 一 。
这 些 算 术 二 进
制 操 作 返 回 真
, 如 果 arg1 与 arg2
分 别 是 相 等 ,
不 等 , 小 于 ,
小 于 或 等 于 ,
大 于 , 大 于 或
等 于 关 系 。 Arg1
和 arg2 可 以 是 正
/负 整 数 。
当 执 行
一 个 简 单 命 令
时 , shell 进 行 下 列
扩 展 , 赋 值 和
重 定 向 , 从 左
到 右 。
|
1. 解 释 器 标 记 为
与 变 量 赋 值 |
|
(在 命 令 名 之 前
的 ) 和 重 定 向 有
关 的 词 被 保 存
等 |
待 随 后
处 理 。
|
2. 并 非 变
量 赋 值 或 重 定
向 的 词 被 扩 展
。 如 果 扩 展 后
仍 然 有 词 保 留
下 来 , 第 一 个
词 被 作 为 命 令
名 , 其 余 词 是
参 数 。 |
|
3. 重 定 向 按 照 上
面 |
REDIRECTION
中 讲 到 的 规 则
进 行 。
|
4. 每 个 变
量 赋 值 中 |
|
= 之 后
的 文 本 在 赋 予
变 量 之 前 要 经
过 波 浪 线 扩 展
, 参 数 |
扩 展 ,
命 令 替 换 , 算
术 扩 展 和 引 用
删 除 。 如 果 没
有 得 到 命 令 名
, 变 量 赋 值 影
响 当 前 shell 环 境 。
否 则 , 变 量 被
加 入 被 执 行 的
命 令 的 环 境 中
, 不 影 响 当 前 shell
环 境 。 如 果 任
何 赋 值 动 作 试
图 为 只 读 变 量
赋 值 , 将 导 致
出 错 , 命 令 以
非 零 状 态 值 退
出 。 如 果 没 有
得 到 命 令 名 ,
重 定 向 仍 会 进
行 , 但 是 不 影
响 当 前 shell 环 境 。
重 定 向 出 错 将
使 命 令 以 非 零
状 态 值 退 出 。
如 果 扩 展 后 有
命 令 名 保 留 下
来 , 那 么 执 行
过 程 如 下 所 示
。 否 则 , 命 令
退 出 。 如 果 在
任 何 扩 展 中 包
含 命 令 替 换 ,
那 么 整 个 命 令
的 退 出 状 态 是
最 后 一 个 命 令
替 换 的 退 出 状
态 。 如 果 没 有
进 行 命 令 替 换
, 命 令 以 状 态
零 退 出 。
命 令 被
拆 分 为 词 之 后
, 如 果 结 果 是
一 个 简 单 命 令
和 可 选 的 参 数
列 表 , 将 执 行
下 面 的 操 作 。
如 果 命 令 名 中
没 有 斜 杠 , shell 试
图 定 位 命 令 位
置 。 如 果 存 在
同 名 的 shell 函 数 ,
函 数 将 被 执 行
, 像 上 面
FUNCTIONS 中 讲 到
的 一 样 。 如 果
名 称 不 是 一 个
函 数 , shell 从 内 建
命 令 中 搜 索 它
。 如 果 找 到 对
应 命 令 , 它 将
被 执 行 。 如 果
名 称 既 不 是 shell 函
数 也 不 是 一 个
内 建 命 令 , 并
且 没 有 包 含 斜
杠 , bash 搜 索
PATH 的 每 个
成 员 , 查 找 含
有 此 文 件 名 (可
执 行 文 件 ) 的 目
录 。 Bash 使 用 散
列 表 来 储 存 可
执 行 文 件 的 全
路 径 (参 见 下 面
的 shell 内 建 命 令
(SHELL BUILTIN COMMANDS) 中 的
hash。 只 有 在 散
列 表 中 没 有 找
到 此 命 令 , 才
对 PATH 进 行
完 整 的 搜 索 。
如 果 搜 索 不 成
功 , shell 输 出 错 误
消 息 , 返 回 退
出 状 态 127。 如 果
搜 索 成 功 , 或
者 命 令 中 包 含
一 个 或 多 个 斜
杠 , shell 在 单 独 的
执 行 环 境 中 执
行 这 个 程 序 。
参 数 0 被 设 置 为
所 给 名 称 ; 命
令 的 其 他 参 数
被 设 置 为 所 给
的 参 数 , 如 果
有 的 话 。 如 果
执 行 失 败 , 因
为 文 件 不 是 可
执 行 格 式 , 并
且 此 文 件 不 是
目 录 , 就 假 定
它 是 一 个 shell script
(脚 本 ), 一 个 包
含 shell 命 令 的 文 件
。 此 时 将 孵 化
(spawn) 出 一 个 子 shell 来
执 行 它 。 子 shell 重
新 初 始 化 自 身
, 效 果 就 好 像
是 执 行 了 一 个
新 的 shell 来 处 理 脚
本 一 样 , 但 是
父 shell 保 存 的 命 令
位 置 仍 然 被 保
留 (参 见 下 面 的
shell 内 建 命 令 (SHELL
BUILTIN COMMANDS) 中 的
hash)。 如 果 程 序
是 以 #! 开 头 的
文 件 , 那 么 第
一 行 的 其 余 部
分 指 定 了 这 个
程 序 的 解 释 器
。 shell 执 行 指 定 的
解 释 器 , 如 果
操 作 系 统 不 会
自 行 处 理 这 种
可 执 行 文 件 格
式 的 话 。 解 释
器 的 参 数 由 下
面 三 部 分 组 成
: 程 序 第 一 行
中 解 释 器 名 称
之 后 的 可 选 的
一 个 参 数 , 程
序 的 名 称 , 命
令 行 参 数 , 如
果 有 的 话 。
shell 有
execution environment (执 行 环
境 ) 的 概 念 , 由
下 列 内 容 组 成
:
|
• |
|
shell 启 动 时
继 承 的 打 开 的
文 件 , 例 如 在
内 建 命 令 exec 中
使 用 重 定 向 修
改 的 结 果
当 前 工
作 目 录 , 使 用
cd, pushd 或 者 popd
设 置 , 或 是 由 shell
在 启 动 时 继 承
得 到
文 件 创
建 模 式 掩 码 ,
使 用 umask 设 置 或
是 从 shell 的 父 进 程
中 继 承 得 到
• 当 前 陷 阱 , 用
trap 设 置
•
shell 参
数 , 使 用 变 量
赋 值 或 者 set 设
置 , 或 者 是 从
父 进 程 的 环 境
中 继 承 得 到
|
• |
|
shell 函 数 ,
在 执 行 中 定 义
或 者 是 从 父 进
程 的 环 境 中 继
承 得 到
设 为 允
许 的 选 项 , 在
执 行 时 设 置 (要
么 是 默 认 允 许
的 , 要 么 是 命
令 行 给 出 的 ) 或
者 是 用 set 设 置
用 shopt 设
为 允 许 的 选 项
• 用 alias 定 义 的
shell 别 名
进 程 号
, 包 含 后 台 作
业 的 进 程 号 ,
$$ 的 值 , 以 及
$PPID 的 值 当 并 非
shell 函 数 或 内 置 命
令 的 简 单 命 令
执 行 时 , 它 在
一 个 由 下 述 内
容 组 成 的 单 独
的 执 行 环 境 中
启 动 。 除 非 另
外 说 明 , 值 都
是 从 shell 中 继 承 的
。
•
|
|
|
shell 打 开 的
文 件 , 加 上 对
命 令 使 用 重 定
向 修 改 和 添 加
的 文 件 |
|
• |
|
|
当 前 工
作 目 录
|
|
|
|
• 文 件 创 建 模
式 掩 码 |
|
|
• 标 记 为 导 出 |
|
(export) 的 shell
变 量 , 以 及 传
递 到 环 境 中 为
这 个 命 令 导 出
的 变 量
|
• |
|
shell 捕 捉 的
陷 阱 被 重 置 为
从 shell 的 父 进 程 中
继 承 的 值 , shell 忽
略 的 陷 阱 也 被
忽 略 |
在 单 独
的 环 境 中 启 动
的 命 令 不 能 影
响 shell 的 执 行 环 境
。 命 令 替 换 和
异 步 命 令 都 在
子 shell 环 境 中 执 行
。 子 shell 环 境 是 原
有 shell 环 境 的 赋 值
, 但 shell 捕 捉 的 陷
阱 被 重 置 为 shell 启
动 时 从 父 进 程
中 继 承 的 值 。
作 为 管 道 一 部
分 来 执 行 的 内
建 命 令 也 在 一
个 子 shell 环 境 中 执
行 。 对 子 shell 环 境
所 作 修 改 不 能
影 响 到 原 有 shell 的
执 行 环 境 。 如
果 命 令 后 面 是
& 并 且 没 有 启
用 作 业 控 制 ,
命 令 的 默 认 标
准 输 入 将 是 空
文 件 /dev/null。 否 则
, 被 执 行 的 命
令 从 调 用 它 的 shell
中 继 承 被 重 定
向 修 改 的 文 件
描 述 符 。
当 一 个
程 序 执 行 时 ,
它 被 赋 予 一 个
字 符 串 数 组 ,
成 为 环 境
environment。 它 是 一
个 名 称 -值 对
(name-value) 的 列 表
, 形 式 是
name=value.
shell 提
供 了 多 种 操 作
环 境 的 方 法 。
启 动 时 , shell 扫 描
自 身 的 环 境 ,
为 每 个 找 到 的
名 字 创 建 一 个
参 数 , 自 动 地
将 它 标 记 为 export
(向 子 进 程 导 出
的 )。 被 执 行 的
命 令 继 承 了 这
个 环 境 。 export 和
declare -x 命 令 允 许
参 数 和 函 数 被
加 入 到 环 境 中
或 从 环 境 中 删
除 。 如 果 环 境
中 参 数 的 值 被
修 改 , 新 值 成
为 环 境 的 一 部
分 , 替 换 了 旧
值 。 所 有 被 执
行 的 命 令 继 承
的 环 境 包 含 shell 的
初 始 环 境 (可 能
值 被 修 改 过 ),
减 去 被 unset 命 令
删 除 的 , 加 上
通 过 export 和 declare -x
命 令 添 加 的 部
分 。 可 以 在 任
何 simple command 或 函 数
的 环 境 中 设 定
暂 时 有 效 的 参
数 , 只 要 将 参
数 赋 值 放 在 命
令 前 面 就 可 以
了 , 参 见 上 面
PARAMETERS 的 描 述
。 这 些 赋 值 语
句 只 在 这 个 命
令 的 环 境 中 有
效 。 如 果 设 置
了 内 建 命 令 set
的 -k 选 项 , 所
有 的 变 量 赋 值
都 将 放 到 命 令
的 环 境 中 , 不
仅 是 在 命 令 名
前 面 的 那 些 。
当 bash 执 行 一 个
外 部 命 令 时 ,
变 量 _ 被 设 置
为 命 令 的 文 件
全 名 , 然 后 被
传 递 到 命 令 的
环 境 之 中 。
从 shell 的 角
度 看 , 一 个 命
令 退 出 状 态 是 0
意 味 着 成 功 退
出 。 退 出 状 态
是 0 表 明 成 功 。
非 零 状 态 值 表
明 失 败 。 当 命
令 收 到 fatal signal N 退
出 时 , bash 使 用
128+N 作 为 它 的 退
出 状 态 。 如 果
没 有 找 到 命 令
, 为 执 行 它 而
创 建 的 子 进 程
返 回 127。 如 果 找
到 了 命 令 但 是
文 件 不 可 执 行
, 返 回 状 态 是
126。 如 果 命 令 由
于 扩 展 或 重 定
向 错 误 而 失 败
, 退 出 状 态 大
于 零 。
shell 内
建 命 令 如 果 成
功 返 回 0(true), 执
行 时 出 错 则 返
回 非 零 (false)。 所
有 内 建 命 令 返
回 2 来 指 示 不 正
确 的 用 法 。
Bash
自 身 返 回 最 后
执 行 的 命 令 的
退 出 状 态 , 除
非 发 生 了 语 法
错 误 , 这 时 它
返 回 非 零 值 。
参 见 下 面 的 内
建 命 令 exit。
如 果 bash
是 交 互 的 , 没
有 设 定 任 何 陷
阱 , 它 忽 略
SIGTERM (这 样 kill
0 不 会 杀 掉 交 互
的 shell)。 SIGINT
被 捕 获 并 处 理
(从 而 使 内 建 命
令 wait 可 以 中 断
)。 在 所 有 情 况
下 , bash 忽 略
SIGQUIT。
如 果 正 在 使 用
作 业 控 制 , bash
忽 略 SIGTTIN,
SIGTTOU, 和
SIGTSTP.
bash
开 始 的 并 行 作
业 的 信 号 处 理
句 柄 都 设 置 为 shell
从 父 进 程 中 继
承 的 值 。 如 果
不 是 正 在 使 用
作 业 控 制 , 异
步 命 令 还 忽 略
SIGINT 和 SIGQUIT
。 作 为 命 令
替 换 结 果 运 行
的 命 令 忽 略 键
盘 产 生 的 作 业
控 制 信 号
SIGTTIN,
SIGTTOU, 和
SIGTSTP. 如
果 收 到 信 号
SIGHUP, shell 默 认
退 出 。 在 退 出
前 , 交 互 的 shell 向
所 有 作 业 , 运
行 的 或 停 止 的
, 发 送 SIGHUP
信 号 。 shell 向 停 止
的 作 业 发 出
SIGCONT 信 号 来
保 证 它 们 会 收
到 SIGHUP.
要 阻 止 shell 向 特 定
的 作 业 发 送 信
号 , 应 当 使 用
内 建 命 令 disown 将
作 业 从 作 业 表
中 删 除 (参 见 下
面 的 shell 内 建 命
令 (SHELL BUILTIN COMMANDS) 章
节 ) 或 者 使 用 disown
-h 来 标 记 为 不 接
受 SIGHUP。 如
果 使 用 shopt 设 置
了 shell 选 项 huponexit,
在 交 互 的 登 录 shell
退 出 时 bash 向 所
有 作 业 发 出
SIGHUP 信 号 。
当 bash 等 待 命 令
执 行 结 束 时 ,
如 果 收 到 已 设
置 了 陷 阱 的 信
号 , 陷 阱 (trap) 将 不
会 执 行 , 直 到
命 令 结 束 。 当
bash 通 过 内 建 命
令 wait 等 待 异 步
命 令 时 , 如 果
收 到 已 设 置 了
陷 阱 的 信 号 ,
将 使 得 内 建 命
令 wait 立 即 以 大
于 128 的 状 态 值 返
回 。 接 着 , 陷
阱 将 立 即 被 执
行 。
Job
control (作 业 控 制 ) 指
的 是 可 以 选 择
停 止 (suspend, 挂 起
) 进 程 执 行 , 并
且 可 以 在 之 后
继 续 (resume, 恢 复 )
执 行 的 能 力 。
用 户 一 般 在 交
互 的 人 机 界 面
中 使 用 这 种 功
能 。 界 面 是 由
系 统 的 终 端 驱
动 和 bash 共 同 提
供 的 。
shell 将
每 个 管 道 分 配
给 一 个 作 业
(job)。 它 保 存 一
个 当 前 运 行 的
作 业 表 , 可 以
用 jobs 命 令 来 列
出 。 当 bash 启 动
一 个 异 步 的 作
业 时 (background, 后 台
执 行 ), 它 输 出
这 样 的 一 行 :
[1] 25647
表 明 这 个 作 业
的 作 业 号 是 1,
与 作 业 相 关 连
的 管 道 中 最 后
一 个 进 程 的 进
程 ID是 15647。 管 道 中
所 有 进 程 都 是
同 一 个 作 业 的
成 员 。 Bash 使 用
作 业 (job) 概 念 作
为 作 业 控 制 的
基 础 。 为 简 化
作 业 控 制 的 用
户 界 面 的 实 现
, 操 作 系 统 负
责 管 理 “当 前 终
端 的 进 程 组 ”
(current terminal process group ID) 的 概
念 。 这 个 进 程
组 的 成 员 (进 程
组 ID 是 当 前 终 端
进 程 组 ID 的 进 程 )
可 以 收 到 键 盘
产 生 的 信 号 ,
例 如
SIGINT. 这
些 进 程 被 称 为
foreground(前 台 的 )。
Background (后 台 的 ) 进
程 是 那 些 进 程
组 ID 与 终 端 不 同
的 进 程 ; 这 些
进 程 不 会 收 到
键 盘 产 生 的 信
号 。 只 有 前 台
进 程 可 以 从 终
端 读 或 向 终 端
写 。 后 台 进 程
试 图 读 /写 终 端
时 , 将 收 到 终
端 驱 动 程 序 发
送 的 SIGTTIN (SIGTTOU)
信 号 。 这 个 信
号 如 果 没 有 加
以 捕 捉 , 将 挂
起 这 个 进 程 。
如 果 bash 运 行 其
上 的 操 作 系 统
支 持 作 业 控 制
, bash 会 包 含 使
用 它 的 设 施 。
在 一 个 进 程 正
在 运 行 的 时 候
键 入 suspend 挂 起 字
符 (通 常 是 ^Z, Control-Z)
将 使 这 个 进 程
暂 停 , 将 控 制
权 还 给 bash. 输 入
delayed suspend , 延 时 挂 起
字 符 (通 常 是 ^Y,
Control-Y) 将 使 这 个 进
程 在 试 图 从 终
端 读 取 输 入 时
暂 停 , 将 控 制
权 还 给 bash. 用 户
接 下 来 可 以 控
制 此 作 业 的 状
态 , 使 用 bg 命
令 使 它 在 后 台
继 续 运 行 , fg
命 令 使 它 在 前
台 继 续 运 行 ,
或 kill 命 令 将 它
杀 死 。 ^Z 会 立
即 起 作 用 , 并
且 还 有 使 等 待
中 的 (pending) 输 出 和
输 入 被 忽 略 的
附 加 副 作 用 。
有 很 多 方 法 来
指 代 shell 中 的 作 业
。 字 符 % 可 以
引 入 作 业 名 。
编 号 为 n 的 作
业 可 以 用 %n 的
形 式 来 指 代 。
作 业 也 可 以 用
启 动 它 的 名 称
的 前 缀 , 或 者
命 令 行 中 的 子
字 符 串 来 指 代
。 例 如 , %ce 指
代 一 个 暂 停 的
ce 作 业 。 如 果
前 缀 匹 配 多 于
一 个 作 业 , bash
报 错 。 另 一 方
面 , 使 用 %?ce, 可
以 指 代 任 何 命
令 行 中 包 含 字
符 串 ce 的 作 业
。 如 果 子 字 符
串 匹 配 多 于 一
个 作 业 , bash 报
错 。 符 号 %% 和
%+ 指 代 shell 意 义 上
的 current job, 当 前
作 业 , 也 就 是
前 台 被 暂 停 的
最 后 一 个 作 业
, 或 者 是 在 后
台 启 动 的 作 业
。 previous job , 前 一 作
业 可 以 使 用 %-
来 指 代 。 在 有
关 作 业 的 输 出
信 息 中 (例 如 ,
命 令 jobs 的 输 出
), 当 前 作 业 总
是 被 标 记 为 +,
前 一 作 业 标 记
为 -. 简 单 地 给
出 作 业 名 , 可
以 用 来 把 它 放
到 前 台 : %1 是
’’fg %1’’ 的 同
义 词 , 将 作 业 1
从 后 台 放 到 前
台 。 类 似 的 ,
’’%1 &’’ 在
后 台 恢 复 作 业
1, 与 ’’bg %1’’
等 价 。 当 某 个
作 业 改 变 状 态
时 , shell 立 即 可 以
得 知 。 通 常 ,
bash 等 待 直 到 要
输 出 一 个 提 示
符 时 , 才 会 报
告 作 业 的 状 态
变 化 , 从 而 不
会 打 断 其 他 输
出 。 如 果 启 用
了 内 建 命 令 set
的 -b 选 项 , bash
将 立 即 报 告 这
些 变 化 。 对
SIGCHLD 信 号 的
陷 阱 将 在 每 个
子 进 程 退 出 时
执 行 。 如 果 在
作 业 暂 停 时 试
图 退 出 bash, shell
打 印 一 条 警 告
消 息 。 命 令 jobs
可 能 被 用 来 检
查 作 业 的 状 态
。 如 果 再 次 试
图 退 出 , 中 间
没 有 其 他 命 令
, shell 不 会 打 印 其
他 警 告 , 暂 停
的 作 业 将 终 止
。
在 交 互
执 行 时 , bash 在
准 备 好 读 入 一
条 命 令 时 显 示
主 提 示 符
PS1, 在 需 要
更 多 的 输 入 来
完 成 一 条 命 令
时 显 示 PS2。
Bash 允 许 通 过 插
入 一 些 反 斜 杠
转 义 的 特 殊 字
符 来 定 制 这 些
提 示 字 符 串 ,
这 些 字 符 被 如
下 解 释 :
|
\a 一 个 |
ASCII 响 铃 字
符 (07)
格 式 是
"星 期 月 份 日 "
(例 如 , "Tue May 26")
\D{format}
format 被 传
递 给 strftime(3), 结
果 被 插 入 到 提
示 字 符 串 中 ;
空 的 format 将 使 用
语 言 环 境 特 定
的 时 间 格 式 。
花 括 号 是 必 需
的
|
\e 一 个 |
ASCII 转 义 字 符 (033)
, 第 一
个 ’.’ 之 前 的 部
分
\H 主 机 名
\j
shell 当
前 管 理 的 作 业
数 量
|
\l |
|
shell 的 终 端
设 备 名 的 基 本
部 分 |
|
|
\n |
|
|
|
新 行 符
shell 的
名 称 , $0 的 基
本 部 分 (最 后 一
个 斜 杠 后 面 的
部 分 )
|
\t 当 前
时 间 , 采 用 |
24小 时 制
的 HH:MM:SS 格 式 |
|
\T 当 前 时 间 ,
采 用 |
12小 时 制 的 HH:MM:SS 格
式 |
|
\@ 当 前 时 间 ,
采 用 |
12小 时 制 上 午 /下
午 (am/pm) 格 式 |
|
\A 当 前 时 间 ,
采 用 |
24小 时 制 上 午 /下
午 格 式 |
|
\u 当 前 用 户 的
用 户 名 |
the username of the current user |
|
\v |
|
bash
的 版 本 (例 如 ,
2.00)
|
\V |
|
bash 的 发
行 编 号 , 版 本
号 加 补 丁 级 别
(例 如 , 2.00.0) |
|
\w |
|
|
当 前 工
作 目 录
|
|
|
|
\W 当 前 工 作 目
录 的 基 本 部 分 |
|
|
\! 此 命 令 的 历
史 编 号 |
|
|
\# 此 命 令 的 命
令 编 号 |
|
|
\$ 如 果 有 效 |
|
UID 是 0, 就
是 #, 其 他 情 况
下 是 $
|
\nnn 对
应 八 进 制 数 |
nnn 的 字
符 |
|
|
\\ 一 个 反 斜
杠 |
|
|
|
\[ 一 个 不 可 打
印 字 |
|
|
符 序 列
的 开 始 , 可 以
用 于 在 提 示 符
中 嵌 入 终 端 控
制 序 列
|
\] 一 个 不 可 打
印 字 符 序 列 的
结 束 命 令 编 号
和 历 史 编 号 通
常 是 不 同 的 :
历 史 编 号 是 命
令 在 历 史 列 表
中 的 位 置 , 可
能 包 含 从 历 史
文 件 中 恢 复 的
命 令 |
(参 见 下
面 的 HISTORY 历
史 章 节 ), 而
命 令 编 号 是 当
前 shell 会 话 中 执 行
的 命 令 序 列 中
, 命 令 的 位 置
。 字 符 串 被 解
码 之 后 , 它 将
进 行 扩 展 , 要
经 过 parameter expansion, command substitution,
arithmetic expansion 和 quote removal, 最
后 要 经 过 shell 选 项
promptvars 处 理 (参 见
下 面 的 shell 内 建
命 令 (SHELL BUILTIN COMMANDS)
章 节 中 , 对 命
令 shopt 的 描 述
)。
这 是 在
交 互 shell 中 处 理 读
取 输 入 的 库 ,
除 非 在 shell 启 动 时
给 出 了 --noediting 选
项 。 默 认 情 况
下 , 行 编 辑 命
令 类 似 于 emacs 中 的
那 些 。 也 可 以
使 用 vi 样 式 的 行
编 辑 界 面 。 要
在 shell 运 行 之 后 关
闭 行 编 辑 , 使
用 内 置 命 令 set
的 +o emacs 或 +o vi 选
项 (参 见 下 面 的
shell 内 建 命 令 (SHELL
BUILTIN COMMANDS) 章 节
)。
Readline
Notation 在 这 个 小 节
中 , 将 使 用 emacs 样
式 的 记 法 来 表
述 按 键 。 Ctrl 键 记
为 C-key, 例 如 , C-n
意 思 是 Ctrl-N。 类 似
的 , meta 键 记 为
M-key, 因 此 M-x 意 味
着 Meta-x。 (在 没 有
meta 键 的 键 盘 上
, M-x 意 思 是
ESC-x, 也 就 是 说
, 按 下 Esc 键 , 然
后 按 x 键 。 这
使 得 Esc 成 为 meta
prefix。 M-C-x 的 组 合
意 思 是 Esc-Ctrl-x,
也 就 是 按 Esc 键 ,
然 后 按 住 Ctrl 键 ,
同 时 按 x 键 。 )
readline
命 令 可 以 有 数
字 的 参 数
(arguments), 一 般 作 为
重 复 的 计 数 。
有 些 时 候 , 它
是 重 要 参 数 的
标 记 。 给 向 前
方 进 行 的 命 令
(例 如 , kill-line) 传
递 负 数 参 数 ,
将 使 得 命 令 向
反 方 向 进 行 。
下 面 的 命 令 如
果 接 受 参 数 时
的 行 为 与 此 不
同 , 将 另 行 说
明 。 当 命 令 被
描 述 为 剪 切
(killing) 文 本 时 ,
被 删 除 的 文 本
被 保 存 , 等 待
将 来 使 用 (粘 贴
, yanking)。 被 剪 切
的 文 本 保 存 在
kill ring 中 。 连 续
的 剪 切 使 得 文
本 被 依 次 加 入
到 一 个 单 元 中
, 可 以 一 次 被
粘 贴 。 不 剪 切
文 本 的 命 令 将 kill
ring 中 的 文 本 分 离
。
Readline
Initialization 初 始 化
readline 可 以 通 过 将
命 令 放 入 初 始
化 文 件 (inputrc 文 件
) 来 定 制 。 文 件
名 从 变 量
INPUTRC 的 值 中
获 取 。 如 果 没
有 设 置 这 个 变
量 , 默 认 是
~/.inputrc. 当 使 用 readline
库 的 程 序 启 动
时 , 将 读 取 初
始 化 文 件 , 按
键 关 联 和 变 量
将 被 设 置 。 readline
初 始 化 文 件 中
只 允 许 有 很 少
的 基 本 构 造 。
空 行 被 忽 略 。
以 # 开 始 的 行
是 注 释 。 以 $
开 始 的 行 指 示
了 有 条 件 的 构
造 。 其 他 行 表
示 按 键 关 联 和
变 量 设 置 。 默
认 的 按 键 关 联
可 以 使 用 inputrc 文
件 改 变 。 其 他
使 用 这 个 库 的
程 序 可 以 添 加
它 们 自 己 的 命
令 和 关 联 。 例
如 , 将
M-Control-u:
universal-argument 或
C-Meta-u: universal-argument 放 入
inputrc 将 使 得 M-C-u 执
行 readline 命 令
universal-argument. 可 以 识
别 下 列 字 符 的
符 号 名 称 : RUBOUT,
DEL, ESC, LFD, NEWLINE,
RET, RETURN, SPC, SPACE,
和 TAB. 在 命 令 名
之 外 , readline 允 许
将 按 键 与 一 个
字 符 串 关 联 ,
当 按 下 这 个 键
时 , 将 插 入 这
个 字 符 串 (一 个
宏 , macro)。
Readline Key
Bindings
inputrc 文 件 中 的 控
制 按 键 关 联 的
语 法 非 常 简 单
。 需 要 的 内 容
是 命 令 名 或 宏
, 以 及 它 应 当
关 联 到 的 按 键
序 列 。 名 称 可
以 以 两 种 方 式
指 定 : 一 个 按
键 的 符 号 名 称
, 可 能 带 有 Meta-
或 Control- 前 缀 , 或
者 是 一 个 按 键
序 列 。 当 使 用
keyname:function-name 或 macro
形 式 时 , keyname 是
按 键 以 英 文 拼
写 的 名 称 。 例
如 :
Control-u:
universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output" 在 上
述 例 子 中 , C-u
被 关 联 到 函 数
universal-argument, M-DEL 被 关
联 到 函 数
backward-kill-word, 而 C-o 被
关 联 为 运 行 右
边 给 出 的 宏 (意
思 是 , 将 向 行
中 插 入 ’’>
output’’ )。 在 第 二
种 形 式 中 ,
"keyseq":function-name 或
macro, keyseq 不 同
于 上 面 的 keyname,
表 示 整 个 按 键
序 列 的 字 符 串
可 以 通 过 将 按
键 序 列 放 在 双
引 号 引 用 中 来
指 定 。 可 以 使
用 一 些 GNU Emacs 样 式
的 按 键 序 列 ,
如 下 例 所 示 ,
但 是 不 会 识 别
按 键 的 符 号 名
称 。
"\C-u":
universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1" 在
上 述 例 子 中 ,
C-u 被 又 一 次 关
联 到 函 数
universal-argument. C-x C-r 被 关
联 到 函 数
re-read-init-file, 而 ESC [ 1 1 ~
被 关 联 为 插 入
文 本 ’’Function Key
1’’.
GNU Emacs
样 式 的 转 义 序
列 的 全 集 为 :
|
\C- |
|
Ctrl 前 缀 |
|
|
\M- |
|
Meta 前 缀
一 个 Esc 字
符
\\ 反 斜 杠
的 "
\’ 字 面 上 的 ’
除 了 GNU Emacs
样 式 的 转 义 序
列 , 还 有 一 系
列 反 斜 杠 转 义
序 列 可 用 :
|
\a 响 铃 |
|
|
|
\b 回 退 |
|
|
|
\d 删 除 |
|
|
|
\f 进 纸 |
|
|
|
\n 新 行 符 |
|
|
|
\r 回 车 |
|
|
|
\t 水 平 跳 格 |
|
|
|
\v 竖 直 跳 格 |
|
|
|
\nnn 一 个 八 比
特 字 符 , 它 的
值 是 八 进 制 值 |
|
nnn (一 到 三 个 八
进 制 数 |
字 )。
|
\xHH 一
个 八 比 特 字 符
, 它 的 值 是 十
六 进 制 值 |
|
HH (一 到
两 个 十 六 进 制
数 |
字 )。 输
入 宏 的 文 本 时
, 必 须 使 用 单
引 号 或 双 引 号
引 用 来 表 明 是
宏 的 定 义 。 没
有 引 用 的 文 本
被 当 作 函 数 名
。 在 宏 的 定 义
体 中 , 上 述 反
斜 杠 转 义 被 扩
展 。 反 斜 杠 将
引 用 宏 文 本 中
所 有 其 他 字 符
, 包 括 " 和
’。
Bash
允 许 使 用 内 建
命 令 bind 来 显 示
和 修 改 当 前 readline
按 键 关 联 。 在
交 互 使 用 中 可
以 用 内 建 命 令
set 的 -o 选 项 切
换 到 编 辑 模 式
(参 见 下 面 的
shell 内 建 命 令 (SHELL
BUILTIN COMMANDS) 章 节
)。
Readline
Variables
readline 包 含 额 外 的
可 用 于 定 制 它
的 行 为 的 变 量
。 可 以 在 inputrc 文
件 中 设 置 变 量
, 使 用 如 下 形
式 的 语 句 :
set
variable-name value 除 非 另
外 说 明 , readline 变
量 的 值 总 是 On
或 Off。 变 量 和
它 们 的 默 认 值
是 :
bell-style (audible)
控 制 了 当 readline 需
要 鸣 终 端 响 铃
时 的 动 作 。 如
果 设 置 为 none,
readline 不 会 鸣 铃 。
如 果 设 置 为
visible, readline 使 用 可
视 的 响 铃 , 如
果 可 用 的 话 。
如 果 设 置 为
audible, readline 试 着 鸣
终 端 响 铃 。
comment-begin (’’#’’) 这
个 字 符 串 在 执
行 readline 命 令 insert-comment
时 被 插 入 。 这
个 命 令 在 emacs 模 式
下 被 关 联 为
M-#, 在 vi 模 式 下
是 #。
completion-ignore-case (Off) 如 果 设
置 为 On, readline 进
行 大 小 写 不 敏
感 的 文 件 名 匹
配 和 补 全 。
completion-query-items (100) 这 个 变
量 决 定 着 何 时
向 用 户 询 问 ,
是 否 查 看 由 命
令 possible-completions 产 生
的 可 能 的 补 全
数 量 。 它 可 以
设 为 任 何 大 于
或 等 于 0 的 值 。
如 果 可 能 的 补
全 数 量 大 于 或
等 于 这 个 变 量
的 值 , 用 户 将
被 提 示 是 否 愿
意 查 看 它 们 ;
否 则 将 直 接 在
终 端 上 列 出 它
们 。
convert-meta (On) 如 果 设 置
为 On, readline 将 把
设 置 了 最 高 位
的 字 符 转 换 为 ASCII
按 键 序 列 , 方
法 是 去 掉 第 八
位 , 前 缀 一 个
转 义 字 符 (实 际
上 , 使 用 Esc 作 为
转 义 符 meta prefix)。
disable-completion (Off) 如 果 设
置 为 On, readline 将
禁 止 词 的 补 全
。 补 全 字 符 将
被 插 入 到 行 中
, 就 好 像 它 们
被 映 射 为
self-insert。
editing-mode (emacs) 控 制 readline 的
按 键 关 联 集 合
与 emacs 还 是 vi 相
似 。 editing-mode 可 以
设 置 为 emacs 或
vi。
enable-keypad (Off) 如 果 设 置
为 On , readline 在 调
用 时 将 试 图 启
用 辅 助 键 盘 。
一 些 系 统 需 要
设 置 这 个 来 启
用 方 向 键 。
expand-tilde (Off) 如 果 设 置
为 On, readline 试 图
进 行 词 的 补 全
时 会 进 行 波 浪
线 扩 展 。
history-preserve-point 如 果 设
置 为 On, 历 史
代 码 试 着 在
previous-history 或 next-history
取 回 的 每 个 历
史 行 的 相 同 位
置 中 加 点 。
horizontal-scroll-mode (Off) 如 果 设
置 为 On, 将 使
得 readline 使 用 单 行
来 显 示 , 如 果
它 比 屏 幕 宽 度
要 长 , 就 在 单
一 的 屏 幕 行 上
水 平 滚 动 输 入
行 , 而 不 是 自
动 回 绕 到 新 行
。
input-meta (Off) 如 果 设 置
为 On, readline 将 允
许 八 比 特 输 入
(也 就 是 说 , 它
不 会 将 它 读 入
的 字 符 中 最 高
位 删 除 ), 不 管
它 能 支 持 什 么
样 的 终 端 要 求
。 名 称 meta-flag 与
此 变 量 同 义 。
isearch-terminators (’’C-[C-J’’)
用 于 终 止 增 量
的 搜 索 , 不 再
将 字 符 当 作 命
令 执 行 的 字 符
串 。 如 果 这 个
变 量 没 有 赋 值
, 字 符 串 Esc 和
C-J 将 终 止 增 量
的 搜 索 。
keymap (emacs) 设 置 当 前
readline 键 盘 映 射 。
有 效 的 键 盘 映
射 名 称 是 emacs,
emacs-standard, emacs-meta, emacs-ctlx, vi,
vi-command, 还 有
vi-insert。 vi 等 价 于
vi-command; emacs 等 价 于
emacs-standard。 默 认 值
是 emacs; editing-mode 的 值
也 会 影 响 默 认
的 键 盘 映 射 。
mark-directories (On) 如 果 设
置 为 On, 补 全
的 目 录 名 会 添
加 一 个 斜 杠 。
mark-modified-lines (Off) 如 果 设
置 为 On, 已 被
修 改 的 历 史 行
将 显 示 为 前 缀
一 个 星 号 (*)。
mark-symlinked-directories (Off) 如 果
设 置 为 On, 补
全 的 名 称 如 果
是 到 目 录 的 符
号 链 接 , 则 将
添 加 一 个 斜 杠
(与 mark-directories 的 值 同
样 处 理 )。
match-hidden-files (On) 这 个 变
量 , 如 果 设 置
为 On, 将 使 得
readline 在 进 行 文 件
名 补 全 时 , 匹
配 以 ’.’ 开 头 的
文 件 (隐 藏 文 件
), 除 非 用 户 在
要 补 全 的 文 件
名 中 给 出 了 前
导 的 ’.’。
output-meta (Off) 如 果 设 置
为 On, readline 将 直
接 显 示 设 置 了
第 八 位 的 字 符
, 而 不 是 转 化
为 一 个 带 meta 前 缀
的 转 义 序 列 。
page-completions (On) 如 果 设
置 为 On, readline 将
使 用 内 建 的 类
似 more 的 分 页 程
序 , 来 每 次 显
示 一 屏 可 能 的
补 全 。
print-completions-horizontally (Off) 如 果
设 置 为 On, readline
将 匹 配 的 补 全
按 字 母 表 顺 序
排 序 , 然 后 水
平 排 列 显 示 出
来 , 而 不 是 在
屏 幕 上 竖 直 排
列 显 示 。
show-all-if-ambiguous (Off) 这 将 调
整 补 全 函 数 的
默 认 行 为 。 如
果 设 置 为 on, 拥
有 多 于 一 个 可
能 的 补 全 的 词
将 立 即 列 出 所
有 匹 配 , 而 不
是 鸣 响 铃 。
visible-stats (Off) 如 果 设 置
为 On, 在 列 出
可 能 的 补 全 时
, 将 在 文 件 名
后 面 添 加 一 个
表 示 文 件 类 型
的 字 符 , 文 件
类 型 由 stat(2) 报 告
。
Readline
Conditional Constructs
readline 实 现 了 一 种
功 能 , 本 质 上
与 C 预 处 理 器 进
行 条 件 编 译 的
功 能 类 似 , 允
许 根 据 测 试 的
结 果 进 行 键 盘
关 联 和 变 量 设
置 。 其 中 使 用
了 四 种 解 释 器
指 令 。
|
$if |
|
$if 结 构 允 许 根
据 编 辑 模 式 ,
正 在 使 用 的 终
端 , 使 用 readline 的
应 用 程 序 来 设
定 按 键 关 联 。
测 试 的 文 本 包
括 一 行 , 直 到
行 尾 ; 不 必 用
字 符 来 隔 离 它
。 |
mode
|
|
|
$if 结 构
的 mode= 形 式 用 于
测 试 readline 处 于 emacs 还
是 vi 模 式 。 这 可
以 与 命 令 set keymap
结 合 使 用 , 例
如 , 设 置 emacs-standard
和 emacs-ctlx 键 盘 映
射 , 仅 当 readline 以 emacs
模 式 启 动 。 |
|
term |
|
term= 形 式 用 于
包 含 与 终 端 相
关 的 按 键 关 联
, 也 许 是 将 按
键 序 列 输 出 与
终 端 的 功 能 键
相 关 联 。 等 号
= 右 边 的 词 被
同 终 端 的 全 名
和 名 称 中 第 一
个 - 前 面 的 一
部 分 相 比 较 。
例 如 , 允 许 sun
同 时 匹 配 sun 和
sun-cmd。 |
application
application 结
构 用 于 包 含 应
用 程 序 相 关 的
设 置 。 每 个 使
用 readline 的 程 序 都
设 置 application name, 初
始 化 文 件 可 以
测 试 它 的 值 。
它 可 用 于 将 一
个 按 键 序 列 与
对 特 定 的 程 序
有 用 的 功 能 相
关 联 。 例 如 ,
下 列 命 令 添 加
了 一 个 按 键 序
列 , 用 以 引 用 bash
中 当 前 的 词 或
前 一 个 词
$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
|
$endif 上 例 中 的
这 个 命 令 , 结
束 了 一 个 |
|
$if 命 令 。 |
|
|
$else 如 果 测 试
失 败 , |
|
|
|
$if 指 令
中 这 个 分 支 的
命 令 将 被 执 行
。
$include 这 个 指 令 使
用 单 个 文 件 名
作 为 参 数 , 从
文 件 中 读 取 命
令 和 按 键 关 联
。 例 如 , 下 列
指 令 将 读 取
/etc/inputrc:
$include
/etc/inputrc
Searching
readline 提 供 了 从 命
令 历 史 中 搜 索
包 含 给 定 字 符
串 的 行 的 命 令
(参 见 下 面 的
HISTORY 历 史 章
节 )。 有 两 种 搜
索 模 式 : incremental
和 non-incremental. 增 量 的
搜 索 在 用 户 结
束 输 入 搜 索 字
符 串 时 开 始 。
在 搜 索 字 符 串
的 每 个 字 符 被
输 入 的 同 时 ,
readline 显 示 与 已 输
入 的 字 符 串 匹
配 的 下 一 个 历
史 条 目 。 增 量
的 搜 索 只 要 求
输 入 能 找 到 期
望 的 历 史 条 目
所 需 的 那 么 多
字 符 。 isearch-terminators
变 量 中 的 字 符
用 来 终 止 一 次
增 量 的 搜 索 。
如 果 这 个 变 量
没 有 被 赋 值 , Esc
和 Ctrl-J 字 符 串 将 结
束 一 次 增 量 的
搜 索 。 Ctrl-G 将 取 消
一 次 增 量 的 搜
索 , 恢 复 初 始
的 行 。 当 搜 索
终 止 时 , 包 含
搜 索 字 符 串 的
历 史 条 目 成 为
当 前 行 。 要 从
历 史 列 表 中 找
到 其 他 匹 配 的
条 目 , 适 当 地
键 入 Ctrl-S 或 Ctrl-R。 这
样 将 在 历 史 中
向 前 /向 后 搜 索
下 一 个 匹 配 已
输 入 的 搜 索 字
符 串 的 条 目 。
其 他 关 联 到 某
个 readline 命 令 的 按
键 序 列 将 终 止
搜 索 并 执 行 关
联 的 命 令 。 例
如 , newline 将 终 止
搜 索 , 接 受 当
前 行 , 从 而 执
行 历 史 列 表 中
的 命 令 。
readline
可 以 记 住 上 次
增 量 搜 索 的 字
符 串 。 如 果 键
入 两 次 Ctrl-R, 中 间
没 有 输 入 任 何
字 符 来 定 义 一
个 新 的 搜 索 字
符 串 , 那 么 将
使 用 已 记 住 的
搜 索 字 符 串 。
非 增 量 的 搜 索
将 整 个 搜 索 字
符 串 读 入 , 然
后 才 开 始 搜 索
匹 配 的 历 史 条
目 。 搜 索 字 符
串 可 以 由 用 户
输 入 , 或 者 是
当 前 行 的 内 容
的 一 部 分 。
Readline
Command Names 下 面 列 出
的 是 命 令 的 名
称 以 及 默 认 情
况 下 它 们 关 联
的 按 键 序 列 。
命 令 名 称 如 果
没 有 对 应 的 按
键 序 列 , 那 么
默 认 是 没 有 关
联 的 。 在 下 列
描 述 中 , 点 (point)
指 当 前 光 标 位
置 , 标 记 (mark) 指
命 令 set-mark 保 存 的
光 标 位 置 。 point 和
mark 之 间 的 文 本 被
称 为 范 围
(region)。
Commands for
Moving 移 动
beginning-of-line (C-a) 移 动 到
当 前 行 的 开 始
。
end-of-line (C-e) 移 动 到 当
前 行 的 结 尾 。
forward-char (C-f) 向 前 移 动
一 字 。
backward-char (C-b) 向 后 移 动
一 字 。
forward-word (M-f) 向 前 移 动
到 下 一 词 尾 。
词 由 字 符 (字 母
和 数 字 ) 组 成 。
backward-word (M-b) 向 后 移 动
到 当 前 或 上 一
词 首 。
clear-screen (C-l) 清 除 屏 幕
, 保 留 当 前 行
在 屏 幕 顶 端 。
有 参 数 时 , 刷
新 当 前 行 , 不
清 屏 。
redraw-current-line 刷 新 当 前
行 。
Commands for
Manipulating the History 操 纵 历 史
行
accept-line (Newline, Return) 接 受 这
一 行 , 不 管 光
标 在 什 么 位 置
。 如 果 行 非 空
, 将 根 据 变 量
HISTCONTROL 的 状 态
加 入 到 历 史 列
表 中 。 如 果 行
是 修 改 过 的 历
史 行 , 将 恢 复
该 历 史 行 到 初
始 状 态 。
previous-history (C-p) 从 历 史
列 表 中 取 得 前
一 个 命 令 , 从
列 表 中 向 后 移
动 。
next-history (C-n) 从 历 史 列
表 中 取 得 后 一
个 命 令 , 从 列
表 中 向 前 移 动
。
beginning-of-history (M-<) 移 动 到
历 史 中 的 第 一
行 。
end-of-history (M->) 移 动 到
输 入 历 史 行 的
末 尾 , 也 就 是
当 前 输 入 的 行
的 末 尾 。
reverse-search-history (C-r) 从 当 前
行 开 始 向 后 搜
索 , 按 照 需 要
在 历 史 中 向 “上
”移 动 。 这 是 一
个 增 量 的 搜 索
。
forward-search-history (C-s) 从 当 前
行 开 始 向 前 搜
索 , 按 照 需 要
在 历 史 中 向 “下
”移 动 。 这 是 一
个 增 量 的 搜 索
。
non-incremental-reverse-search-history (M-p) 从
当 前 行 开 始 向
后 , 使 用 非 增
量 搜 索 来 查 找
用 户 给 出 的 字
符 串 。
non-incremental-forward-search-history (M-n) 从
当 前 行 开 始 向
前 , 使 用 非 增
量 搜 索 来 查 找
用 户 给 出 的 字
符 串 。
history-search-forward 从 当 前
行 开 始 向 前 搜
索 历 史 , 查 找
从 当 前 行 首 到 point
之 间 的 字 符 串
。 这 是 一 个 非
增 量 的 搜 索 。
history-search-backward 从 当 前
行 开 始 向 后 搜
索 历 史 , 查 找
从 当 前 行 首 到 point
之 间 的 字 符 串
。 这 是 一 个 非
增 量 的 搜 索 。
yank-nth-arg (M-C-y) 将 前 一 个
命 令 的 第 一 个
参 数 (通 常 是 上
一 行 的 第 二 个
词 ) 插 入 到 point 位
置 。 有 参 数 n
时 , 将 前 一 个
命 令 的 第 n 个
词 (前 一 个 命 令
中 的 词 从 0 开 始
计 数 ) 插 入 到 point
位 置 。 负 数 参
数 则 插 入 前 一
个 命 令 倒 数 第
n 个 词 。
yank-last-arg (M-., M-_) 插 入 前
一 个 命 令 的 最
后 一 个 参 数 (上
一 历 史 条 目 的
最 后 一 个 词 )。
有 参 数 时 , 行
为 类 似 于
yank-nth-arg。 后 继 的
yank-last-arg 调 用 将 从
历 史 列 表 中 向
后 移 动 , 依 次
将 每 行 的 最 后
一 个 参 数 插 入
。
shell-expand-line (M-C-e) 扩 展 行
, 像 shell 做 的 那 样
。 其 中 包 含 别
名 和 历 史 扩 展
, 还 有 所 有 的 shell
词 的 扩 展 。 参
见 下 面 的 HISTORY
EXPANSION 中 关 于 历
史 扩 展 的 描 述
。
history-expand-line (M-^) 在 当 前
行 进 行 历 史 扩
展 。 参 见 下 面
的 HISTORY EXPANSION 中
关 于 历 史 扩 展
的 描 述 。
magic-space 在 当 前 行 进
行 历 史 扩 展 ,
并 插 入 一 个 空
格 。 参 见 下 面
的 HISTORY EXPANSION 中
关 于 历 史 扩 展
的 描 述 。
alias-expand-line 在 当 前 行
进 行 别 名 扩 展
, 参 见 上 面 的
ALIASES 中 关 于
别 名 扩 展 的 描
述 。
history-and-alias-expand-line 在 当 前
行 进 行 历 史 和
别 名 扩 展 。
insert-last-argument (M-., M-_) 与
yank-last-arg 同 义 。
operate-and-get-next (C-o) 接 受 当
前 行 , 加 以 执
行 , 从 历 史 中
取 出 相 对 当 前
行 的 下 一 行 进
行 编 辑 。 任 何
参 数 都 被 忽 略
。
edit-and-execute-command (C-xC-e) 启 动
一 个 编 辑 器 ,
编 辑 当 前 命 令
行 , 将 结 果 作
为 shell 命 令 运 行 。
Bash 将 依 次 试 着
运 行 $FCEDIT,
$EDITOR, 和 emacs 作
为 编 辑 器 。
Commands for
Changing Text 改 变 文 本
delete-char (C-d) 删 除 point 处
的 字 符 。 如 果 point
在 行 首 , 行 中
没 有 字 符 , 最
后 一 次 输 入 的
字 符 没 有 被 关
联 到 delete-char, 将
返 回 EOF.
backward-delete-char (Rubout) 删 除 光
标 之 后 的 字 符
。 当 给 出 一 个
数 值 的 参 数 时
, 保 存 删 除 的
文 本 到 kill ring 中 。
forward-backward-delete-char 删 除 光
标 下 的 字 符 ,
除 非 光 标 在 行
尾 , 此 时 删 除
光 标 后 的 字 符
。
quoted-insert (C-q, C-v) 将 输 入
的 下 一 字 符 保
持 原 样 添 加 到
行 中 。 例 如 ,
可 以 用 它 来 插
入 类 似 C-q 的 字
符 。
tab-insert (C-v TAB) 插 入 一 个
跳 格 符 号 。
self-insert
(a, b, A, 1, !, ...) 插
入 键 入 的 字 符
。
transpose-chars (C-t) 将 point 之 前
的 字 符 向 前 移
动 , 越 过 point 处 的
字 符 , 同 时 也
改 变 point 的 位 置 。
如 果 point 在 行 尾 ,
将 调 换 point 之 前 的
两 个 字 符 。 负
数 参 数 没 有 作
用 。
transpose-words (M-t) 将 point 之 前
的 词 向 前 移 动
, 越 过 point 处 的 词
, 同 时 也 改 变 point
的 位 置 。 如 果 point
在 行 尾 , 将 调
换 行 中 的 最 后
两 个 词 。
upcase-word (M-u) 将 当 前 (或
下 一 个 ) 词 变 成
全 大 写 。 有 负
值 的 参 数 时 ,
将 前 一 个 词 变
为 大 写 , 但 是
不 移 动 point。
downcase-word (M-l) 将 当 前 (或
下 一 个 ) 词 变 成
全 小 写 。 有 负
值 的 参 数 时 ,
将 前 一 个 词 变
为 小 写 , 但 是
不 移 动 point。
capitalize-word (M-c) 将 当 前
(或 下 一 个 ) 词 变
为 首 字 大 写 。
有 负 值 的 参 数
时 , 将 前 一 个
词 变 为 首 字 大
写 , 但 是 不 移
动 point。
overwrite-mode 控 制 插 入
/改 写 模 式 。 给
出 一 个 正 整 数
参 数 时 , 切 换
为 改 写 模 式 。
给 出 一 个 非 正
数 参 数 时 , 切
换 为 插 入 模 式
。 这 个 命 令 只
影 响 emacs 模 式 ;
vi 模 式 的 改 写
与 此 不 同 。 每
个 对 readline() 的 调
用 都 以 插 入 模
式 开 始 。 在 改
写 模 式 下 , 关
联 到 self-insert 的 字
符 替 换 point 处 的 字
符 , 而 不 是 将
它 推 到 右 边 。
关 联 到 backward-delete-char
的 字 符 以 空 格
替 换 point 前 的 字 符
。 默 认 情 况 下
, 这 个 命 令 没
有 关 联 。
Killing and
Yanking 剪 切 和 粘 贴
kill-line (C-k) 剪 切 从 point
到 行 尾 的 文 本
。
backward-kill-line (C-x Rubout) 反 向
剪 切 到 行 首 。
unix-line-discard (C-u) 反 向 剪
切 到 行 首 。 与
backward-kill-line 没 有 什
么 区 别 。 剪 切
的 文 本 被 保 存
于 kill-ring 中 。
kill-whole-line 剪 切 当 前
行 中 所 有 字 符
, 不 管 point 在 什 么
位 置 。
kill-word (M-d) 剪 切 从 point
到 当 前 词 尾 ,
或 者 如 果 point 在 词
之 间 , 那 么 剪
切 到 下 一 词 尾
。
backward-kill-word (M-Rubout) 剪 切 point
之 后 的 词 。 词
的 边 界 与 backward-word
使 用 的 相 同 。
unix-word-rubout (C-w) 剪 切 point 之
后 的 词 , 使 用
空 白 作 为 词 的
边 界 。 剪 切 的
文 本 被 保 存 于
kill-ring 中 。
delete-horizontal-space (M-\) 删 除 point
两 边 的 所 有 空
格 和 跳 格 。
kill-region 剪 切 当 前 region
的 文 本 。
copy-region-as-kill 将 region 的 文
本 复 制 到 剪 切
缓 冲 区 中 。
copy-backward-word 将 point 前 面
的 词 复 制 到 剪
切 缓 冲 区 中 。
词 的 边 界 与
backward-word 使 用 的 相
同 。
copy-forward-word 将 point 之 后
的 词 复 制 到 剪
切 缓 冲 区 中 。
词 的 边 界 与
backward-word 使 用 的 相
同 。
yank (C-y) 将 kill-ring 顶 部 的
内 容 粘 贴 到 point 处
的 缓 冲 区 中
yank-pop (M-y) 轮 转 kill-ring,
粘 贴 新 的 顶 部
内 容 。 只 能 在
yank 或 yank-pop 之 后
使 用 。
Numeric
Arguments 数 值 参 数
digit-argument (M-0, M-1, ..., M--) 将 这
个 数 字 加 入 已
有 的 (already accumulating) 参 数
中 , 或 者 开 始
新 的 参 数 。 M-- 开
始 一 个 否 定 的
参 数 。
universal-argument 这 是 指 定
参 数 的 另 一 种
方 法 。 如 果 这
个 命 令 后 面 跟
着 一 个 或 多 个
数 字 , 可 能 还
包 含 前 导 的 负
号 , 这 些 数 字
定 义 了 参 数 。
如 果 命 令 之 后
跟 随 着 数 字 ,
再 次 执 行
universal-argument 将 结 束
数 字 参 数 , 但
是 其 他 情 况 下
被 忽 略 。 有 一
种 特 殊 情 况 ,
如 果 命 令 之 后
紧 接 着 一 个 并
非 数 字 或 负 号
的 字 符 , 下 一
命 令 的 参 数 计
数 将 乘 以 4。 参
数 计 数 初 始 是
1, 因 此 第 一 次
执 行 这 个 函 数
, 使 得 参 数 计
数 为 4, 第 二 次
执 行 使 得 参 数
计 数 为 16, 以 此
类 推 。
Completing
补 全
complete (TAB) 试 着 对 point 之
前 的 文 本 进 行
补 全 。 Bash 依 次
试 着 将 文 本 作
为 一 个 变 量 (如
果 文 本 以 $ 开
始 ), 一 个 用 户
名 (如 果 文 本 以
~ 开 始 ), 主 机
名 (如 果 文 本 以
@ 开 始 ), 或 者
命 令 (以 及 别 名
和 函 数 ) 来 补 全
。 如 果 这 些 都
没 有 匹 配 , 将
尝 试 文 件 名 补
全 。
possible-completions (M-?) 列 出 point
之 前 的 文 本 可
能 的 补 全 。
insert-completions (M-*) 插 入
possible-completions 已 产 生
的 point 之 前 的 文 本
所 有 的 补 全 。
menu-complete 与 complete 相 似
, 但 是 使 用 可
能 的 补 全 列 表
中 的 某 个 匹 配
替 换 要 补 全 的
词 。 重 复 执 行
menu-complete 将 遍 历 可
能 的 补 全 列 表
, 插 入 每 个 匹
配 。 到 达 补 全
列 表 的 结 尾 时
, 鸣 终 端 响 铃
(按 照 bell-style 的 设
置 来 做 ) 并 恢 复
初 始 的 文 本 。
参 数 n 将 在 匹
配 列 表 中 向 前
移 动 n 步 ; 负
数 参 数 可 以 用
于 在 列 表 中 向
后 移 动 。 这 个
命 令 应 当 与 TAB
键 关 联 , 但 是
默 认 情 况 下 是
没 有 关 联 的 。
delete-char-or-list 删 除 光 标
下 的 字 符 , 如
果 不 是 在 行 首
或 行 尾 (类 似
delete-char)。 如 果 在
行 尾 , 行 为 与
possible-completions 一 致 。
这 个 命 令 默 认
没 有 关 联 。
complete-filename (M-/) 尝 试 对 point
之 前 的 文 本 进
行 文 件 名 补 全
。
possible-filename-completions (C-x /) 列 出
point 之 前 的 文 本 可
能 的 补 全 , 将
它 视 为 文 件 名
。
complete-username (M-~) 尝 试 对 point
之 前 的 文 本 进
行 补 全 , 将 它
视 为 用 户 名 。
possible-username-completions (C-x ~) 列 出
point 之 前 的 文 本 可
能 的 补 全 , 将
它 视 为 用 户 名
。
complete-variable (M-$) 尝 试 对 point
之 前 的 文 本 进
行 补 全 , 将 它
视 为 shell 变 量 。
possible-variable-completions (C-x $) 列 出
point 之 前 的 文 本 可
能 的 补 全 , 将
它 视 为 shell 变 量 。
complete-hostname (M-@) 尝 试 对 point
之 前 的 文 本 进
行 补 全 , 将 它
视 为 主 机 名 。
possible-hostname-completions (C-x @) 列 出
point 之 前 的 文 本 可
能 的 补 全 , 将
它 视 为 主 机 名
。
complete-command (M-!) 尝 试 对 point
之 前 的 文 本 进
行 补 全 , 将 它
视 为 命 令 名 。
命 令 补 全 尝 试
着 将 此 文 本 依
次 与 别 名 , 保
留 字 , shell 函 数 ,
shell 内 建 命 令 , 最
后 是 可 执 行 文
件 名 进 行 匹 配
。
possible-command-completions (C-x !) 列 出
point 之 前 的 文 本 可
能 的 补 全 , 将
它 视 为 命 令 名
。
dynamic-complete-history (M-TAB) 尝 试
对 point 之 前 的 文 本
进 行 补 全 , 将
此 文 本 与 历 史
列 表 中 的 行 相
比 较 来 查 找 可
能 的 补 全 匹 配
。
complete-into-braces (M-{) 进 行 文
件 名 补 全 , 将
可 能 的 补 全 列
表 放 在 花 括 号
中 插 入 , 使 得
列 表 可 以 被 shell 使
用 (参 见 上 面 的
Brace Expansion 花 括 号 扩
展 )。
Keyboard
Macros 宏
start-kbd-macro (C-x () 开 始 保
存 输 入 字 符 为
当 前 键 盘 宏 。
end-kbd-macro (C-x )) 停 止 保
存 输 入 字 符 为
当 前 键 盘 宏 ,
保 存 宏 定 义 。
call-last-kbd-macro (C-x e) 重 新 执
行 上 次 定 义 的
键 盘 宏 , 即 显
示 出 宏 中 的 字
符 , 好 像 它 们
是 从 键 盘 输 入
的 一 样 。
Miscellaneous
re-read-init-file (C-x C-r) 读 入
inputrc 文 件 的 内 容
, 合 并 其 中 的
按 键 关 联 和 变
量 赋 值 。
abort (C-g) 取 消 当 前 编
辑 命 令 , 鸣 终
端 响 铃 (按 照
bell-style 的 设 置 来
做 )。
do-uppercase-version (M-a, M-b, M-x, ...)
如 果 有 Meta 前 缀 的
字 符 x 是 小 写
的 , 那 么 与 命
令 相 关 连 的 是
对 应 的 大 写 字
符 。
prefix-meta (ESC) 将 输 入 的
下 一 个 字 符 加
上 Meta 前 缀 。
ESC f 等 价 于
Meta-f.
undo (C-_, C-x C-u) 增 量 的 撤
销 , 分 别 记 住
每 一 行 。
revert-line (M-r) 撤 销 这 一
行 的 所 有 修 改
。 这 与 执 行 命
令 undo 足 够 多 次
的 效 果 相 同 ,
将 这 一 行 恢 复
到 初 始 状 态 。
tilde-expand (M-&) 对 当 前
词 进 行 波 浪 线
扩 展 。
set-mark (C-@, M-<space>) 在 point 处
设 置 mark。 如 果 给
出 了 数 值 的 参
数 , 标 记 被 设
置 到 那 个 位 置
。
exchange-point-and-mark (C-x C-x) 交 换
point 和 mark。 当 前 光
标 位 置 被 设 置
为 保 存 的 位 置
, 旧 光 标 位 置
被 保 存 为 mark。
character-search (C-]) 读 入 一
个 字 符 , point 移 动
到 这 个 字 符 下
一 次 出 现 的 地
方 。 负 数 将 搜
索 上 一 个 出 现
。
character-search-backward (M-C-]) 读 入
一 个 字 符 , point 移
动 到 这 个 字 符
上 一 次 出 现 的
地 方 。 负 数 将
搜 索 下 面 的 出
现 。
insert-comment (M-#) 没 有 数 值
的 参 数 时 , readline
变 量 comment-begin 的 值
将 被 插 入 到 当
前 行 首 。 如 果
给 出 一 个 数 值
的 参 数 , 命 令
的 行 为 类 似 于
一 个 开 关 : 如
果 行 首 字 符 不
匹 配 comment-begin 的 值
, 将 插 入 这 个
值 , 否 则 匹 配
comment-begin 的 字 符 将
被 从 行 首 删 除
。 在 两 种 情 况
下 , 这 一 行 都
被 接 受 , 好 像
输 入 了 新 行 符
一 样 。 comment-begin 的
默 认 值 使 得 这
个 命 令 将 当 前
行 变 成 一 条 shell 注
释 。 如 果 数 值
参 数 使 得 注 释
字 符 被 删 除 ,
这 一 行 将 被 shell 执
行 。
glob-complete-word (M-g)
point 之 前
的 词 被 当 作 路
径 扩 展 的 一 个
模 式 , 尾 部 暗
含 了 一 个 星 号
。 这 个 模 式 被
用 来 为 可 能 的
补 全 产 生 匹 配
的 文 件 名 列 表
。
glob-expand-word (C-x
*)
point 之 前
的 词 被 当 作 路
径 扩 展 的 一 个
模 式 , 匹 配 的
文 件 名 的 列 表
被 插 入 , 替 换
这 个 词 。 如 果
给 出 一 个 数 值
参 数 , 在 路 径
扩 展 之 前 将 添
加 一 个 星 号 。
glob-list-expansions (C-x
g) 显 示 glob-expand-word 可
能 产 生 的 扩 展
的 列 表 , 重 绘
当 前 行 。 如 果
给 出 一 个 数 值
参 数 , 在 路 径
扩 展 之 前 将 添
加 一 个 星 号 。
dump-functions 向 readline 输 出
流 打 印 所 有 的
函 数 和 它 们 的
按 键 关 联 。 如
果 给 出 一 个 数
值 参 数 , 输 出
将 被 格 式 化 ,
可 以 用 作 inputrc 文
件 一 部 分 。
dump-variables 向 readline 输 出
流 打 印 所 有 可
设 置 的 readline 函 数
。 如 果 给 出 一
个 数 值 参 数 ,
输 出 将 被 格 式
化 , 可 以 用 作
inputrc 文 件 一 部 分
。
dump-macros 向 readline 输 出 流
打 印 所 有 关 联
到 宏 的 readline 按 键
序 列 以 及 它 们
输 出 的 字 符 串
。 如 果 给 出 一
个 数 值 参 数 ,
输 出 将 被 格 式
化 , 可 以 用 作
inputrc 文 件 一 部 分
。
display-shell-version (C-x C-v) 显 示
当 前 bash 实 例 的
版 本 信 息 。
Programmable
Completion 可 编 程 补 全
当 试 图 对 一 个
命 令 的 参 数 进
行 词 的 补 全 时
, 如 果 已 经 使
用 内 建 命 令 complete
定 义 了 这 个 命
令 的 补 全 规 则 (
compspec), 将 启 动 可
编 程 补 全 功 能
(参 见 下 面 的
shell 内 建 命 令 (SHELL
BUILTIN COMMANDS) 章 节 )。
首 先 , 命 令 名
被 确 认 。 如 果
针 对 这 个 命 令
有 补 全 规 则 的
定 义 , 那 么 将
使 用 规 则 来 产
生 可 能 的 词 的
补 全 的 列 表 。
如 果 命 令 词 是
一 个 路 径 全 名
, 将 首 先 搜 索
针 对 这 个 路 径
全 名 的 规 则 。
如 果 针 对 这 个
路 径 全 名 没 有
找 到 规 则 , 将
尝 试 查 找 针 对
最 后 一 个 斜 杠
后 面 的 部 分 的
规 则 。 一 旦 找
到 了 一 个 规 则
, 它 将 用 作 产
生 匹 配 的 词 。
如 果 没 有 找 到
, 将 进 行 上 面
Completing 中 描 述 的
bash 默 认 的 补 全
。 首 先 , 将 执
行 规 则 指 定 的
动 作 。 只 有 以
被 补 全 的 词 开
始 的 匹 配 词 才
会 被 返 回 。 当
在 文 件 或 目 录
名 补 全 中 使 用
-f 或 -d 选 项 时
, shell 变 量
FIGNORE 将 用 于
对 匹 配 进 行 过
滤 。 接 下 来 ,
将 产 生 所 有 由
-G 选 项 给 出 的
文 件 名 扩 展 模
式 指 定 的 补 全
。 模 式 产 生 的
词 不 必 匹 配 要
补 全 的 词 。 shell 变
量 GLOBIGNORE 不 会
用 于 过 滤 匹 配
结 果 , 但 是 变
量 FIGNORE 会 被
使 用 。 接 下 来
, 将 考 虑 -W 选
项 的 参 数 指 定
的 字 符 串 。 这
个 字 符 串 首 先
被 划 分 , 用 特
殊 变 量 IFS
中 的 字 符 作 为
分 隔 符 。 shell 引 用
被 当 作 一 个 词
。 接 下 来 , 每
个 词 被 扩 展 ,
使 用 上 面
EXPANSION 中 描 述
的 brace expansion, tilde expansion, parameter
和 variable expansion, command substitution,
arithmetic expansion, 以 及 pathname expansion
规 则 处 理 。 对
于 结 果 , 再 使
用 上 面 Word Splitting 中
描 述 的 规 则 划
分 成 词 。 扩 展
的 结 果 与 要 补
全 的 词 进 行 前
部 一 致 的 比 较
, 匹 配 的 词 成
为 可 能 的 补 全
。 在 这 些 匹 配
被 产 生 后 , 任
何 由 -F 和 -C 选
项 指 定 的 shell 函 数
和 命 令 将 被 执
行 。 当 命 令 或
函 数 被 执 行 时
, 变 量 COMP_LINE
和 COMP_POINT 被 赋
值 , 使 用 上 面
Shell Variables 中 的 规 则
。 如 果 要 执 行 shell
函 数 , 还 将 设
置 变 量 COMP_WORDS
和 COMP_CWORD 当 函
数 或 命 令 被 执
行 时 , 第 一 个
参 数 是 等 待 参
数 被 补 全 的 命
令 的 名 称 , 第
二 个 参 数 是 要
补 全 的 词 , 第
三 个 参 数 是 当
前 命 令 行 中 ,
要 补 全 的 词 前
面 的 词 。 对 要
补 全 的 词 产 生
的 补 全 不 会 进
行 任 何 过 滤 ;
函 数 或 命 令 在
产 生 匹 配 时 有
完 全 的 自 由 。
任 何 -F 指 定 的
函 数 将 被 首 先
执 行 。 函 数 可
以 使 用 任 何 shell 功
能 , 包 含 内 建
命 令 compgen, 来 产
生 匹 配 。 它 必
须 将 可 能 的 补
全 放 到 数 组 变
量 COMPREPLY 中 。
接 下 来 , 任 何
-C 选 项 指 定 的
命 令 将 被 执 行
, 其 执 行 环 境
与 命 令 替 换 的
环 境 相 同 。 它
应 当 向 标 准 输
出 打 印 一 个 补
全 的 列 表 , 每
行 一 个 。 反 斜
杠 可 以 用 来 转
义 一 个 新 行 符
, 如 果 需 要 的
话 。 所 有 可 能
的 补 全 都 产 生
之 后 , 将 对 列
表 进 行 -X 选 项
指 定 的 任 何 过
滤 。 过 滤 器 是
一 个 模 式 , 和
路 径 名 扩 展 中
的 一 样 ; 模 式
中 的 & 替 换 为
要 补 全 的 词 。
字 面 上 的 & 可
以 用 反 斜 杠 转
义 ; 反 斜 杠 在
进 行 匹 配 时 被
删 除 。 任 何 匹
配 这 个 模 式 的
补 全 将 从 列 表
中 删 除 。 前 导
的 ! 将 使 模 式
含 义 相 反 ; 这
种 情 况 下 , 任
何 不 匹 配 这 个
模 式 的 补 全 将
被 删 除 。 最 后
, B-P 和 -S 指 定 的
任 何 前 缀 和 后
缀 被 添 加 到 补
全 列 表 的 每 个
成 员 后 面 , 结
果 返 回 给 readline 补
全 代 码 , 作 为
可 能 的 补 全 列
表 。 如 果 先 前
执 行 的 动 作 没
有 产 生 任 何 匹
配 , 并 且 在 定
义 compspec 规 则 时 ,
为 complete 命 令 提 供
了 -o dirname 选 项 ,
将 尝 试 目 录 名
补 全 。 默 认 情
况 下 , 如 果 找
到 了 一 个 规 则
, 它 产 生 的 任
何 东 西 都 被 返
回 给 补 全 代 码
, 作 为 可 能 的
补 全 的 全 集 。
不 再 尝 试 默 认
的 bash 补 全 , readline
默 认 的 文 件 名
补 全 也 会 禁 止
。 如 果 定 义 规
则 时 , 为 complete 命
令 提 供 了 -o default
选 项 , 在 规 则
没 有 产 生 匹 配
时 将 进 行 readline 默
认 的 补 全 处 理
。 当 一 个 规 则
指 出 期 望 目 录
名 补 全 时 , 可
编 程 补 全 函 数
强 制 readline 在 补 全
的 名 称 后 面 添
加 一 个 斜 杠 ,
如 果 它 是 一 个
到 目 录 的 符 号
连 接 。 然 后 还
要 经 过 readline 变 量
mark-directories 的 值 处 理
, 不 管 readline 变 量
mark-symlinked-directories 的 值 是
什 么 。
当 启 用
内 建 命 令 set 的
-o history 选 项 时 , shell
允 许 访 问 command
history, 以 前 输 入
的 命 令 的 列 表
。 HISTSIZE 的 值 用 作
命 令 列 表 中 保
存 的 命 令 数 量
。 过 去 HISTSIZE
个 (默 认 为 500) 命 令
将 被 保 存 。 shell 将
每 条 命 令 在 进
行 参 数 和 变 量
扩 展 之 前 保 存
到 历 史 列 表 中
(参 见 上 面 的
EXPANSION 段 落 ),
但 是 是 在 历 史
扩 展 进 行 之 后
, 并 且 要 经 过 shell
变 量 HISTIGNORE 和
HISTCONTROL 处 理 。
在 启 动 时 , 历
史 根 据 以 变 量
HISTFILE 的 值 为
名 的 文 件 (默 认
是 ~/.bash_history) 进 行 初
始 化 。 如 果 需
要 的 话 , 以
HISTFILE 为 名 的
文 件 将 被 截 断
, 来 包 含 不 超
过 变 量
HISTFILESIZE 的 值
指 定 的 行 数 。
当 交 互 shell 退 出 时
, 最 后 $HISTSIZE
行 被 从 历 史 列
表 中 复 制 到
$HISTFILE 文 件 中
。 如 果 启 用 了 shell
选 项 histappend (参 见
下 面 的 shell 内 建
命 令 (SHELL BUILTIN COMMANDS)
章 节 中 对 内 建
命 令 shopt 的 描 述
), 这 些 行 被 追
加 到 历 史 文 件
中 , 否 则 历 史
文 件 被 覆 盖 。
如 果 HISTFILE 被
取 消 定 义 , 或
者 如 果 历 史 文
件 不 可 写 , 历
史 将 不 会 保 存
。 保 存 历 史 之
后 , 历 史 文 件
被 截 断 , 以 包
含 不 超 过
HISTFILESIZE 行 。
如 果 HISTFILESIZE
被 取 消 定 义 ,
不 会 进 行 截 断
操 作 。 内 建 命
令 fc (参 见 下 面
的 shell 内 建 命 令
(SHELL BUILTIN COMMANDS) 章 节 )
可 以 用 来 列 出
或 修 改 并 重 新
执 行 历 史 列 表
中 的 一 部 分 。
内 建 命 令 history 可
以 用 来 显 示 或
修 改 历 史 列 表
, 操 作 历 史 文
件 。 当 使 用 命
令 行 编 辑 时 ,
每 种 编 辑 模 式
都 有 搜 索 命 令
, 提 供 对 历 史
列 表 的 访 问 。
shell 允
许 控 制 哪 些 命
令 被 保 存 到 历
史 列 表 中 。 可
以 设 置 HISTCONTROL
和 HISTIGNORE 变 量
, 来 使 得 shell 只 保
存 输 入 命 令 的
一 个 子 集 。 shell 选
项 cmdhist 如 果 被 启
用 , 将 使 得 shell 将
多 行 的 命 令 的
每 一 行 保 存 到
同 一 个 历 史 条
目 中 , 在 需 要
的 地 方 添 加 分
号 来 保 证 语 义
的 正 确 性 。 shell 选
项 lithist 使 得 shell 保
存 命 令 时 , 保
留 嵌 入 的 新 行
而 不 是 用 分 号
代 替 。 参 见 下
面 shell 内 建 命 令
(SHELL BUILTIN COMMANDS) 中 ,
内 建 命 令 shopt 的
描 述 , 有 关 设
置 和 取 消 shell 选 项
的 信 息 。
shell 支
持 历 史 扩 展 机
制 , 类 似 于 csh
中 历 史 扩 展 。
这 一 节 描 述 了
可 用 的 语 法 特
征 。 在 交 互 的 shell
中 这 一 机 制 被
默 认 启 用 , 可
以 使 用 内 建 命
令 set 的 -H 选 项
来 禁 用 它 (参 见
下 面 的 shell 内 建
命 令 (SHELL BUILTIN COMMANDS)
章 节 )。 非 交 互
的 shell 默 认 不 进 行
历 史 扩 展 。 历
史 扩 展 将 历 史
列 表 中 的 词 引
入 输 入 流 中 ,
使 得 可 以 方 便
地 重 复 已 执 行
命 令 , 在 当 前
输 入 行 中 为 前
一 个 命 令 插 入
新 的 参 数 , 或
者 快 速 修 正 前
一 个 命 令 中 的
错 误 。 历 史 扩
展 在 读 入 一 整
行 后 , 在 shell 将 它
拆 分 成 词 之 前
立 即 进 行 。 它
由 两 部 分 组 成
。 首 先 是 判 断
替 换 中 使 用 历
史 列 表 中 哪 一
行 。 其 次 是 选
择 那 一 行 中 要
包 含 到 当 前 行
中 的 部 分 。 从
历 史 中 选 择 的
行 称 为 event, 从
那 一 行 中 选 择
的 部 分 是 words。
可 以 用 多 种 多
样 的 modifiers 来 操
纵 所 选 的 词 。
在 读 入 输 入 时
, 行 被 按 照 同
样 方 式 分 解 成
词 , 因 此 多 个
以 metacharacter 分 隔 的
词 , 如 果 被 引
号 包 含 , 就 被
当 成 一 个 词 。
历 史 扩 展 由 历
史 扩 展 字 符 引
入 , 默 认 是
!。 只 有 反 斜
杠 (\) 和 单 引 号
可 以 引 用 历 史
扩 展 字 符 。 内
建 命 令 shopt 可 以
设 定 多 个 选 项
值 , 来 调 整 历
史 扩 展 的 行 为
。 如 果 shell 选 项
histverify 被 启 用 (参
见 内 建 命 令 shopt
的 描 述 ), 并 且
正 在 使 用 readline,
历 史 替 换 不 会
被 立 即 传 给 shell 解
释 器 。 与 此 相
对 , 扩 展 后 的
行 被 重 新 载 入
readline 编 辑 缓 冲 区
, 进 行 进 一 步
的 修 改 。 如 果
正 在 使 用 readline,
并 且 启 用 了 shell 选
项 histreedit, 失 败
的 历 史 替 换 将
被 重 新 载 入 到
readline 编 辑 缓 冲 区
, 进 行 改 正 。
内 建 命 令 history 的
-p 选 项 可 以 用
来 在 执 行 之 前
查 看 历 史 扩 展
将 如 何 进 行 。
内 建 命 令 history 的
-s 选 项 可 以 用
来 在 历 史 列 表
末 尾 添 加 命 令
, 而 不 真 正 执
行 它 们 , 从 而
在 接 下 来 的 调
用 中 可 以 使 用
它 们 。
shell 允
许 控 制 历 史 扩
展 机 制 使 用 的
多 种 字 符 (参 见
上 面 的 Shell Variables 中
histchars 的 描 述 )。
Event
Designators 事 件 指 示 器
(event designator) 是 一 个 对
历 史 列 表 中 某
个 命 令 行 条 目
的 引 用 。
|
! 开 始 一 个 命
令 替 换 , 除 非
后 面 跟 随 的 是 |
|
blank, newline, = 或 是 (. |
|
!n 引 用 命 令
行 |
|
|
n.
|
!-n 引
用 当 前 命 令 行
减 去 |
n. |
|
|
!! 引 用 上 一 条
命 令 。 这 是 |
’!-1’ 的 同 义 词
。 |
|
!string 引
用 最 近 的 以 string
开 始 的 命 令 。
!?string[?] 引 用 最
近 的 包 含 string 的
命 令 。 尾 部 的
? 可 以 被 忽 略
, 如 果 string 之 后
紧 接 着 一 个 新
行 符 。
^ string1 ^
string2 ^ 快 速
替 换 。 重 复 上
一 条 命 令 , 将
string1 替 换 为 string2.
与
’’!!:s/string1/string2/’’
等 价 (参 见 下 面
的 修 饰 符
(Modifiers))。
|
!# 到 此 为 止 输
入 的 整 个 命 令
行 。 |
|
Word
Designators 词 指 示 器 (word
designator) 用 于 从 event 中
选 择 期 望 的 词
。 : 分 隔 event 规 则
与 word 指 示 器 。 它
可 以 忽 略 , 如
果 词 指 示 器 以
^, $, *, -, 或 %
开 始 。 词 被 从
行 首 开 始 编 号
, 第 一 个 词 被
表 示 为 0。 插 入
当 前 行 中 的 词
以 单 个 空 格 分
隔 。
0 (zero) 第 0 个 词 。 对
shell 来 将 , 这 是 命
令 名 。
|
n 第 |
n 个 词 。
个 参 数
。 也 就 是 , 第 1
个 词 。
$ 最 后 的 参 数 。
% 最 近 一 次 搜 索
’?string?’ 匹 配 的
词 。
x-y 一 组 词
;
’-y’
是 ’0-y’ 的 简 写
。
|
* 所 有
词 , 除 了 第 |
|
0 个 。 这
是 ’1-$’ 的 同 义
词 。 如 果 event 中 只
有 一 个 |
词 , 使
用 * 也 不 是 错
误 ; 这 种 情 况
下 将 返 回 空 字
符 串 。
|
x* |
|
x-$ 的 简
写 。 |
|
|
x- |
|
-$ 的 简 写 , 就
像 x* 一 样 , 但
是 忽 略 最 后 一
个 词 。 |
|
如 果 给
出 了 一 个 word 指 示
器 , 没 有 给 出 event
规 则 , 前 一 个
命 令 将 用 作 event。
修 饰 符 (Modifiers) 可
选 的 word 指 示 器 之
后 , 可 以 出 现
一 个 或 多 个 下
述 modifiers 的 序 列 ,
每 一 个 都 前 缀
有 ’:’。
|
h 删 除
文 件 名 组 成 的
尾 部 , 只 保 留
头 部 。 |
|
|
t 删 除 文 件 名
组 成 中 前 面 的
成 分 , 保 留 尾
部 。 |
|
|
r 删 除 |
|
.xxx 形 式
中 尾 部 的 后 缀
成 分 , 保 留 基
本 名 称 部 分 。
|
e 删 除
所 有 内 容 , 保
留 尾 部 的 后 缀
。 |
|
|
p 打 印 新 的 命
令 , 但 是 不 执
行 它 。 |
|
|
q 引 用 替 换 所
得 的 词 , 使 它
不 再 进 行 替 换
。 |
|
|
x 引 用 替 换 所
得 的 词 , 类 似
与 |
|
q, 但 是
会 根 据 blanks, 空
白 和 新 行 符 分
解 为 词 。
s/old/new/ 将 事
件 行 中 出 现 的
第 一 个 old 替 换
为 new。 任 何 分
隔 符 都 可 以 用
来 代 替 /, 最 后
一 个 分 隔 符 是
可 选 的 , 如 果
它 是 事 件 行 的
最 后 一 个 字 符
。 old 和 new 中 的
分 隔 符 可 以 用
一 个 反 斜 杠 来
引 用 。 如 果 & 出
现 在 new 中 , 它
将 替 换 为 old。
可 以 用 单 个 反
斜 杠 来 引 用 &。
如 果 old 为 空 ,
它 将 设 置 为 最
后 替 换 的 old,
或 者 , 如 果 前
面 没 有 发 生 过
历 史 替 换 , 就
是 !?string[?] 搜 索
中 的 最 后 一 个
string。
|
& 重 复 上 一
次 替 换 。 |
|
|
|
g 使 得 改 变 被
整 个 事 件 行 所
接 受 。 用 于 与 |
|
’:s’ 或
’:&’ 结 合 (例 |
如 ,
’:gs/old/new/’)。
如 果 与 ’:s’ 结
合 使 用 , 任 何
分 隔 符 都 可 以
用 来 代 替 /, 最
后 一 个 分 隔 符
是 可 选 的 , 如
果 它 是 事 件 行
的 最 后 一 个 字
符 。
除 非 另
外 说 明 , 这 一
章 介 绍 的 内 建
命 令 如 果 接 受
- 引 导 的 选 项
, 那 么 它 也 接
受 -- 作 为 参 数
, 来 指 示 选 项
的 结 束 :
[arguments] 没
有 效 果 ; 这 个
命 令 除 了 扩 展
arguments 并 且 作 任
何 指 定 的 重 定
向 之 外 , 不 做
任 何 事 。 退 出
时 返 回 0。
. filename [arguments]
source filename [arguments] 读
取 并 在 当 前 shell 环
境 中 执 行 filename 中
的 命 令 , 返 回
filename 中 最 后 一 个
命 令 的 返 回 状
态 。 如 果 filename 中
不 包 含 斜 杠 (slash),
系 统 将 在
PATH 中 查 找
包 含 filename 的 目 录
。 在 PATH 中
搜 索 的 文 件 不
必 是 可 执 行 的
。 如 果 bash 不 是
运 行 于 posix mode,
当 PATH 中 找
不 到 文 件 时 会
在 当 前 目 录 搜
索 。 如 果 shopt 内
建 命 令 的 sourcepath
选 项 被 关 闭 ,
PATH 将 不 会
被 搜 索 。 如 果
有 任 何 arguments ,
它 们 成 为 filename 的
位 置 参 数 (positional
parameters), 否 则 位 置
参 数 不 发 生 变
化 。 返 回 状 态
是 脚 本 中 最 后
一 个 命 令 退 出
时 的 状 态 。 没
有 执 行 命 令 则
返 回 0, 没 有 找
到 或 不 能 读 取
filename 时 返 回 false。
alias [-p] [name[=value] ...]
Alias 不 带
参 数 或 者 带 -p
参 数 运 行 时 将
在 标 准 输 出 以
这 样 的 格 式 alias
name=value 给 出 别 名
列 表 。 如 果 有
参 数 , 将 创 建
提 供 了 value 的 name
的 别 名 。 value 中
尾 部 的 空 格 使
得 别 名 被 扩 展
时 , 下 一 个 词
做 别 名 替 换 。
对 于 参 数 列 表
中 的 每 一 个
name, 如 果 value 没
有 给 出 , 这 个
别 名 的 名 称 和
值 会 被 打 印 出
来 。 Alias 返 回 true
除 非 name 没 有 定
义 为 别 名 。
bg [jobspec]
使 挂 起 的 程 序
jobspec 在 后 台 继 续
执 行 , 就 好 像
它 是 用 & 启 动
的 一 样 。 如 果
没 有 指 定 jobspec,
shell 意 义 上 的 current job
当 前 作 业 将 被
使 用 。 bg jobspec 返
回 0, 除 非 当 前
禁 止 了 作 业 控
制 , 或 者 在 允
许 作 业 控 制 ,
但 是 没 有 找 到
jobspec , 或 者 它 不
是 在 作 业 控 制
下 启 动 的 时 候
。
bind [-m keymap] [-lpsvPSV]
bind [-m keymap] [-q
function] [-u function] [-r
keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x
keyseq:shell-command
bind [-m keymap]
keyseq:function-name
bind readline-command 显 示 当
前 readline 键 和 功 能
的 , 将 一 个 按
键 序 列 和 一 个
readline 功 能 或 宏 进
行 关 联 , 或 者
设 置 一 个 readline 变
量 。 每 一 个 在
非 选 项 的 参 数
都 是 一 个 命 令
, 好 像 它 是 在
.inputrc 中 出 现 的 一
样 。 但 是 每 个
关 联 或 者 命 令
必 须 作 为 单 独
的 参 数 传 递 ;
也 就 是 这 样
’"\C-x\C-r":
re-read-init-file’。 如 果 有
参 数 , 它 们 有
如 下 的 意 义 :
-m keymap
使 用 keymap 作 为 随
后 的 关 联 的 keymap。
可 选 的 keymap 名 称
是 emacs, emacs-standard, emacs-meta, emacs-ctlx,
vi, vi-move, vi-command, 还 有
vi-insert。 vi 和
vi-command 等 价 ; emacs 和
emacs-standard 等 价 。
|
-l 列 出 所 有
的 |
readline 功 能 。
方 式 显
示 readline 功 能 名 称
和 关 联
-P 列 出 当 前 readline
功 能 名 称 和 关
联 。
的 方 式
显 示 readline 变 量 名
称 和 值
-V 列 出 当 前 readline
变 量 和 值 。
的 方 式
显 示 readline 键 序 列
和 对 应 的 宏
-S 显 示 readline 宏 对
应 的 键 序 列 和
他 们 输 出 的 字
符 串
-f filename
从 filename 中 读 取 键
序 列
-q function 查 询 那 些
键 将 执 行 function。
-u function 取 消 所 有
关 联 到 function 的 键
。
-r keyseq 取 消 当 前
任 何 keyseq 的 关 联
。
-x keyseq:shell-command 使
shell-command 在 keyseq 按
下 时 被 执 行 。
返 回 值 是 0, 除
非 给 出 了 一 个
不 能 识 别 的 选
项 或 是 产 生 了
一 个 错 误 。
break [n]
从 一 个 for, while,
until, 或 者 select 循
环 退 出 。 如 果
指 定 了 n , 就
跳 出 n 层 循 环
。 n 必 须 ≥ 1。 如
果 n 比 当 前 循
环 层 数 还 要 大
, 将 跳 出 所 有
循 环 。 返 回 值
是 0, 除 非 执 行
break 的 时 候 shell 不
是 在 执 行 一 个
循 环 。
builtin shell-builtin [arguments] 执
行 指 定 的 shell 内 建
命 令 , 传 递
arguments , 返 回 命
令 的 返 回 值 。
这 在 定 义 了 一
个 和 shell 内 建 命 令
同 名 的 函 数 时
很 有 用 , 在 那
个 函 数 中 使 用
它 来 执 行 相 应
的 功 能 。 cd 命
令 常 以 这 种 方
式 重 新 定 义 。
返 回 状 态 是 false,
如 果 指 定 的
shell-builtin 并 不 是 一
个 shell 内 建 命 令 。
cd [-L|-P] [dir] 改 变
当 前 路 径 到
dir。 这 个 变 量
的 默 认 值 是
HOME 目 录 。
环 境 变 量
CDPATH 定 义 了
包 含 dir 的 搜 索
路 径 。 在
CDPATH 中 可 选
的 路 径 名 以 冒
号 (:) 分 隔 。
CDPATH 中 的 空
路 径 名 与 当 前
路 径 相 同 , 就
是 ’’.’’. 如
果 目 录 名 以 斜
杠 (/,slash) 起 始 , 那
么 CDPATH 不 会
被 使 用 。 -P 选
项 是 说 使 用 物
理 路 径 结 构 而
不 是 跟 随 符 号
链 接 , (参 见 set
命 令 中 的 -P 选
项 ); -L 选 项 强 制
跟 随 符 号 链 接
。 另 外 , 选 项
- 与 $OLDPWD 是
相 同 的 。 返 回
值 是 true , 如 果 成
功 地 改 变 了 目
录 ; 否 则 是 false。
command [-pVv] command [arg ...]
运 行 command , 使 用
args 作 为 参 数 ,
禁 止 通 常 的 查
找 shell 函 数 的 过 程
。 只 有 内 建 命
令 或 者 PATH
中 包 含 的 命 令
可 以 执 行 。 如
果 给 出 -p 参 数
, command 的 查 找 是
以 PATH 的 默 认 值
进 行 的 。 这 样
可 以 保 证 找 到
所 有 的 标 准 工
具 。 如 果 给 出
-V 或 者 -v 选 项
, 关 于 command 的 说
明 将 被 打 印 出
来 。 -v 选 项 使
得 表 述 这 个 命
令 的 词 , 或 者
要 执 行 command 需 要
执 行 的 文 件 显
示 出 来 ; -V 选
项 给 出 更 详 细
的 描 述 。 如 果
给 出 -V 或 者 -v
选 项 , 退 出 状
态 在 找 到 了 command
的 情 况 下 0, 没
找 到 就 是 1。 如
果 没 有 提 供 选
项 , 并 且 产 生
了 错 误 或 者 command
没 有 找 到 , 退
出 状 态 就 是 127。
否 则 , command 内 建
命 令 的 退 出 状
态 是 command 的 退 出
状 态 。
compgen [option] [word] 根 据
option 为 word 产 生
可 能 的 补 全 。
option 是 内 建 命 令
complete 接 受 的 任 何
选 项 , 除 了 -p
和 -r, 将 匹 配
结 果 写 到 标 准
输 出 。 当 使 用
-F 或 -C 选 项 时
, 可 编 程 补 全
功 能 所 设 置 的
多 数 shell 变 量 如 果
存 在 , 其 值 将
不 再 有 用 。 产
生 的 匹 配 与 可
编 程 补 全 代 码
根 据 补 全 规 则
加 上 相 同 的 标
志 直 接 产 生 的
结 果 相 同 。 如
果 指 定 了 word,
只 有 匹 配 word 的
补 全 结 果 将 被
显 示 出 来 。 返
回 值 为 真 , 除
非 提 供 了 非 法
的 选 项 , 或 者
没 有 产 生 匹 配
。
complete [-abcdefgjksuv] [-o
comp-option] [-A action] [-G
globpat] [-W
wordlist] [-P prefix] [-S
suffix]
[-X filterpat]
[-F function] [-C command]
name [name ...]
complete -pr
[name ...] 指 定 每 个
name 的 参 数 应 当
如 何 被 补 全 。
如 果 给 出 了 -p
选 项 , 或 者 没
有 选 项 给 出 ,
现 有 的 补 全 规
则 将 被 显 示 出
来 , 以 一 种 可
以 重 用 为 输 入
的 格 式 显 示 。
-r 选 项 将 一 个
针 对 每 个 name 的
补 全 规 则 删 除
。 或 者 , 如 果
没 有 给 出 name,
将 删 除 所 有 补
全 规 则 。 尝 试
词 的 补 全 时 ,
应 用 这 些 补 全
规 则 的 过 程 在
上 面 Programmable Completion(可
编 程 补 全 ) 中 详
述 。 其 他 选 项
, 如 果 给 出 的
话 , 具 有 下 列
意 义 。 -G, -W, 和
-X 选 项 的 参 数
(如 果 需 要 的 话
, 还 包 括 -P 和
-S 选 项 ) 应 当 被
引 用 , 避 免 在
执 行 内 建 命 令
complete 之 前 被 扩 展
。
-o
comp-option
comp-option 控
制 着 compspec 除 了 简
单 地 产 生 补 全
之 外 的 多 种 行
为 。 comp-option 可 以
是 如 下 之 一 :
|
default 使 用 |
|
readline 的 默 认 文 件
名 补 全 , 如 果
compspec 没 |
有 得 到
匹 配 。
dirnames 进
行 目 录 名 补 全
, 如 果 compspec 没 有
得 到 匹 配 。
filenames 告 诉 readline, compspec
产 生 了 文 件 名
, 使 它 可 以 进
行 任 何 文 件 名
专 用 的 处 理 (例
如 , 给 目 录 名
加 上 斜 杠 或 消
除 尾 部 空 白 )。
主 要 用 于 shell 函 数
。
|
nospace 告 诉 |
|
readline 不 要 向 补 全
的 词 在 行 的 最
后 添 加 一 个 空 |
格 (这 是
默 认 行 为 )。
-A action
action 可 以
是 下 列 之 一 ,
来 产 生 一 系 列
可 能 的 补 全 结
果 :
|
alias 起 别 名 。
也 可 以 用 |
|
-a 指 定 。 |
|
arrayvar 数
组 变 量 名 。
|
binding |
|
Readline 按 键 关 联
。 |
|
builtin |
|
shell 内 建 命 令 的
名 称 。 也 可 以
用 -b 指 定 。
命 令 名
。 也 可 以 用 -c
指 定 。
directory 目
录 名 。 也 可 以
用 -d 指 定 。
disabled 被 禁 用 的 内
建 命 令 名 称 。
|
enabled 启 用 的 内
建 命 令 名 称 。 |
|
|
export 被 导 出 的 |
|
shell 变 量
名 称 。 也 可 以
用 -e 指 定 。
|
file 文 件
名 。 也 可 以 用 |
|
-f 指 定
。 |
|
function
shell 函 数
的 名 称 。
|
group 组 名 。 也
可 以 用 |
|
-g 指 定 。 |
|
helptopic 内
建 命 令 help 接 受
的 帮 助 主 题 。
hostname 主 机 名 , 从
环 境 变 量
HOSTFILE 指 定 的
文 件 中 得 到 。
|
job 作 业 名 , 如
果 作 业 控 制 被
激 活 的 话 。 也
可 以 用
-j 指 |
定 。
|
keyword |
|
shell 保 留 字
。 也 可 以 用 -k
指 定 。 |
|
|
running |
|
|
|
正 在 运
行 的 作 业 名 ,
如 果 作 业 控 制
被 激 活 的 话 。
|
|
|
|
|
|
service 服 务 名 。
也 可 以 用 |
|
-s 指 定 。 |
|
|
setopt 内 建 命 令 |
|
|
|
set 的 -o
选 项 的 有 效 参
数 。
|
shopt 内 建
命 令 |
shopt 接 受
的 shell 选 项 名 。 |
|
signal 信 号 名 。 |
|
|
stopped 停 止 的 作
业 |
|
名 , 如
果 作 业 控 制 被
激 活 的 话 。
|
|
|
|
|
|
user 用 户 名 。 也
可 以 用 |
|
-u 指 定 。 |
|
variable
shell 变 量
的 名 称 。 也 可
以 用 -v 指 定 。
-G globpat
文 件 名 扩 展 模
式 globpat 被 扩 展 ,
产 生 可 能 的 补
全 。
-W wordlist
wordlist
被 使 用 IFS
特 殊 变 量 中 的
字 符 作 为 定 界
符 来 拆 分 , 每
个 结 果 的 词 被
扩 展 。 可 能 的
补 全 是 结 果 列
表 中 匹 配 要 补
全 的 词 的 那 一
些 。
-C command
command 将
在 一 个 子 shell 环 境
中 执 行 , 它 的
结 果 用 作 可 能
的 补 全 。
-F function
shell 函 数
function 将 在 当 前 shell
环 境 中 执 行 。
当 它 结 束 时 ,
可 能 的 补 全 可
以 从 数 组 元 素
COMPREPLY 中 得 到
。
-X filterpat
filterpat 是
一 个 模 式 , 用
于 文 件 名 扩 展
。 所 有 前 面 的
选 项 和 参 数 产
生 的 可 能 的 补
全 都 要 经 过 这
一 步 处 理 , 每
一 个 匹 配 filterpat
的 补 全 都 被 从
列 表 中 删 除 。
为 filterpat 加 上 前
导 ! 使 模 式 意
义 相 反 ; 这 种
情 况 下 , 所 有
不 匹 配 filterpat 的
模 式 被 删 除 。
-P prefix
在 所 有 其 他 选
项 都 处 理 过 之
后 , prefix 被 加 到
每 个 可 能 的 补
全 前 面 。
-S suffix 在 所 有 其
他 选 项 都 处 理
过 之 后 , suffix 被
加 到 每 个 可 能
的 补 全 后 面 。
返 回 值 为 真 ,
除 非 给 出 了 非
法 的 选 项 , 给
出 除 -p 和 -r 之
外 的 某 个 选 项
时 没 有 给 出 name
参 数 , 试 图 删
除 一 条 name 的 补
全 规 则 但 是 规
则 不 存 在 , 或
者 添 加 补 全 规
则 时 出 错 。
continue [n]
复 位 到 外 层 for,
while, until, 或 select 循
环 的 下 一 次 开
始 。 如 果 指 定
了 n, 复 位 到
向 外 第 n 层 循
环 的 开 始 。 n
必 须 ≥ 1。 如 果 n
比 外 部 循 环 的
层 数 要 多 , 将
复 位 到 最 外 层
的 循 环
(’’top-level’’ loop, 顶
层 循 环 )。 返 回
值 是 0, 除 非 执
行 continue 时 , shell 不
是 在 循 环 之 中
。
declare [-afFirtx] [-p]
[name[=value]]
typeset [-afFirtx] [-p]
[name[=value]] 声 明 变
量 且 /或 设 置 它
们 的 属 性 。 如
果 没 有 给 出 name
则 显 示 变 量 的
值 。 选 项 -p 将
显 示 每 个 名 称
name 的 属 性 和 值
。 当 使 用 -p 时
, 其 他 选 项 被
忽 略 。 选 项 -F
禁 止 显 示 函 数
定 义 ; 只 有 函
数 名 和 属 性 会
被 显 示 。 -F 选
项 暗 含 -f. 下 列
选 项 可 用 来 限
制 只 输 出 具 有
指 定 属 性 的 变
量 , 或 者 为 变
量 设 置 属 性 :
|
-a 每 个 |
name 都 是 数 组 变
量 (参 见 上 面 的
Arrays 段 落 )。 |
|
-f 只 使 用 |
|
函 数 名
。
|
-i 变 量 被 当 作
一 个 整 数 ; 当
变 量 被 赋 值 时
将 进 行 算 术 运
算
(参 见 算 |
术 求
值 (ARITHMETIC EVALUATION) 章
节 )。
|
-r 使 得 |
|
name 只 读
。 这 些 名 称 不
能 再 被 后 续 的
赋 值 语 句 赋 值
或 取 消 |
定 义 。
|
-t 设 置
每 个 |
|
name 的
trace(跟 踪 ) 属 性 。
被 跟 踪 的 函 数
继 承 了 调 |
用 者 shell
的 DEBUG 陷 阱 。 trace
属 性 对 变 量 没
有 特 殊 意 义 。
|
-x 标 记 |
|
name 为 可
以 通 过 环 境 导
出 给 后 续 命 令
。 |
|
使 用
’+’ 代 替 ’-’ 将
关 闭 属 性 , 特
殊 情 况 是 +a 不
能 用 于 销 毁 一
个 数 组 变 量 。
当 用 于 函 数 中
时 , 它 使 得 每
个 name 成 为 局 部
的 , 就 像 使 用
了 local 命 令 。 返
回 值 是 0, 除 非
遇 到 了 非 法 的
选 项 , 试 图 使
用 ’’-f foo=bar’’ 定
义 函 数 , 试 图
向 只 读 变 量 赋
值 , 试 图 向 数
组 变 量 赋 值 但
没 有 使 用 复 合
的 赋 值 语 法 (参
见 上 面 的 Arrays 段
落 ), name 之 一 不
是 有 效 的 shell 变 量
名 , 试 图 将 数
组 变 量 的 数 组
状 态 关 闭 , 或
者 是 试 图 使 用
-f 显 示 一 个 不
存 在 的 函 数 。
dirs [-clpv]
[+n] [-n] 没 有
选 项 时 显 示 当
前 保 存 的 目 录
。 默 认 输 出 为
一 行 , 目 录 名
用 空 格 分 开 。
可 以 使 用 pushd 命
令 将 目 录 添 加
到 列 表 , popd 命
令 将 列 表 中 的
条 目 删 除 。
|
+n 显 示 |
|
dirs 在 不 带 选 项
执 行 时 显 示 的
列 表 的 第 n 个
条 目 , 从 0 |
开 始 自
左 算 起 。
|
-n 显
示 |
|
dirs 在 不
带 选 项 执 行 时
显 示 的 列 表 的
第 n 个 条 目 ,
从 0 |
开 始 自
右 算 起 。
|
-c 删 除
所 有 条 目 , 清
空 目 录 栈 。 |
|
-l 产 生 长 列 表
; 默 认 列 表 格
式 使 用 波 浪 线
来 表 示 个 人 目
录 。 |
|
-p 输 出 目 录 栈
, 一 行 一 个 。 |
|
-v 输 出 目 录 栈
, 一 行 一 个 ,
每 个 条 目 前 面
加 上 它 在 栈 中
的 位 置 索 引 。
返 回 值 是 |
0, 除 非
给 出 了 非 法 的
参 数 , 或 者 n
索 引 超 出 了 目
录 栈 的 范 围 。
disown [-ar]
[-h] [jobspec ...] 没 有 选
项 时 , 每 个 jobspec
被 从 正 在 运 行
的 作 业 表 中 删
除 。 如 果 给 出
了 - 选 项 , 每
个 jobspec 并 不 从 表
中 删 除 , 而 是
被 标 记 , 使 得
在 shell 接 到
SIGHUP 信 号 时
, 不 会 向 作 业
发 出 SIGHUP 信
号 。 如 果 没 有
给 出 jobspec, 也 没
有 给 出 -a 或 者
-r 选 项 , 将 使
用 当 前 作 业 (current
job)。 如 果 没 有
给 出 jobspec, 选 项
-a 意 味 着 删 除
或 标 记 所 有 作
业 ; 选 项 -r 不
带 jobspec 参 数 时 限
制 操 作 只 对 正
在 运 行 的 作 业
进 行 。 返 回 值
是 0, 除 非 jobspec 不
指 定 有 效 的 作
业 。
echo [-neE] [arg ...] 输 出
arg, 以 空 格 分
开 , 最 后 加 一
个 新 行 符 。 返
回 值 总 是 0。 如
果 指 定 了 -n,
将 不 在 尾 部 添
加 新 行 符 。 如
果 给 出 了 -e 选
项 , 将 允 许 解
释 下 列 反 斜 杠
转 义 的 字 符 。
-E 选 项 禁 止 这
些 转 义 字 符 的
解 释 , 即 使 在
默 认 解 释 它 们
的 系 统 中 也 是
如 此 。 shell 选 项
xpg_echo 可 以 用 来 在
运 行 时 判 断 echo
是 否 默 认 展 开
这 些 转 义 字 符
。 echo 不 将 -- 作
为 选 项 的 结 束
。 echo 解 释 下 列
转 义 序 列 :
|
\a |
|
alert (bell) 响 铃 |
|
|
\b |
|
backspace 回 退 |
|
|
\c |
|
suppress trailing newline 删 除 尾
部 新 行 符 |
|
|
\e |
|
an escape character 字 符 Esc |
|
|
\f |
|
form feed 进 纸 |
|
|
\n |
|
new line 新 行 符 |
|
|
\r |
|
carriage return 回 车 |
|
|
\t |
|
horizontal tab 水 平 跳 格 |
|
|
\v |
|
vertical tab 竖 直 跳 格 |
|
|
\\ |
|
backslash 反 斜 杠
一 个 八
比 特 字 符 , 它
的 值 是 八 进 制
值 nnn (零 到 三 个
八 进 制 数 字 )。
一 个 八
比 特 字 符 , 它
的 值 是 八 进 制
值 nnn (一 到 三 个
八 进 制 数 字 )。
一 个 八
比 特 字 符 , 它
的 值 是 十 六 进
制 值 HH (一 到 两
个 十 六 进 制 数
字 )。
enable [-adnps]
[-f filename] [name ...] 允
许 或 禁 止 shell 内 建
命 令 。 禁 止 一
个 内 建 命 令 使
得 磁 盘 上 的 与
内 建 命 令 同 名
的 文 件 得 以 运
行 , 不 必 使 用
它 的 全 路 径 ,
即 使 shell 一 般 在 搜
索 磁 盘 上 的 命
令 之 前 搜 索 内
建 命 令 。 如 果
使 用 了 -n 选 项
, 每 个 name 都 被
禁 止 ; 否 则 ,
name 被 允 许 。 例
如 , 要 使 用
PATH 中 搜 索
到 的 test 命 令 而
不 是 shell 内 建 的 那
一 个 , 可 以 运
行 ’’enable -n test’’.
选 项 -f 意 味 着
从 共 享 库 filename 中
加 载 新 的 内 建
命 令 name, 如 果
系 统 支 持 动 态
加 载 的 话 。 选
项 -d 将 删 除 曾
经 用 -f 加 载 的
内 建 命 令 。 如
果 没 有 给 出 name
参 数 , 或 者 给
出 了 -p 选 项 ,
将 显 示 shell 内 建 命
令 的 列 表 。 如
果 没 有 其 他 选
项 参 数 , 这 个
列 表 只 包 含 所
有 被 允 许 的 shell 内
建 命 令 ; 如 果
给 出 了 -n, 将
只 显 示 被 禁 止
的 内 建 命 令 ;
如 果 给 出 了
-a, 显 示 的 列
表 中 包 含 所 有
内 建 命 令 , 还
有 命 令 是 否 被
允 许 的 指 示 ;
如 果 给 出 了
-s, 输 出 被 限
制 为 POSIX special 内 建
命 令 。 返 回 值
是 0, 除 非 name 不
是 shell 内 建 命 令 ,
或 者 从 共 享 库
中 加 载 新 的 内
建 命 令 时 出 错
。
eval [arg ...]
arg 被 读
取 并 连 结 为 单
一 的 命 令 。 这
个 命 令 然 后 被 shell
读 取 并 执 行 ,
它 的 退 出 状 态
被 作 为 eval 的 值
返 回 。 如 果 没
有 args, 或 仅 仅
包 含 空 参 数 ,
eval 返 回 0。
exec [-cl]
[-a name] [command [arguments]]
如 果 指 定 了
command, 它 将 替 换
shell。 不 会 产 生 新
的 进 程 。 arguments
成 为 command 的 参 数
。 如 果 给 出 了
-l 选 项 , shell 将 在
传 递 给 command 的 第
0 个 参 数 前 面 加
上 一 个 连 字 符
(dash,’-’)。 这 样 做
和 login(1) 相 同 。 选
项 -c 使 得 命 令
command 在 一 个 空 环
境 中 执 行 。 如
果 给 出 了 -a, shell
会 将 name 作 为 第 0
个 参 数 传 递 给
要 执 行 的 命 令
。 如 果 由 于 某
种 原 因 as the zeroth argument to the
executed command. If command 不 能
被 执 行 , 非 交
互 的 shell 将 退 出 ,
除 非 shell 选 项 execfail
被 设 置 为 允 许
, 这 种 情 况 下
它 返 回 失 败 。
如 果 命 令 不 能
执 行 , 交 互 的 shell
返 回 失 败 。 如
果 没 有 指 定 command
任 何 重 定 向 对
当 前 shell 发 生 作 用
, 返 回 值 是 0。
如 果 发 生 重 定
向 错 误 , 返 回
状 态 是 1。
exit [n] 使 得 shell 以
状 态 值 n 退 出
。 如 果 忽 略 了
n, 退 出 状 态
是 最 后 执 行 的
命 令 的 退 出 状
态 。 在 shell 终 止 前
, 对 EXIT 的
陷 阱 将 被 执 行
。
export [-fn] [name[=word]] ...
export -p 给 出 的 名 称
names 被 标 记 为 自
动 地 导 出 到 后
续 执 行 的 命 令
的 环 境 中 。 如
果 给 出 了 -f 选
项 , 名 称 names 指
的 是 函 数 。 如
果 没 有 给 出
names, 或 者 如 果
给 出 了 -p 选 项
, 将 打 印 在 这
个 shell 中 被 导 出 的
所 有 名 字 的 列
表 。 选 项 -n 使
得 以 此 为 名 的
变 量 的 导 出 属
性 被 删 除 。 export
返 回 0, 除 非 遇
到 了 非 法 的 选
项 , name 之 一 不
是 有 效 的 shell 变 量
名 , 或 者 给 出
了 -f 选 项 , 而
name 不 是 一 个 函
数 。
fc [-e ename] [-nlr] [first]
[last]
fc -s [pat=rep] [cmd] 命
令 修 复 。 第 一
种 形 式 中 , 历
史 列 表 中 从 first
到 last 范 围 内 的
命 令 都 被 选 取
。 First 和 last 可 以
指 定 为 字 符 串
(可 以 定 位 最 后
一 个 以 此 字 符
串 开 始 的 命 令 )
或 者 数 字 (历 史
列 表 中 的 索 引
, 负 数 被 当 作
相 对 当 前 命 令
号 的 偏 移 )。 如
果 没 有 指 定
last, 它 在 列 举
时 被 设 为 当 前
命 令 (因 此 ’’fc -l
-10’’ 将 输 出 最
后 10 条 命 令 ), 其
他 情 况 下 被 设
为 first。 如 果 没
有 指 定 first, 它
在 编 辑 时 被 设
为 前 一 个 命 令
, 列 举 是 设 为
-16。 选 项 -n 使 得
列 举 时 不 显 示
命 令 号 码 。 选
项 -r 将 命 令 顺
序 进 行 掉 换 。
如 果 给 出 了 -l
选 项 , 命 令 将
列 举 在 标 准 输
出 上 。 否 则 ,
将 启 动 ename 给 出
的 编 辑 器 , 编
辑 包 含 这 些 命
令 的 文 件 。 如
果 没 有 给 出
ename, 将 使 用 变
量 FCEDIT 的 值
, 如 果 FCEDIT
没 有 定 义 就 使
用 EDITOR 的 值
。 如 果 仍 然 没
有 定 义 , 将 使
用 vi。 编 辑 结
束 后 , 被 编 辑
的 命 令 将 回 显
并 执 行 。 第 二
种 形 式 中 , command
在 每 个 pat 的 实
例 被 rep 替 换 后
都 被 重 新 执 行
。 使 用 这 种 特
性 时 可 以 起 一
个 有 用 的 别 名
: ’’r=fc -s’’, 这
样 输 入 ’’r cc’’
将 运 行 最 后 的
以 ’’cc’’ 开 头
的 命 令 , 输 入
’’r’’ 将 重 新
执 行 上 一 个 命
令 。 如 果 使 用
第 一 种 形 式 ,
返 回 值 是 0, 除
非 遇 到 了 非 法
的 选 项 , 或 first
或 last 指 定 的 历
史 行 数 超 出 了
范 围 。 如 果 给
出 了 -e 选 项 ,
返 回 值 是 最 后
执 行 的 命 令 的
返 回 值 , 或 着
是 失 败 , 如 果
临 时 文 件 中 的
命 令 执 行 出 错
。 如 果 使 用 第
二 种 形 式 , 返
回 状 态 是 重 新
执 行 的 命 令 ,
除 非 cmd 没 有 指
定 一 个 有 效 的
历 史 行 , 这 种
情 况 下 fc 返 回
失 败 。
fg [jobspec] 将 jobspec 恢
复 至 前 台 , 使
它 成 为 当 前 作
业 。 如 果 jobspec 不
存 在 , 将 使 用 shell
意 义 上 的 当 前
作 业 current job。 返
回 值 是 被 放 到
前 台 的 命 令 的
状 态 , 或 者 是
失 败 , 如 果 在
禁 用 作 业 控 制
时 运 行 , 或 者
在 启 用 作 业 控
制 时 运 行 , 但
jobspec 没 有 指 定 有
效 的 作 业 , 或
jobspec 指 定 了 没 有
使 用 作 业 控 制
的 作 业 。
getopts optstring name [args]
getopts 由 shell
程 序 用 来 处 理
位 置 参 数 。
optstring 包 含 要 识
别 的 选 项 字 符
; 如 果 某 个 字
符 跟 随 着 冒 号
, 那 么 这 个 选
项 需 要 一 个 参
数 , 需 要 用 空
白 和 它 隔 离 开
。 冒 号 和 问 号
字 符 不 能 用 作
选 项 字 符 。 每
次 它 执 行 时 ,
getopts 将 下 一 个 选
项 放 在 shell 变 量
name 中 , 如 果 name
不 存 在 就 初 始
化 它 ; 下 一 个
要 处 理 的 参 数
的 索 引 放 在 变
量 OPTIND 中 。
每 次 shell 或 shell 脚 本
被 执 行 的 时 候
OPTIND 被 初 始
化 为 1。 当 某 个
选 项 需 要 参 数
时 , getopts 将 那 个
参 数 放 到 变 量
OPTARG 中 。 shell
不 会 自 动 重 置
OPTIND; 在 相
同 的 shell 中 , 如 果
要 使 用 新 的 参
数 集 合 而 需 要
多 次 调 用 getopts 时
, 必 须 手 动 重
置 它 。 当 遇 到
选 项 结 束 的 时
候 , getopts 以 大 于
0 的 值 退 出 。 OPTIND
被 设 置 为 第 一
个 非 选 项 的 参
数 的 索 引 , name
被 设 置 为 ?。
getopts
通 常 解 释 位 置
参 数 , 但 是 如
果 args 中 给 出 了
更 多 参 数 , getopts
将 解 释 它 们 。
getopts
能 以 两 种 方 式
报 告 错 误 。 如
果 optstring 的 第 一
个 字 符 是 冒 号
, 将 使 用 silent 安
静 的 错 误 报 告
。 通 常 的 操 作
中 , 遇 到 非 法
选 项 或 缺 少 选
项 的 参 数 时 将
打 印 出 诊 断 信
息 。 如 果 变 量
OPTERR 被 设 置
为 0, 不 会 显 示
错 误 消 息 , 即
使 optstring 的 第 一
个 字 符 不 是 冒
号 。 如 果 发 现
了 一 个 非 法 的
选 项 , getopts 向
name 中 置 入 ?, 并
且 如 果 不 是 安
静 模 式 的 话 ,
打 印 错 误 消 息
并 取 消 OPTARG
的 定 义 。 如 果
getopts 是 安 静 模 式
, 找 到 的 选 项
字 符 将 置 入
OPTARG, 不 会
打 印 诊 断 消 息
。 如 果 没 有 找
到 需 要 的 参 数
, 并 且 getopts 不 是
安 静 模 式 , 将
向 name 置 入 一 个
问 号 (?), 取 消
OPTARG 的 定 义
, 打 印 出 诊 断
消 息 。 如 果 getopts
是 安 静 模 式 ,
那 么 将 向 name 置
入 一 个 冒 号 (:)
并 且 OPTARG 将
设 置 为 找 到 的
选 项 字 符 。
getopts
返 回 真 , 如 果
找 到 了 指 定 的
/未 被 指 定 的 选
项 。 它 返 回 假
, 如 果 遇 到 了
选 项 结 束 或 者
发 生 了 错 误 。
hash [-lr]
[-p filename] [-dt] [name]
对 于 每 个 name, 通
过 搜 索 $PATH 中 的
目 录 , 找 到 命
令 的 全 路 径 名
并 记 录 它 。 如
果 给 出 了 -p 选
项 , 不 会 进 行
路 径 搜 索 , 直
接 将 filename 作 为 命
令 的 全 路 径 名
。 选 项 -r 使 得 shell
忘 记 所 有 已 记
录 的 位 置 。 选
项 -d 使 得 shell 忘 记
已 记 录 的 name 的
位 置 。 如 果 给
出 了 -t 选 项 ,
每 个 name 对 应 的
全 路 径 名 被 打
印 出 来 。 如 果
给 出 多 个 name 作
为 -t 的 参 数 ,
name 将 在 已 记 录
的 全 路 径 名 之
前 被 打 印 出 来
。 选 项 -l 使 得
输 出 以 一 种 可
以 重 用 为 输 入
的 格 式 显 示 。
如 果 没 有 给 出
参 数 , 或 者 只
给 出 了 -l 选 项
, 已 记 录 的 命
令 的 信 息 将 被
打 印 出 来 。 返
回 真 , 除 非 name
没 有 找 到 或 给
出 了 非 法 的 选
项 。
help [-s] [pattern] 显 示
关 于 内 建 命 令
的 有 用 的 信 息
。 如 果 指 定 了
pattern (模 式 ), help
给 出 关 于 所 有
匹 配 pattern 的 命 令
的 详 细 帮 助 ;
否 则 所 有 内 建
命 令 的 帮 助 和 shell
控 制 结 构 将 被
打 印 出 来 。 选
项 -s 限 制 信 息
显 示 为 简 短 的
用 法 概 要 。 返
回 0, 除 非 没 有
匹 配 pattern 的 命 令
。
history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...] 不 带
选 项 的 话 , 显
示 带 行 号 的 命
令 历 史 列 表 。
列 出 的 行 中 含
有 * 的 已 经 被
修 改 过 。 参 数
n 使 得 只 显 示
最 后 n 行 。 如
果 给 出 了 filename,
它 被 用 做 历 史
文 件 名 ; 没 有
的 话 , 将 使 用
HISTFILE 的 值 作
为 历 史 文 件 名
。 选 项 如 果 给
出 , 则 具 有 下
列 意 义 :
|
-c 清 空 历 史 列
表 , 删 除 所 有
条 目 。 |
|
-d offset
删 除 offset 位 置 的
历 史 条 目 。
|
-a 将 |
|
’’新 ’’ 的 历
史 条 目 (自 当 前
bash 会 话 开 始 输
入 的 历 史 命 令 ) |
追 加 到
历 史 文 件 中 。
|
-n 将 尚
未 从 历 史 文 件
中 读 取 的 历 史
条 目 读 入 当 前
历 史 列 表 。 这
些 行 是 当 前 |
bash 会 话
开 始 之 后 , 才
追 加 到 历 史 文
件 中 的 行 。
|
-r 读 取
历 史 文 件 的 内
容 , 使 用 它 们
作 为 当 前 历 史
。 |
|
-w 将 当 前 历 史
列 表 写 入 历 史
文 件 , 覆 盖 历
史 文 件 的 原 有
内 容 。 |
|
-p 对 后 续 的 |
args 进 行
历 史 替 换 , 在
标 准 输 出 上 显
示 结 果 。 不 会
将 结 果 存 入 历
史 列 表 。 每 个
args 都 必 须 被 引
用 , 来 禁 止 普
通 的 命 令 扩 展
。
|
-s 将 |
|
args 保 存
到 历 史 列 表 中
, 作 为 单 独 的
条 目 。 历 史 列
表 中 的 最 |
后 一 个
命 令 在 添 加 args
之 前 被 删 除 。
返 回 0, 除 非 遇
到 了 非 法 的 选
项 , 读 /写 历 史
文 件 发 生 错 误
, 在 -d 的 参 数
中 给 出 了 无 效
的 offset, 或 者 对
-p 的 后 续 参 数
进 行 历 史 扩 展
失 败 。
jobs [-lnprs] [
jobspec ... ]
jobs -x command [ args ... ] 第
一 种 形 式 列 出
正 在 运 行 的 作
业 。 选 项 具 有
下 列 意 义 :
|
-l 普 通 信 息 之
外 , 列 出 进 程 |
|
ID。 |
|
|
-p 只 列 出 作 业
的 进 程 组 |
|
|
|
leader 的 进
程 ID。
|
-n 只 显
示 从 上 次 用 户
得 知 它 们 的 状
态 之 后 , 状 态
发 生 改 变 的 作
业 的 信 息 。 |
|
-r 限 制 只 输 出
正 在 运 行 的 作
业 。 |
|
-s 限 制 只 输 出
停 止 的 作 业 。
如 果 给 出 了 |
jobspec 输
出 被 限 制 为 仅
此 作 业 的 信 息
。 返 回 0, 除 非
遇 到 了 非 法 的
选 项 或 给 出 了
非 法 的 jobspec。 如
果 给 出 了 -x 选
项 , 作 业 jobs 将
command 或 args 中 的
任 何 jobspec 替 换 为
相 应 的 进 程 组
ID, 执 行 command, 传
递 参 数 args 给 它
并 返 回 它 的 退
出 状 态 。
kill [-s
sigspec | -n signum |
-sigspec] [pid | jobspec] ...
kill -l [sigspec | exit_status] 向
以 pid 或 jobspec 为
名 的 进 程 发 送
名 为 sigspec 或 signum
的 信 号 。 sigspec 可
以 是 一 个 信 号
名 称 , 类 似
SIGKILL 或 信 号
编 号 ; signum 是 一
个 信 号 编 号 。
如 果 sigspec 是 一 个
信 号 名 称 , 那
么 可 以 有 , 也
可 以 没 有
SIG 前 缀 。
如 果 没 有 给 出
sigspec, 那 么 假 设
是 SIGTERM。 参
数 -l 将 列 出 所
有 信 号 的 名 称
。 如 果 给 出 -l
时 还 有 任 何 参
数 , 将 列 出 参
数 对 应 的 信 号
名 称 , 返 回 状
态 0。 -l 的 exit_status
参 数 是 一 个 数
字 , 指 定 了 一
个 信 号 编 号 或
被 信 号 终 止 的
进 程 的 退 出 状
态 值 。 kill 返 回
真 , 如 果 至 少
成 功 发 送 了 一
个 信 号 , 或 者
返 回 假 , 如 果
发 生 了 错 误 或
遇 到 了 非 法 的
选 项 。
let arg [arg ...] 每 个
arg 都 是 要 求 值
的 算 术 表 达 式
(参 见 算 术 求
值 (ARITHMETIC EVALUATION) 章
节 )。 如 果 最 后
一 个 参 数 arg 求
值 结 果 是 0, let
返 回 1; 否 则 返
回 0。
local [option] [name[=value] ...]
对 每 个 参 数 将
创 建 一 个 名 为
name 的 局 部 变 量
并 赋 予 值 value。
option 可 以 是 任 何
declare 接 受 的 值 。
当 local 用 于 函 数
内 部 时 , 它 使
得 变 量 name 作 用
域 局 限 于 函 数
和 它 的 子 进 程
。 没 有 操 作 数
时 , local 将 局 部
变 量 的 列 表 写
到 标 准 输 出 。
不 在 函 数 内 部
使 用 local 会 导 致
出 错 。 返 回 0,
除 非 在 函 数 之
外 使 用 了 local,
给 出 了 非 法 的
name, 或 者 name 是
一 个 只 读 的 变
量 。
popd [-n]
[+n] [-n] 从 目 录 栈
中 删 除 条 目 。
没 有 参 数 的 话
, 从 栈 中 删 除
顶 层 目 录 , 执
行 cd 切 换 到 新
的 顶 层 目 录 。
如 果 给 出 了 参
数 , 有 下 列 的
含 义 :
|
+n 删 除 |
|
dirs 给 出 的 列 表
中 从 左 数 第 n
个 条 目 (从 0 算 起
)。 例 |
如 :
’’popd +0’’ 删 除
第 一 个 目 录 ,
’’popd +1’’ 第 二
个 。
|
-n 删
除 |
|
dirs 给 出
的 列 表 中 从 右
数 第 n 个 条 目
(从 0 算 起 )。 例 |
如 :
’’popd -0’’ 删 除
最 后 一 个 目 录
, ’’popd -1’’ 删
除 倒 数 第 二 个
。
|
-n 阻 止
从 栈 中 删 除 目
录 之 后 改 变 目
录 , 这 时 只 对
栈 进 行 操 作 。
如 果 命 令 |
popd 成 功
, 还 要 执 行 一
个 dirs, 返 回 0。
popd 返 回 假 , 如
果 遇 到 了 非 法
的 选 项 , 目 录
栈 为 空 , 指 定
了 目 录 栈 中 不
存 在 的 条 目 ,
或 者 改 变 目 录
失 败 。
printf format
[arguments] 在 format 控 制
下 将 格 式 化 的
arguments 写 到 标 准
输 出 。 format 是 一
个 字 符 串 , 包
含 三 种 类 型 的
对 象 : 普 通 字
符 , 被 简 单 地
复 制 到 标 准 输
出 , 转 义 字 符
, 被 转 换 并 复
制 到 标 准 输 出
, 格 式 说 明 ,
每 一 个 都 使 得
相 邻 的 下 一 个
argument 被 打 印 出 来
。 在 标 准 的
printf(1) 格 式 之 外
, %b 使 得 printf 展
开 相 应 arguments 中
的 反 斜 杠 转 义
序 列 , %q 使 得
printf 将 相 应 的
argument 以 一 种 可 以
重 用 为 shell 输 入 的
格 式 输 出 。
format
在 需 要 时 被 重
用 , 以 处 理 所
有 的 arguments。 如 果
format 需 要 比 所 提
供 的 更 多 的
arguments, 多 出 的 格
式 说 明 视 为 已
经 提 供 了 相 应
的 0 值 或 空 字 符
串 。 成 功 的 话
返 回 值 是 0, 失
败 则 是 非 0 值 。
pushd [-n]
[dir]
pushd [-n] [+n] [-n] 将
目 录 推 入 目 录
栈 , 或 者 轮 换
栈 中 的 内 容 ,
使 栈 的 顶 部 成
为 当 前 工 作 目
录 。 没 有 参 数
时 , 交 换 顶 部
两 个 目 录 , 返
回 0, 除 非 目 录
栈 为 空 。 如 果
给 出 了 参 数 ,
它 们 有 如 下 含
义 :
|
+n 轮 换 栈 中
内 容 , 使 得 |
|
dirs 给 出 的 列 表
中 从 左 数 第 n
个 目 录 (从 |
0 数 起 ) 成
为 目 录 栈 的 顶
部 。
|
-n 轮
换 栈 中 内 容 ,
使 得 |
|
dirs 给 出
的 列 表 中 从 右
数 第 n 个 目 录
(从 |
0 数 起 ) 成
为 目 录 栈 的 顶
部 。
|
-n 阻 止
向 栈 中 添 加 目
录 之 后 改 变 目
录 , 这 时 只 对
栈 进 行 操 作 。 |
|
dir 添 加 |
dir 到 栈
顶 , 使 得 它 成
为 新 的 当 前 工
作 目 录 。 如 果
命 令 pushd 成 功 ,
还 要 执 行 一 个
dirs。 如 果 使 用
第 一 种 形 式 ,
pushd 返 回 0, 除 非
cd 切 换 到 目 录 dir
失 败 。 使 用 第
二 中 形 式 时 ,
pushd 返 回 0, 除 非
目 录 栈 为 空 ,
指 定 了 目 录 栈
中 不 存 在 的 元
素 , 或 者 切 换
到 指 定 的 新 的
当 前 目 录 失 败
。
pwd [-LP]
打 印 当 前 工 作
目 录 的 绝 对 路
径 名 。 如 果 给
出 了 -P 选 项 ,
或 者 设 置 了 内
建 命 令 set 的 -o
physical 选 项 , 打 印
出 的 路 径 名 中
不 会 包 含 符 号
链 接 。 如 果 使
用 了 -L 选 项 ,
打 印 出 的 路 径
中 可 能 包 含 符
号 链 接 。 返 回
0, 除 非 在 读 取
当 前 目 录 名 时
出 错 或 给 出 了
非 法 的 选 项 。
read [-ers] [-u fd] [-t
timeout] [-a aname] [-p
prompt] [-n nchars] [-d
delim] [name ...] 从 标 准
输 入 读 入 一 行
, 或 从 -u 选 项
的 参 数 中 给 出
的 文 件 描 述 符
fd 中 读 取 , 第
一 个 词 被 赋 予
第 一 个 name, 第 二
个 词 被 赋 予 第
二 个 name, 以 此 类
推 , 多 余 的 词
和 其 间 的 分 隔
符 被 赋 予 最 后
一 个 name. 如 果 从
输 入 流 读 入 的
词 数 比 名 称 数
少 , 剩 余 的 名
称 被 赋 予 空 值
。 IFS 中 的
字 符 被 用 来 将
行 拆 分 成 词 。
反 斜 杠 字 符 (\)
被 用 于 删 除 读
取 的 下 一 字 符
的 特 殊 含 义 ,
以 及 续 行 。 如
果 给 出 了 选 项
, 将 包 含 下 列
含 义 :
-a aname 词
被 赋 以 数 组 变
量 aname 的 连 续 的
下 标 , 从 0 开 始
。 在 赋 新 值 之
前 , aname 被 取 消
定 义 。 其 他 name
参 数 被 忽 略 。
-d delim
delim 的 第
一 个 字 符 被 用
于 结 束 输 入 行
, 而 不 是 新 行
符 。
|
-e 如 果 标 准 输
入 来 自 终 端 ,
将 使 用 |
|
readline (参 见 上 面
的 |
READLINE
章 节 ) 来 获 得 输
入 行 。
-n nchars
read 读 入
nchars 个 字 符 后 返
回 , 而 不 是 等
待 一 整 行 输 入
。
-p prompt
读 取 任 何 输 入
之 前 , 在 标 准
错 误 显 示 提 示
prompt, 末 尾 没 有
新 行 符 。 提 示
只 有 在 输 入 来
自 终 端 时 才 会
显 示 。
|
-r 反 斜 杠 不 作
为 转 义 字 符 。
反 斜 杠 被 认 为
行 的 一 部 分 。
特 殊 地 , 一 对
反 斜 杠 |
-新 行 符
不 作 为 续 行 。
|
-s 安 静
模 式 。 如 果 输
入 来 自 终 端 ,
字 符 将 不 会 回
显 。 |
|
-t timeout
使 得 read 超 时 并
返 回 失 败 , 如
果 在 timeout 秒 内 没
有 读 入 完 整 的
一 行 输 入 。 如
果 read 不 是 从 终
端 或 管 道 读 取
输 入 , 那 么 这
个 选 项 无 效 。
|
-u fd 从 文 件 描
述 符 |
|
fd 中 读 取 输 入
。 |
|
如 果 没
有 给 出 names, 读
取 的 一 行 将 赋
予 变 量
REPLY。 返
回 值 是 0, 除 非
遇 到 了 EOF, readP 超
时 , 或 给 出 了
非 法 的 文 件 描
述 符 作 为 -u 的 参
数 。
readonly [-apf]
[name ...] 给 出 的
name 将 被 标 记 为
只 读 的 ; names 的
值 不 能 被 后 来
的 赋 值 语 句 改
变 。 如 果 给 出
了 -f 选 项 , names
对 应 的 函 数 也
被 标 记 。 选 项
-a 限 制 变 量 只
能 是 数 组 类 型
。 如 果 没 有 给
出 name 参 数 , 或
者 如 果 给 出 了
-p 选 项 , 将 打
印 所 有 只 读 的
名 称 。 选 项 -p
使 得 输 出 以 一
种 可 以 被 重 新
用 作 输 入 的 格
式 显 示 。 返 回
值 是 0, 除 非 遇
到 了 非 法 的 选
项 , names 之 一 不
是 有 效 的 shell 变 量
名 , 或 选 项 -f
中 给 出 的 name 不
是 一 个 函 数 。
return [n] 使 得 一 个
函 数 以 指 定 值
n 退 出 。 如 果
忽 略 了 n, 返
回 状 态 是 函 数
体 中 执 行 的 最
后 一 个 命 令 的
退 出 状 态 。 如
果 在 函 数 外 使
用 , 但 是 是 在
一 个 以 . (source) 命
令 执 行 的 脚 本
内 , 它 使 得 shell 中
止 执 行 脚 本 ,
返 回 n 或 脚 本
中 执 行 的 最 后
一 个 命 令 的 退
出 状 态 。 如 果
在 函 数 外 使 用
, 并 且 不 是 在
以 . 执 行 的 脚
本 内 , 返 回 状
态 是 假 。
set [--abefhkmnptuvxBCHP] [-o
option] [arg ...] 不 带 选
项 时 , shell 变 量 的
名 称 和 值 将 以
一 种 可 以 重 用
为 输 入 的 格 式
显 示 。 输 出 根
据 当 前 语 言 环
境 进 行 排 序 。
指 定 了 选 项 的
时 候 , 它 们 设
置 或 取 消 了 shell 的
属 性 。 处 理 完
选 项 之 后 剩 余
的 任 何 参 数 都
被 作 为 位 置 参
数 的 值 被 赋 值
, 分 别 赋 予 $1,
$2, ... $n. 如 果 给
出 了 选 项 , 那
么 具 有 以 下 含
义 :
|
-a 自 动 将 被 修
改 或 创 建 的 变
量 和 函 数 标 志
为 导 出 至 后 续
命 令 的 环 境 中
。 |
|
-b 后 台 作 业 结
束 时 立 即 报 告
状 态 , 而 不 是
在 下 次 显 示 主
提 示 符 前 报 告
。 只 有 在 启 用
作 业 控 制 时 才
有 效 。 |
|
-e 立 即 退 出 ,
如 果 |
simple command (简
单 命 令 , 参 见
上 面 的 SHELL GRAMMAR 语
法 ) 以 非 零 值
退 出 。 shell 不 会 退
出 , 如 果 失 败
的 命 令 是 until 或
while 循 环 的 一 部
分 , if 语 句 的
一 部 分 , &&
或 ⎪⎪ 序 列 的
一 部 分 , 或 者
命 令 的 返 回 值
是 由 ! 翻 转 得
到 。 针 对 ERR 的
陷 阱 , 如 果 设
置 的 话 , 将 在 shell
退 出 前 执 行 。
|
-f 禁 止
路 径 扩 展 。 |
|
-h 在 查 找 并 执
行 命 令 时 , 记
住 它 们 的 位 置
。 这 是 默 认 启
用 的 。 |
|
-k 所 有 以 赋 值
语 句 形 式 出 现
的 参 数 都 被 加
入 到 命 令 执 行
的 环 境 中 , 不
仅 是 命 令 名 前
面 那 些 。 |
|
-m 监 视 模 式 。
作 业 控 制 被 启
用 。 在 支 持 这
个 选 项 的 系 统
中 , 它 在 交 互 |
shell 中 是
默 认 启 用 的 (参
见 上 面 的 JOB CONTROL
作 业 控 制 )。
后 台 进 程 在 单
独 的 进 程 组 中
运 行 , 结 束 时
将 打 印 出 包 含
它 们 退 出 状 态
的 一 行 信 息 。
|
-n 读 取
命 令 , 但 不 执
行 。 这 可 以 用
在 检 查 |
|
shell 脚 本 中
的 语 法 错 |
误 。 交
互 shell 中 它 被 忽 略
。
-o
option-name
option-name 可
以 是 如 下 之 一
:
allexport 与 -a 相 同 。
braceexpand 与 -B 相 同
。
|
emacs 使 用 |
|
emacs 样 式 的 命 令
行 编 辑 界 面 。
这 个 选 项 在 交
互 |
shell 中 默
认 启 用 , 除 非 shell
以 --noediting 选 项 启
动 。
|
errexit 与 |
|
-e 相 同
。 |
|
|
hashall 与 |
|
-h 相 同 。 |
|
histexpand 与
-H 相 同 。
|
history 允 许 记 录
命 令 历 史 , 如
上 述 |
|
HISTORY 中 的 描
述 。 这 个 |
选 项 在
交 互 shell 中 默 认 启
用 。
ignoreeof 它
的 效 果 是 好 像
已 经 执 行 了 shell 命
令 ’’IGNOREEOF=10’’ 一
样 (参 见 上 面 的
Shell Variables 变 量 )。
|
keyword 与 |
|
-k 相 同 。 |
|
|
monitor 与 |
|
-m 相 同 。 |
|
noclobber 与
-C 相 同 。
|
noexec 与 |
|
-n 相 同 。 |
|
|
noglob 与 |
|
-f 相 同 。 nolog
当 前 被 忽 略 。 |
|
|
notify 与 |
|
-b 相 同 。 |
|
|
nounset 与 |
|
-u 相 同 。 |
|
|
onecmd 与 |
|
-t 相 同 。 |
|
physical 与
-P 相 同 。
|
posix 如 果 默 认
操 作 与 |
|
POSIX 1003.2 不 同 的 话
, 改 变 bash |
的 行 为
, 来 满 足 标 准
(posix mode)。
privileged 与
-p 相 同 。
|
verbose 与 |
-v 相 同 。 |
|
|
vi 使 用 |
vi 样 式 的 命 令 行
编 辑 界 面 。 |
|
|
xtrace 与 |
-x 相 同 。 |
|
如 果 给
出 了 不 带 option-name
的 -o 选 项 , 当
前 选 项 的 值 将
被 打 印 出 来 。
如 果 给 出 了 不
带 option-name 的 +o 选
项 , 将 在 标 准
输 出 显 示 一 系
列 可 以 重 建 当
前 选 项 设 定 的
set 命 令 。
|
-p 打 开 |
|
privileged mode (特
权 模 式 )。 在 这
个 模 式 中 , 不
会 处 理 |
$ENV
和 $BASH_ENV 文 件
, shell 函 数 不 会 从
环 境 中 继 承 ,
环 境 中 如 果 有
变 量 SHELLOPTS,
也 将 被 忽 略 。
如 果 shell 启 动 时 的
有 效 用 户 (组 ) ID 与
真 实 用 户 (组 ) ID 不
同 , 并 且 没 有
给 出 -p 选 项 ,
将 执 行 这 些 操
作 , 有 效 用 户 ID
将 设 置 为 真 实
用 户 ID。 如 果 启
动 是 给 出 了 -p
选 项 , 有 效 用
户 ID 不 会 被 重 置
。 将 这 个 选 项
关 闭 使 得 有 效
用 户 和 组 ID 被 设
置 为 真 实 用 户
和 组 ID。
|
-t 读 取
并 执 行 一 个 命
令 之 后 退 出 。 |
|
-u 在 进 行 参 数
扩 展 时 , 将 未
定 义 的 变 量 作
为 错 误 。 如 果
试 图 扩 展 未 定
义 的 变 量 , |
shell 将 输
出 一 条 错 误 消
息 ; 如 果 是 非 交
互 的 shell, shell 将 以
非 零 值 退 出 。
|
-v 在 读
取 输 入 的 同 时
打 印 出 来 。 |
|
|
|
-x 扩 展 每 个 简
单 命 令 之 后 ,
显 示 |
|
PS4 的 值 ,
接 着 显 示 命 令
和 它 扩 |
展 后 的
参 数 。
|
-B |
|
shell 执 行 花
括 号 扩 展 (参 见
上 面 的 Brace Expansion)。
这 是 默 认 允 许
的 。
如 果 设
置 的 话 , bash 使
用 重 定 向 操 作
符 >, >&, 和
<> 时 , 不 会 覆
盖 已 存 在 的 文
件 。 可 以 使 用
重 定 向 操 作 符
>| 代 替 > 来 创
建 输 出 文 件 ,
从 而 绕 过 这 个
限 制 。
允 许 Enable
! 样 式 的 历 史
替 换 。 在 交 互 shell
中 这 个 选 项 是
默 认 启 用 的 。
如 果 设
置 的 话 , shell 在 执
行 类 似 cd 的 ,
改 变 当 前 工 作
目 录 的 命 令 时
, 不 会 跟 随 符
号 连 接 。 它 将
使 用 物 理 的 目
录 结 构 来 代 替
。 默 认 情 况 下
, bash 在 执 行 改
变 当 前 目 录 的
命 令 时 跟 随 路
径 的 逻 辑 链 。
如 果 这
个 选 项 没 有 参
数 , 将 取 消 位
置 参 数 的 定 义
。 否 则 , 位 置
参 数 将 设 置 为
arg, 即 使 它 们
以 - 开 始 。
束 , 使
得 所 有 剩 余 的
arg 被 赋 予 位 置
参 数 。 -x 和 -v
选 项 被 关 闭 。
如 果 没 有 arg,
位 置 参 数 将 不
会 改 变 。 这 个
选 项 默 认 是 关
闭 的 , 除 非 另
外 说 明 。 使 用 +
而 不 是 - 使 得 这
些 选 项 被 关 闭
。 选 项 都 可 以
作 为 参 数 , 在 shell
启 动 时 指 定 。
当 前 的 选 项 集
合 可 以 从 $- 找
到 。 返 回 值 总
是 真 , 除 非 遇
到 了 非 法 的 选
项 。
shift [n]
从 n+1 ... 开 始 的 选
项 被 重 命 名 为 $1
.... 从 $# 向 下 直
到 $#-n+1 的 选 项
被 取 消 定 义 。
n 必 须 是 非 负
整 数 , 小 于 或
等 于 $#。 如 果
n 是 0, 不 会 改
变 参 数 。 如 果
没 有 给 出 n,
就 假 定 它 是 1。
如 果 n 比 $# 大
, 位 置 参 数 不
会 改 变 。 返 回
值 大 于 0, 如 果
n 比 $# 大 或 小
于 0; 否 则 返 回
0。
shopt [-pqsu] [-o] [optname ...]
对 于 控 制 可 选
的 shell 行 为 的 变 量
, 改 变 它 们 的
值 。 没 有 选 项
或 者 有 -p 选 项
时 , 将 显 示 所
有 可 设 置 的 选
项 列 表 , 以 及
它 们 是 否 已 经
设 置 的 指 示 。
-p 使 得 输 出 以
一 种 可 以 被 重
用 为 输 入 的 形
式 显 示 。 其 他
选 项 有 如 下 含
义 :
|
-s 允 许 |
|
(设 置 ) 每 个
optname。 |
|
|
-u 禁 止 |
|
(取 消 ) 每 个
optname。
通 常 的
输 出 (安 静 模 式
); 返 回 状 态 指
示 了 optname 是 否 被
设 置 。 如 果 对
-q 给 出 了 多 个
optname 参 数 , 如 果
所 有 optname 都 被 允
许 , 返 回 值 就
是 0; 否 则 返 回
非 零 值 。
限 制
optname 的 值 为 内 建
命 令 set 的 -o 选
项 定 义 的 值 。
如 果 使 用 -s 或
-u 时 没 有 给 出
optname 参 数 , 显 示
将 分 别 限 于 被
设 置 或 被 取 消
的 选 项 。 除 非
另 外 说 明 , shopt
选 项 默 认 被 禁
止 (取 消 )。 返 回
值 在 列 出 选 项
时 是 0, 如 果 所
有 optname 都 被 允 许
的 话 , 否 则 是
非 零 值 。 当 设
置 或 取 消 选 项
时 , 返 回 值 是
0, 除 非 optname 是 非
法 的 shell 选 项 。
shopt
选 项 的 列 表 是
:
cdable_vars 如 果 设 置 的
话 , 内 建 命 令
cd 的 参 数 如 果
不 是 目 录 , 就
假 定 是 一 个 变
量 , 它 的 值 是
要 切 换 到 的 目
录 名 。
|
cdspell 如 果 设 置
的 话 , |
|
cd 命 令 中 目 录
的 细 微 拼 写 错
误 能 够 得 以 纠 |
正 。 检
查 的 错 误 包 括
字 符 错 位 , 缺
字 符 , 重 复 输
入 同 一 字 符 。
如 果 找 到 了 正
确 的 值 , 将 打
印 正 确 的 文 件
名 , 命 令 将 继
续 。 这 个 选 项
只 能 在 交 互 shell 中
使 用 。
checkhash 如
果 设 置 的 话 ,
bash 在 执 行 命 令
前 检 测 散 列 表
中 的 命 令 是 否
存 在 。 如 果 一
个 被 散 列 的 命
令 不 再 存 在 ,
将 进 行 正 常 的
路 径 搜 索 。
checkwinsize 如 果 设 置
的 话 , bash 在 每
条 命 令 执 行 后
检 测 窗 口 大 小
, 如 果 需 要 的
话 就 更 新
LINES 和
COLUMNS 的 值 。
|
cmdhist 如 果 设 置
的 话 , |
|
bash 试 着 将 一 个
多 行 命 令 的 所
有 行 放 到 同 一
个 |
历 史 条
目 中 。 这 样 使
得 多 行 命 令 可
以 容 易 地 重 新
修 改 。
|
dotglob 如 果
设 置 的 话 , |
|
bash 会 把
以 ’.’ 开 始 的 文
件 名 包 含 在 路
径 名 |
扩 展 的
结 果 中 。
execfail 如
果 设 置 的 话 ,
非 交 互 的 shell 如 果
不 能 执 行 作 为
参 数 提 供 给 内
建 命 令 exec 的 文
件 时 将 不 会 退
出 。 交 互 的 shell 在
exec 失 败 时 不 会
退 出 。
expand_aliases 如 果 设 置
的 话 , 别 名 被
扩 展 , 就 像 上
面 ALIASES 中 讲
到 的 一 样 。 这
个 选 项 在 交 互 shell
中 是 默 认 启 用
的 。
|
extglob 如 果 设 置
的 话 , 将 允 许
上 面 |
|
Pathname Expansion 中 提 到
的 扩 展 |
模 式 匹
配 特 性 。
histappend 如
果 设 置 的 话 ,
在 shell 退 出 时 , 历
史 列 表 将 追 加
到 以 HISTFILE 的 值 为
名 的 文 件 之 后
, 而 不 是 覆 盖
文 件 。
histreedit 如 果 设 置 的
话 , 并 且 正 在
使 用 readline, 用 户
可 以 重 新 修 改
失 败 的 历 史 替
换 。
histverify 如 果 设 置 的
话 , 并 且 正 在
使 用 readline, 历 史
替 换 的 结 果 不
会 立 即 传 给 shell 解
释 器 。 结 果 行
被 加 载 到 readline 编
辑 缓 冲 区 , 允
许 进 行 进 一 步
的 修 改 。
hostcomplete 如 果 设 置
的 话 , 并 且 正
在 使 用 readline, bash
将 试 着 对 正 在
进 行 补 全 的 包
含 的 词 进 行 主
机 名 补 全 (参 见
上 面 的 READLINE
中 的 Completing 段 落
)。 这 是 默 认 允
许 的 。
huponexit 如 果 设 置 的
话 , 在 交 互 的
登 录 shell 退 出 时
bash 将 向 所 有 作
业 发 出 SIGHUP
信 号 。
interactive_comments 如 果 设 置
的 话 , 将 允 许
在 交 互 shell 中 遇 到
以 # 开 头 的 词
时 忽 略 这 个 词
和 一 行 中 所 有
剩 余 的 字 符 (参
见 上 面 的 COMMENTS
注 释 )。 这 个
选 项 是 默 认 允
许 的 。
|
lithist 如 果 设 置
的 话 , 并 且 允
许 了 |
|
cmdhist 选 项 , 多
行 的 命 令 在 保
存 |
到 历 史
中 时 将 包 含 新
行 符 , 而 不 是
在 可 能 的 地 方
使 用 分 号 。
login_shell 如
果 shell 作 为 登 录 shell
启 动 , 将 设 置
这 个 选 项 (参 见
上 面 的 启 动
(INVOCATION) )。 这 个
值 不 可 修 改 。
mailwarn 如 果 设 置 的
话 , 并 且 bash 正
在 检 测 上 次 检
测 以 来 被 存 取
过 的 邮 件 , 将
显 示 ’’The mail in mailfile
has been read’’(mailfile 中
的 邮 件 已 被 读
取 )。
no_empty_cmd_completion 如 果 设
置 的 话 , 并 且
正 在 使 用 readline,
试 图 在 空 行 上
执 行 补 全 时 ,
bash 不 会 搜 索 PATH
来 查 找 可 能 的
补 全 。
nocaseglob 如 果 设 置 的
话 , bash 进 行 路
径 扩 展 时 使 用
大 小 写 不 敏 感
方 式 匹 配 文 件
名 (参 见 上 面 的
Pathname Expansion 路 径 扩 展
)。
nullglob 如 果 设 置 的
话 , bash 将 允 许
不 匹 配 任 何 文
件 的 模 式 扩 展
为 空 字 符 串 而
不 是 它 们 自 身
(参 见 上 面 的 Pathname
Expansion 路 径 扩 展 )。
progcomp 如 果 设 置 的
话 , 将 启 用 可
编 程 补 全 功 能
(参 见 上 面 的
Programmable Completion)。 这 个
选 项 是 默 认 启
用 的 。
promptvars 如 果 设 置 的
话 , 提 示 字 符
串 要 经 过 上 面
PROMPTING 中 描 述
的 扩 展 , 然 后
还 要 经 过 变 量
和 参 数 扩 展 。
这 个 选 项 是 默
认 启 用 的 。
restricted_shell
shell 设 置
这 个 选 项 , 如
果 它 是 以 受 限
模 式 启 用 的 (参
见 下 面 的 受
限 的 shell(RESTRICTED SHELL)
章 节 )。 这 个 值
不 能 修 改 。 在
执 行 启 动 文 件
时 , 它 不 会 被
重 置 , 使 得 启
动 文 件 可 以 得
知 shell 是 否 是 受 限
的 。
shift_verbose 如
果 设 置 的 话 ,
内 建 命 令 shift 在
偏 移 量 超 过 位
置 参 数 的 个 数
时 打 印 一 条 错
误 消 息 。
sourcepath 如 果 设 置 的
话 , 内 建 命 令
source (.) 使 用
PATH 中 的 值
来 查 找 包 含 作
为 参 数 给 出 的
文 件 。 这 个 选
项 默 认 是 启 用
的 。
xpg_echo 如 果 设 置 的
话 , 内 建 命 令
echo 默 认 扩 展 反
斜 杠 转 义 序 列
。
suspend [-f]
挂 起 shell 的 执 行 ,
直 到 收 到 一 个
SIGCONT 信 号 。
选 项 -f 表 示 如
果 这 是 一 个 登
录 shell, 那 么 不 要
提 示 , 直 接 挂
起 。 返 回 值 是
0, 除 非 shell 是 登 录
shell 并 且 没 有 指 定
-f, 或 者 没 有
启 用 作 业 控 制
。
test expr
[ expr ] 返 回 状
态 值 0 或 1, 根 据
条 件 表 达 式 expr
的 求 值 而 定 。
每 个 操 作 符 和
操 作 数 都 必 须
是 一 个 单 独 的
参 数 。 表 达 式
使 用 上 面 条
件 表 达 式 (CONDITIONAL
EXPRESSIONS) 中 的 操 作
构 造 。 表 达 式
可 以 用 下 列 操
作 符 结 合 , 以
优 先 级 的 降 序
列 出 。
|
! expr 值 为 真 ,
如 果 |
|
expr 为 假 。 |
|
( expr )
返 回 expr 的 值 。
括 号 可 以 用 来
超 越 操 作 符 的
一 般 优 先 级 。
expr1 -a expr2 值 为 真
, 如 果 expr1 和
expr2 都 为 真 。
expr1 -o expr2 值 为 真
, 如 果 expr1 或
expr2 为 真 。
test
和 [ 使 用 基 于
参 数 个 数 的 一
系 列 规 则 , 对
条 件 表 达 式 进
行 求 值 。
0 arguments 表 达 式 为 假
。
1 argument 表 达 式 为 真
, 当 且 仅 当 参
数 非 空 。
2 arguments 如 果 第 一 个
参 数 是 !, 表
达 式 为 真 , 当
且 仅 当 第 二 个
参 数 为 空 。 如
果 第 一 个 参 数
是 上 面 条 件
表 达 式 (CONDITIONAL
EXPRESSIONS) 中 列 出 的
单 目 条 件 运 算
符 之 一 , 表 达
式 为 真 , 当 且
仅 当 单 目 测 试
为 真 。 如 果 第
一 个 参 数 不 是
合 法 的 单 目 条
件 运 算 符 , 表
达 式 为 假 。
3 arguments 如 果 第 二 个
参 数 是 上 面
条 件 表 达 式
(CONDITIONAL EXPRESSIONS) 中 列
出 的 二 进 制 条
件 操 作 符 之 一
, 表 达 式 的 结
果 是 使 用 第 一
和 第 三 个 参 数
作 为 操 作 数 的
二 进 制 测 试 的
结 果 。 如 果 第
一 个 参 数 是
!, 表 达 式 值
是 使 用 第 二 和
第 三 个 参 数 进
行 双 参 数 测 试
的 结 果 取 反 。
如 果 第 一 个 参
数 是 (, 第 三
个 参 数 是 ),
结 果 是 对 第 二
个 参 数 进 行 单
参 数 测 试 的 结
果 。 否 则 , 表
达 式 为 假 。 这
种 情 况 下 -a 和
-o 操 作 符 被 认
为 二 进 制 操 作
符 。
4 arguments 如 果 第 一 个
参 数 是 !, 结
果 是 由 剩 余 参
数 组 成 的 三 参
数 表 达 式 结 果
取 反 。 否 则 ,
表 达 式 被 根 据
上 面 列 出 的 优
先 级 规 则 解 释
并 执 行 。
5 或 更 多 arguments 表 达
式 被 根 据 上 面
列 出 的 优 先 级
规 则 解 释 并 执
行 。
|
times 对 |
|
shell 以 及 shell 运 行 的
进 程 , 打 印 累
计 的 用 户 和 系
统 时 间 。 返 回 |
状 态 是
0。
trap [-lp]
[arg] [sigspec ...] 当 shell 收
到 信 号 sigspec 时 ,
命 令 arg 将 被 读
取 并 执 行 。 如
果 没 有 给 出 arg
或 者 给 出 的 是
-, 所 有 指 定 的
信 号 被 设 置 为
它 们 的 初 始 值
(进 入 shell 时 它 们 的
值 )。 如 果 arg 是
空 字 符 串 , sigspec
指 定 的 信 号 被 shell
和 它 启 动 的 命
令 忽 略 。 如 果
arg 不 存 在 , 并
且 给 出 了 -p 那
么 与 每 个 sigspec 相
关 联 的 陷 阱 命
令 将 被 显 示 出
来 。 如 果 没 有
给 出 任 何 参 数
, 或 只 给 出 了
-p, trap 将 打 印 出
与 每 个 信 号 编
号 相 关 的 命 令
列 表 。 每 个 sigspec
可 以 是 <signal.h> 定
义 的 信 号 名 ,
或 是 一 个 信 号
编 号 。 如 果 sigspec
是 EXIT (0), 命
令 arg 将 在 shell 退
出 时 执 行 。 如
果 sigspec 是
DEBUG, 命
令 arg 将 在 每 个
简 单 命 令 (simple
command, 参 见 上 面
的 SHELL GRAMMAR) 之
后 执 行 。 如 果
sigspec 是
ERR, 命 令
arg 将 在 任 何 命
令 以 非 零 值 退
出 时 执 行 。 如
果 失 败 的 命 令
是 until 或 while 循
环 的 一 部 分 ,
if 语 句 的 一 部
分 , && 或
⎪⎪ 序 列 的 一
部 分 , 或 者 命
令 的 返 回 值 是
通 过 ! 转 化 而
来 , ERR 陷
阱 将 不 会 执 行
。 选 项 -l 使 得 shell
打 印 信 号 名 和
对 应 编 号 的 列
表 。 shell 忽 略 的 信
号 不 能 被 捕 捉
或 重 置 。 在 子
进 程 中 , 被 捕
捉 的 信 号 在 进
程 创 建 时 被 重
置 为 初 始 值 。
返 回 值 为 假 ,
如 果 sigspec 非 法 ;
否 则 trap 返 回 真
。
type [-aftpP] name [name ...]
没 有 选 项 时 ,
指 示 每 个 name 将
如 何 被 解 释 ,
如 果 用 作 一 个
命 令 名 。 如 果
使 用 了 -t 选 项
, type 打 印 一 个
字 符 串 , 内 容
是 如 下 之 一 :
alias, keyword, function,
builtin, 或 file , 如
果 name 分 别 是 一
个 别 名 , shell 保 留
字 , 函 数 , 内
建 命 令 或 磁 盘
文 件 。 如 果 没
有 找 到 name, 那
么 不 会 打 印 任
何 东 西 , 返 回
退 出 状 态 假 。
如 果 使 用 了 -p
选 项 , type 返 回
如 果 name 作 为 命
令 名 , 将 被 执
行 的 磁 盘 文 件
名 ; 或 者 返 回
空 , 如 果 ’’type -t
name’’ 不 会 返 回
file. 选 项 -P 选 项
强 制 对 每 个 name
搜 索 PATH,
即 使 ’’type -t name’’
不 会 返 回 file. 如
果 命 令 在 散 列
中 , -p 和 -P 将
打 印 散 列 的 值
, 而 不 是
PATH 中 首 先
出 现 的 那 一 个
文 件 。 如 果 使
用 了 -a 选 项 ,
type 打 印 所 有 包
含 可 执 行 的 名
称 name 的 场 合 。
结 果 包 括 别 名
和 函 数 , 当 且
仅 当 没 有 同 时
使 用 -p 选 项 。
使 用 -a 时 不 会
查 找 散 列 中 的
命 令 表 。 选 项
-f 阻 止 shell 进 行 查
找 , 就 像 在 内
建 命 令 command 中 一
样 。 type 返 回 真
, 如 果 找 到 了
任 何 参 数 。 什
么 都 没 找 到 则
返 回 假 。
ulimit [-SHacdflmnpstuv [limit]] 在
支 持 它 的 系 统
上 , 对 shell 和 它 启
动 的 进 程 , 提
供 对 可 用 资 源
的 控 制 。 选 项
-H 和 -S 指 定 为
所 给 资 源 设 定
的 硬 性 和 柔 性
限 额 。 硬 性 限
额 在 设 置 后 不
能 增 加 ; 柔 性
限 额 可 以 增 加
, 直 到 与 硬 性
限 额 相 等 。 如
果 没 有 给 出 -H
或 -S 选 项 , 将
同 时 设 置 硬 性
和 柔 性 限 额 。
limit 的 值 可 以 是
一 个 数 字 , 单
位 是 指 定 资 源
的 单 元 值 , 或
者 是 特 殊 值 hard,
soft, 或 unlimited 之 一
, 意 思 分 别 是
当 前 硬 性 限 额
, 当 前 柔 性 限
额 和 没 有 限 额
。 如 果 忽 略 了
limit, 将 打 印 出
当 前 对 资 源 的
柔 性 限 额 值 ,
除 非 给 出 了 -H
选 项 。 当 指 定
多 于 一 个 资 源
时 , 限 额 名 称
和 单 位 将 在 值
之 前 打 印 出 来
。 其 他 选 项 按
照 如 下 意 义 解
释 :
core 文
件 的 最 大 值
shell 创
建 的 文 件 的 最
大 值
|
-l 内 存
中 可 以 锁 定 的
最 大 值 |
|
|
|
-m 常 驻 内 存 的
最 大 值 |
|
|
|
-n 打 开 的 文 件
描 述 符 最 大 个
数 |
|
(大 多 数 系 统 不
允 许 设 置 这 个
值 ) |
|
-p 管 道 大 小 ,
以 |
|
|
512 字 节 的
块 为 单 位 (这 个
值 可 能 不 能 设
置 )
cpu 时
间 总 数 的 最 大
值 , 以 秒 计
|
-u 用 户
可 以 运 行 的 最
大 进 程 数 |
|
|
-v |
|
shell 可
用 的 虚 拟 内 存
总 量 的 最 大 值
如 果 给 出 了
limit, 它 将 是 指
定 资 源 的 新 限
额 (选 项 -a 只 显
示 它 们 )。 如 果
没 有 给 出 选 项
, 则 假 设 有
-f。 值 的 递 增
间 隔 是 1024 字 节 ,
除 了 -t 单 位 是
秒 , -p 单 位 是 512
字 节 的 块 个 数
, -n 和 -u 是 不
可 调 节 的 值 。
返 回 0, 除 非 给
出 了 非 法 的 选
项 或 参 数 , 或
者 在 设 置 新 的
限 额 时 发 生 了
错 误 。
umask [-p]
[-S] [mode] 用 户 创
建 文 件 的 掩 码
被 设 置 为 mode. 如
果 mode 以 数 字 开
始 , 它 被 解 释
为 一 个 八 进 制
数 ; 否 则 被 解
释 为 类 似 于 chmod(1)
接 受 的 符 号 形
式 的 模 式 掩 码
。 如 果 忽 略 了
mode, 将 打 印 当
前 掩 码 值 。 选
项 -S 使 得 掩 码
以 符 号 形 式 打
印 ; 默 认 输 出
是 八 进 制 数 。
如 果 给 出 了 -p
选 项 , 并 且 忽
略 了 mode, 输 出
将 是 一 种 可 以
重 用 为 输 入 的
形 式 。 返 回 值
是 0, 如 果 成 功
改 变 了 模 式 ,
或 者 没 有 给 出
mode。 其 他 情 况
返 回 假 。
unalias [-a] [name ...] 从 已
定 义 的 别 名 列
表 中 删 除 name。
如 果 给 出 了 -a
将 删 除 所 有 别
名 定 义 。 返 回
值 是 真 , 除 非
给 出 的 name 不 是
已 定 义 的 别 名
。
unset [-fv] [name ...] 将 每
个 name 对 应 的 变
量 或 函 数 删 除
。 如 果 没 有 给
出 选 项 , 或 者
给 出 了 -v 选 项
, name 仅 包 括 shell
变 量 。 只 读 的
变 量 不 能 被 取
消 定 义 。 如 果
给 出 了 -f 选 项
, name 仅 包 括 shell
函 数 , 函 数 的
定 义 将 被 删 除
。 每 个 被 取 消
定 义 的 变 量 或
函 数 都 被 从 后
续 命 令 的 环 境
中 删 除 。 如 果
RANDOM, SECONDS,
LINENO, HISTCMD, FUNCNAME,
GROUPS, 或 者
DIRSTACK 中 的 任
何 一 个 被 取 消
定 义 , 它 们 将
丧 失 特 殊 的 属
性 , 即 使 它 们
后 来 被 重 新 定
义 。 退 出 状 态
是 真 , 除 非 name
不 存 在 或 是 只
读 的 。
wait [n] 等 待 指 定
的 进 程 , 返 回
它 的 终 止 状 态
。 n 可 以 是 进
程 ID 或 一 个 作 业
号 ; 如 果 给 出
的 是 作 业 号 ,
将 等 待 作 业 的
管 道 中 所 有 进
程 。 如 果 没 有
给 出 n, 将 等
待 所 有 当 前 处
于 激 活 状 态 的
子 进 程 , 返 回
状 态 是 0。 如 果
n 指 定 了 不 存
在 的 进 程 或 作
业 , 返 回 状 态
是 127。 否 则 , 返
回 状 态 是 所 等
待 的 最 后 一 个
进 程 或 作 业 的
退 出 状 态 。
如 果 bash
以 rbash 名 称 启 动
, 或 者 启 动 时
使 用 了 -r 选 项
, 那 么 它 成 为
受 限 的 shell。 受 限
的 shell 一 般 用 来 建
立 一 个 比 标 准
的 shell 受 到 更 多 控
制 的 环 境 。 它
的 行 为 与 bash 一
致 , 除 了 下 列
行 为 是 不 允 许
的 (disallowed) 或 不 会 运
行 的 (not performed)。
|
• 使 用 |
cd 来 改 变 路 径
;
取 消 SHELL,
PATH, ENV, 或 BASH_ENV 变
量 的 值 ;
中 包 含
/ ;
• 指 定 包 含 / 的
文 件 名 作 为 传
递 给 内 建 命 令
. 的 参 数 ;
杠 (slash) 的
文 件 名 作 为 -p
选 项 的 参 数 ,
传 递 给 hash 内 建
命 令 ;
启 动 时
从 shell 环 境 中 导 入
(import) 函 数 定 义 ;
• 启 动 时 解 释 shell
环 境 中 SHELLOPTS 的
值 ;
• 使 用 >, >|, <>, >&,
&>, 和 >> 等 重 定
向 操 作 符 重 定
向 输 出 ;
• 使 用
exec 内 建
命 令 来 以 另 一
个 命 令 替 换
shell;
|
• 使 用 |
|
enable 内 建
命 令 的 -f 和 -d
选 项 来 增 加 和
删 除 内 建 命 令
; |
|
• 使 用 |
|
enable 内 建 命 令
来 允 许 和 禁 止 shell
内 建 命 令 ; |
|
• 指 定 |
|
command 内 建 命 令
的 -p 选 项 ; |
|
• 使 用 |
|
set +r 或 set +o restricted 来
关 闭 受 限 模 式
。 |
这 些 限
制 在 所 有 启 动
文 件 读 取 之 后
才 会 生 效 。 当
一 个 shell 脚 本 作 为
一 个 命 令 执 行
时 (参 见 上 面 的
命 令 执 行 (COMMAND
EXECUTION) 章 节 ),
rbash 关 闭 为 执 行
脚 本 而 孵 化 (spawn)
的 shell 的 所 有 限 制
。
Bash
Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell
and
Utilities, IEEE
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)
/bin/bash
bash 可 执
行 文 件
/etc/profile 系
统 范 围 的 初 始
化 文 件 , 登 录 shell
会 执 行 它
~/.bash_profile 个 人 初 始
化 文 件 , 登 录 shell
会 执 行 它
~/.bashrc 个 人 的 每 个
交 互 式 shell 启 动 时
执 行 的 文 件
~/.bash_logout 个 人 的 登
录 shell 清 理 文 件 ,
当 一 个 登 录 shell 退
出 时 会 执 行 它
~/.inputrc 个 人 的 readline
初 始 化 文 件
Brian Fox, Free
Software Foundation
bfox [AT] gnu.org
Chet Ramey,
Case Western Reserve University
chet [AT] ins.Edu
如 果 你
发 现 一 个 bash 中
的 bug, 你 应 当 报
告 它 。 但 是 首
先 , 你 应 当 确
定 它 真 的 是 一
个 bug, 并 且 它 在
你 使 用 的 最 新
版 本 的 bash 中 存
在 。 一 旦 你 认
定 存 在 那 样 一
个 bug, 使 用 bashbug
命 令 来 提 交 一
个 错 误 报 告 。
如 果 你 有 固 定
住 址 , 鼓 励 你
用 邮 政 的 方 式
提 交 一 份 ! 建
议 和 有 关 bash
“哲 学 ”
(’philosophical’) 的 “错
误 报 告 ” 可 以
寄 给 bug-bash [AT] gnu.org 或 者
贴 到 Usenet 新 闻 组
gnu.bash.bug 之 上 。 所
有 错 误 报 告 应
当 包 括 :
|
bash 的 版 本 号 |
|
|
硬 件 信 息 和 操
作 系 统 |
|
|
用 来 编 译 的 编
译 器 |
|
|
对 bug 行 为 的 描
述 可 以 激 活 这
个 |
|
bug 的 一 个
短 小 的 脚 本 或
者 什 么 “秘 诀 ”
(recipe)
bashbug
会 自 动 在 它 提
供 的 错 误 报 告
模 板 中 插 入 前
三 项 。 关 于 这
份 手 册 页 的 评
论 和 错 误 报 告
请 直 接 提 交 到
chet [AT] ins.Edu.
它 太 大
了 , 并 且 有 点
慢 。
bash
和 传 统 版 本 的
sh 之 间 有 一 些
细 微 的 差 别 ,
大 部 分 是 因 为
POSIX 规 约 的
要 求 。 别 名 机
制 在 一 些 应 用
中 会 混 淆 。
Shell 内
建 命 令 和 函 数
不 可 终 止 /重 新
开 始 。 组 合 的
命 令 和 使 用 ’a ; b ;
c’ 形 式 的 命 令
序 列 在 进 程 试
图 暂 停 时 不 能
很 好 处 理 。 当
一 个 进 程 中 止
, shell 会 立 即 执 行
序 列 中 的 下 一
条 命 令 。 也 可
以 将 命 令 的 序
列 放 在 圆 括 号
中 , 来 强 制 启
动 子 shell, 这 样 就
可 以 将 它 们 作
为 一 个 单 元 中
止 了 。 在 $(...)
命 令 替 换 中 的
注 释 不 会 被 解
释 , 直 到 执 行
替 换 的 时 候 。
这 将 延 迟 报 错
, 直 到 命 令 开
始 执 行 之 后 的
一 段 时 间 。 数
组 变 量 还 不 能
导 出 (export)。
袁 乙 钧
<bbbush [AT] 163.com>
2004.03.05
http://cmpp.linuxforum.net
本 页 面
中 文 版 由 中 文 man
手 册 页 计 划 提
供 。 中 文 man 手 册
页 计 划 :
https://github.com/man-pages-zh/manpages-zh
| | | | | | | | | | | | | |