Manpages

NAME

bash - GNU Bourne-Again SHell (GNU 命 令 解 释 程 序 “Bourne二 世 ”)

概 述 (SYNOPSIS)

bash [options] [file]

版 权 所 有 (COPYRIGHT)

Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc.

描 述 (DESCRIPTION)

Bash 是 一 个 与 sh 兼 容 的 命 令 解 释 程 序 , 可 以 执 行 从 标 准 输 入 或 者 文 件 中 读 取 的 命 令 。 Bash 也 整 合 了 KornC Shell (kshcsh) 中 的 优 秀 特 性 。

Bash 的 目 标 是 成 为 遵 循 IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2, 可 移 植 操 作 系 统 规 约 : shell 和 工 具 ) 的 实 现 。

选 项 (OPTIONS)

除 了 在 set 内 建 命 令 的 文 档 中 讲 述 的 单 字 符 选 项 (option) 之 外 , bash 在 启 动 时 还 解 释 下 列 选 项 。

-c string 如 果 有

-c 选 项 , 那 么 命 令 将 从 string 中 读 取 。 如 果 string 后 面

有 参 数 (argument), 它 们 将 用 于 给 位 置 参 数 (positional parameter, 以 $0 起 始 ) 赋 值 。

-i 如 果 有

-i 选 项 , shell 将 交 互 地 执 行 ( interactive )。

-l 选 项 使 得

bash 以 类 似 登 录 shell (login shell) 的 方 式 启 动 (参 见

下 面 的 启 动 (INVOCATION) 章 节 )。

-r 如 果 有

-r 选 项 , shell 成 为 受 限 的 ( restricted ) (参 见 下 面 的

受 限 的 shell(RESTRICTED SHELL) 章 节 )。

-s 如 果 有

-s 选 项 , 或 者 如 果 选 项 处 理 完 以 后 , 没 有 参 数 剩 余 , 那 么 命

令 将 从 标 准 输 入 读 取 。 这 个 选 项 允 许 在 启 动 一 个 交 互 shell 时 可 以 设 置 位 置 参 数 。

-D 向 标 准 输 出 打 印 一 个 以

$ 为 前 导 的 , 以 双 引 号 引 用 的 字 符 串 列 表 。

这 是 在 当 前 语 言 环 境 不 是 CPOSIX 时 , 脚 本 中 需 要 翻 译 的 字 符 串 。 这 个 选 项 隐 含 了 -n 选 项 ; 不 会 执 行 命 令 。

[-+]O [shopt_option]

shopt_option 是 一 个 shopt 内 建 命 令 可 接 受 的 选 项 (参 见 下 面 的 shell 内 建 命 令 (SHELL BUILTIN COMMANDS) 章 节 )。 如 果 有 shopt_option-O 将 设 置 那 个 选 项 的 取 值 ; +O 取 消 它 。 如 果 没 有 给 出 shopt_optionshopt 将 在 标 准 输 出 上 打 印 设 为 允 许 的 选 项 的 名 称 和 值 。 如 果 启 动 选 项 是 +O, 输 出 将 以 一 种 可 以 重 用 为 输 入 的 格 式 显 示 。

--

-- 标 志 选 项 的 结 束 , 禁 止 其 余 的 选 项 处 理 。 任 何 -- 之 后 的 参 数 将 作 为 文 件 名 和 参 数 对 待 。 参 数 - 与 此 等 价 。

Bash 也 解 释 一 些 多 字 节 的 选 项 。 在 命 令 行 中 , 这 些 选 项 必 须 置 于 需 要 被 识 别 的 单 字 符 参 数 之 前 。
--dump-po-strings
等 价 于 -D, 但 是 输 出 是 GNU gettext po (可 移 植 对 象 ) 文 件 格 式
--dump-strings
等 价 于 -D

--help 在 标 准 输 出 显 示 用 法 信 息 并 成 功 退 出

--init-file file
--rcfile
file 如 果 shell 是 交 互 的 , 执 行 file 中 的 命 令 , 而 不 是 标 准 的 个 人 初 始 化 文 件 ~/.bashrc (参 见 下 面 的 启 动 (INVOCATION) 章 节 )
--login
等 价 于 -l
--noediting
如 果 shell 是 交 互 的 , 不 使 用 GNU readline 库 来 读 命 令 行
--noprofile
不 读 取 系 统 范 围 的 启 动 文 件 /etc/profile 或 者 任 何 个 人 初 始 化 文 件 ~/.bash_profile, ~/.bash_login, 或 ~/.profile 。 默 认 情 况 下 , bash 在 作 为 登 录 shell 启 动 时 读 取 这 些 文 件 (参 见 下 面 的 启 动 (INVOCATION) 章 节 )

--norc 如 果

shell 是 交 互 的 , 不 读 取 /执 行 个 人 初 始 化 文 件 ~/.bashrc 这 个 选

项 在 shell 以 sh 命 令 启 动 时 是 默 认 启 用 的

--posix 如 果 默 认 操 作 与 POSIX 1003.2 标 准 不 同 的 话 , 改 变 bash 的 行 为 来 符 合 标 准 (posix mode)
--restricted

shell 成 为 受 限 的 (参 见 下 面 的 受 限 的 shell(RESTRICTED SHELL) 章 节 )

--rpm-requires 产 生 一 个 为 使 脚 本 运 行 , 需 要 的 文 件 的 列 表 。 这 个 选 项 包 含 了 -n 选 项 。 它 是 为 了 避 免 进 行 编 译 期 错 误 检 测 时 的 限 制 - - Backticks, [] tests, 还 有 evals 不 会 被 解 释 , 一 些 依 赖 关 系 可 能 丢 失
--verbose
等 价 于 -v
--version
在 标 准 输 出 显 示 此 bash 的 版 本 信 息 并 成 功 退 出 。

参 数 (ARGUMENTS)

如 果 选 项 处 理 之 后 仍 有 参 数 剩 余 , 并 且 没 有 指 定 -c-s 选 项 , 第 一 个 参 数 将 假 定 为 一 个 包 含 shell 命 令 的 文 件 的 名 字 。 如 果 bash 是 以 这 种 方 式 启 动 的 , $0 将 设 置 为 这 个 文 件 的 名 字 , 位 置 参 数 将 设 置 为 剩 余 的 其 他 参 数 。 Bash 从 这 个 文 件 中 读 取 并 执 行 命 令 , 然 后 退 出 。 Bash 的 退 出 状 态 是 脚 本 中 执 行 的 最 后 一 个 命 令 的 退 出 状 态 。 如 果 没 有 执 行 命 令 , 退 出 状 态 是 0。 尝 试 的 步 骤 是 先 试 图 打 开 在 当 前 目 录 中 的 这 个 文 件 , 接 下 来 , 如 果 没 有 找 到 , shell 将 搜 索 脚 本 的 PATH 环 境 变 量 中 的 路 径 。

启 动 (INVOCATION)

login shell 登 录 shell, 参 数 零 的 第 一 个 字 符 是 - , 或 者 启 动 时 指 定 了 --login 选 项 的 shell。

interactive 交 互 的 shell, 是 一 个 启 动 时 没 有 指 定 非 选 项 的 参 数 , 并 且 没 有 指 定 -c 选 项 , 标 准 输 出 和 标 准 输 入 都 连 接 到 了 终 端 (在 isatty(3) 中 判 定 ) 的 shell, 或 者 启 动 时 指 定 了 -i 选 项 的 shell。 如 果 bash 是 交 互 的 , PS1 环 境 变 量 将 被 设 置 , 并 且 $- 包 含 i , 允 许 一 个 shell 脚 本 或 者 一 个 启 动 文 件 来 检 测 这 一 状 态 。 下 列 段 落 描 述 了 bash 如 何 执 行 它 的 启 动 文 件 。 如 果 这 些 启 动 文 件 中 的 任 一 个 存 在 但 是 不 可 读 取 , bash 将 报 告 一 个 错 误 。 文 件 名 中 的 波 浪 号 (~,tilde) 将 像 EXPANSION 章 节 中 Tilde Expansion 段 描 述 的 那 样 展 开 。 当 bash 是 作 为 交 互 的 登 录 shell 启 动 的 , 或 者 是 一 个 非 交 互 的 shell 但 是 指 定 了 --login 选 项 , 它 首 先 读 取 并 执 行 /etc/profile 中 的 命 令 , 只 要 那 个 文 件 存 在 。 读 取 那 个 文 件 之 后 , 它 以 如 下 的 顺 序 查 找 ~/.bash_profile, ~/.bash_login, 和 ~/.profile, 从 存 在 并 且 可 读 的 第 一 个 文 件 中 读 取 并 执 行 其 中 的 命 令 。 --noprofile 选 项 可 以 用 来 在 shell 启 动 时 阻 止 它 这 样 做 。 当 一 个 登 录 shell 退 出 时 , bash 读 取 并 执 行 文 件 ~/.bash_logout 中 的 命 令 , 只 要 它 存 在 。 当 一 个 交 互 的 shell 但 不 是 登 录 shell 启 动 时 , bash 从 文 件 ~/.bashrc 中 读 取 并 执 行 命 令 , 只 要 它 存 在 。 可 以 用 --norc 选 项 来 阻 止 它 这 样 做 。 --rcfile file 选 项 将 强 制 bash 读 取 并 执 行 文 件 file 中 的 命 令 , 而 不 是 ~/.bashrc 中 的 。 当 bash 以 非 交 互 的 方 式 启 动 时 , 例 如 在 运 行 一 个 shell 脚 本 时 , 它 在 环 境 中 查 找 变 量 BASH_ENV , 如 果 它 存 在 则 将 它 的 值 展 开 , 使 用 展 开 的 值 作 为 一 个 文 件 的 名 称 , 读 取 并 执 行 。 Bash 运 作 的 过 程 就 如 同 执 行 了 下 列 命 令 :

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi 但 是 没 有 使 用 PATH 变 量 的 值 来 搜 索 那 个 文 件 名 。 如 果 bash 以 名 称 sh 启 动 , 它 试 图 模 仿 (mimic) sh 历 史 版 本 的 启 动 过 程 , 尽 可 能 地 相 似 , 同 时 也 遵 循 POSIX 标 准 。 当 作 为 交 互 式 登 录 shell 启 动 时 ,或 者 是 非 交 互 但 使 用 了 --login 选 项 启 动 的 时 候 ,它 首 先 尝 试 读 取 并 执 行 文 件 /etc/profile~/.profile, 中 的 命 令 . 选 项 --noprofile 用 于 避 免 这 种 行 为 .当 使 用 命 令 sh 来 启 动 一 个 交 互 式 的 shell 时 , bash 查 找 环 境 变 量 ENV, 如 果 有 定 义 的 话 就 扩 展 它 的 值 ,然 后 使 用 扩 展 后 的 值 作 为 要 读 取 和 执 行 的 文 件 的 名 称 .由 于 使 用 sh 启 动 的 shell 不 会 读 取 和 执 行 任 何 其 他 的 启 动 文 件 ,选 项 --rcfile 没 有 意 义 .使 用 名 称 sh 启 动 的 非 交 互 的 shell 不 会 读 取 任 何 其 他 启 动 文 件 .当 以 sh 启 动 时 , bash 在 读 取 启 动 文 件 之 后 进 入 posix 模 式 . 当 bashposix 模 式 启 动 时 ,(和 使 用 --posix 命 令 行 参 数 效 果 相 同 ),它 遵 循 POSIX 标 准 . 这 种 模 式 下 ,交 互 式 shell 扩 展 ENV 环 境 变 量 的 值 ,读 取 并 执 行 以 扩 展 后 值 为 文 件 名 的 配 置 文 件 . 不 会 读 取 其 他 文 件 .

Bash 试 着 检 测 它 是 不 是 由 远 程 shell 守 护 程 序 ,通 常 为 rshd 启 动 的 .如 果 bash 发 现 它 是 由 rshd 启 动 的 ,它 将 读 取 并 执 行 ~/.bashrc 文 件 中 的 命 令 , 只 要 这 个 文 件 存 在 并 且 可 读 .如 果 以 sh 命 令 启 动 ,它 不 会 这 样 做 . 选 项 --norc 可 以 用 来 阻 止 这 种 行 为 ,选 项 --rcfile 用 来 强 制 读 取 另 一 个 文 件 ,但 是 通 常 rshd 不 会 允 许 它 们 , 或 者 用 它 们 来 启 动 shell. 如 果 shell 是 以 与 真 实 用 户 (组 ) id 不 同 的 有 效 用 户 (组 ) id 来 启 动 的 , 并 且 没 有 - 选 项 ,那 么 它 不 会 读 取 启 动 文 件 , 也 不 会 从 环 境 中 继 承 shell 函 数 . 环 境 变 量 中 如 果 出 现 SHELLOPTS, 它 将 被 忽 略 .有 效 用 户 id 将 设 置 为 真 实 用 户 id. 如 果 启 动 时 给 出 了 - 选 项 ,那 么 启 动 时 的 行 为 是 类 似 的 , 但 是 不 会 重 置 有 效 用 户 id.

定 义 (DEFINITIONS)

下 列 定 义 在 文 档 余 下 部 分 中 通 用 .

blank 空 白 一 个 空 格 或 是 tab .
word 词
一 个 字 符 序 列 , shell 将 它 们 视 为 一 个 结 构 单 元 . 也 称 为 一 个 token片 段 。
name 名 称
一 个 只 由 字 母 ,数 字 和 下 划 线 构 成 的 词 ,并 且 以 字 符 或 下 划 线 起 始 . 也 称 为 一 个 word identifier标 识 符 .
metacharacter 元 字 符
一 个 字 符 , 如 果 不 是 引 用 的 话 , 将 成 为 词 的 分 隔 符 . 它 是 如 下 字 符 之 一 :

| & ; ( ) < > space tab

control operator 控 制 操 作 符 一 个 token(标 识 ), 拥 有 控 制 功 能 . 它 是 如 下 符 号 之 一 :

|| & && ; ;; ( ) | <newline>

保 留 字 ("RESERVED WORDS")

Reserved words(保 留 字 ) 是 对 shell 有 特 殊 意 义 的 词 . 下 列 词 被 识 别 为 保 留 的 , 如 果 不 是 引 用 , 并 且 不 是 一 个 简 单 命 令 的 起 始 词 (参 见 下 面 的 shell语 法 ("SHELL GRAMMAR") ), 也 不 是 case 或 者 for 命 令 的 第 三 个 词 :

! case do done elif else esac fi for function if in select then until while { } time [[ ]]

shell语 法 ("SHELL GRAMMAR")

Simple Commands 简 单 命 令
simple command
(简 单 命 令 ) 是 (可 选 的 )一 系 列 变 量 赋 值 , 紧 接 着 是 blank(空 格 ) 分 隔 的 词 和 重 定 向 , 然 后 以 一 个 control operator 结 束 . 第 一 个 词 指 明 了 要 执 行 的 命 令 , 它 被 作 为 第 0 个 参 数 . 其 余 词 被 作 为 这 个 命 令 的 参 数 .

simple command 简 单 命 令 的 返 回 值 是 它 的 退 出 状 态 , 或 是 128+n, 如 果 命 令 被 signal(信 号 ) n 结 束 的 话 .

Pipelines 管 道
pipeline
(管 道 ) 是 一 个 或 多 个 命 令 的 序 列 , 用 字 符 | 分 隔 。 管 道 的 格 式 是 这 样 :

[time [-p]] [ ! ] command [ | command2 ... ] 命 令 command 的 标 准 输 出 通 过 管 道 连 接 到 命 令 command2 的 标 准 输 入 。 连 接 是 在 命 令 指 定 的 任 何 重 定 向 之 前 进 行 的 (参 见 下 面 的 REDIRECTION 重 定 向 )。 如 果 保 留 字 ! 作 为 管 道 前 缀 , 管 道 的 退 出 状 态 将 是 最 后 一 个 命 令 的 退 出 状 态 的 逻 辑 非 值 。 否 则 , 管 道 的 退 出 状 态 就 是 最 后 一 个 命 令 的 。 shell 在 返 回 退 出 状 态 值 之 前 , 等 待 管 道 中 的 所 有 命 令 返 回 。 如 果 保 留 字 time 作 为 管 道 前 缀 , 管 道 中 止 后 将 给 出 执 行 管 道 耗 费 的 用 户 和 系 统 时 间 。 选 项 -p 将 使 输 出 符 合 POSIX 指 定 的 格 式 。 环 境 变 量 TIMEFORMAT 可 以 设 置 为 一 个 格 式 字 符 串 , 指 定 时 间 信 息 应 当 如 何 显 示 ; 参 见 下 面 的 Shell Variables 环 境 变 量TIMEFORMAT 的 讲 述 。 管 道 中 的 每 个 命 令 都 作 为 单 独 的 进 程 来 执 行 (即 , 在 一 个 子 shell 中 启 动 )。

Lists 序 列
list
(序 列 )是 一 个 或 多 个 管 道 , 用 操 作 符 ;, &, &&, 或 ⎪⎪ 分 隔 的 序 列 , 并 且 可 以 选 择 用 ;, &, 或 <newline>新 行 符 结 束 . 这 些 序 列 操 作 符 中 , &&⎪⎪ 优 先 级 相 同 , 其 次 是 ;&, 它 们 的 优 先 级 是 相 同 的 。 序 列 中 可 以 有 一 个 或 多 个 新 行 符 来 分 隔 命 令 , 而 不 是 使 用 分 号 分 隔 。 如 果 一 个 命 令 是 由 控 制 操 作 符 & 结 束 的 , shell 将 在 后 台 的 子 shell 中 执 行 这 个 命 令 。 shell 不 会 等 待 命 令 执 行 结 束 , 返 回 状 态 总 是 0。 以 分 号 ; 分 隔 的 命 令 会 被 顺 序 执 行 ; shell 会 等 待 每 个 命 令 依 次 结 束 。 返 回 状 态 是 最 后 执 行 的 命 令 的 返 回 状 态 。 控 制 操 作 符 &&⎪⎪ 分 别 代 表 AND 和 OR 序 列 。 一 个 AND 序 列 的 形 式 是

command1 && command2

command2 只 有 在 command1 返 回 0 时 才 被 执 行 。 一 个 OR 序 列 的 形 式 是

command1 ⎪⎪ command2

command2 只 有 在 command1 返 回 非 0 状 态 时 才 被 执 行 。 AND 和 OR 序 列 的 返 回 状 态 是 序 列 中 最 后 执 行 的 命 令 的 返 回 状 态 。

Compound Commands 复 合 命 令
compound command
(复 合 命 令 ) 是 如 下 情 况 之 一 :

(list)

list 序 列 将 在 一 个 子 shell 中 执 行 。 变 量 赋 值 和 影 响 shell 环 境 变 量 的 内 建 命 令 在 命 令 结 束 后 不 会 再 起 作 用 。 返 回 值 是 序 列 的 返 回 值 。

{ list; }

list 序 列 将 在 当 前 shell 环 境 中 执 行 。 序 列 必 须 以 一 个 新 行 符 或 分 号 结 束 。 这 种 做 法 也 称 为 group command(命 令 组 )。 返 回 值 是 序 列 的 返 回 值 。 注 意 与 元 字 符 ( 和 不 同 , {}reserved words(保 留 字 ), 必 须 出 现 在 能 够 识 别 保 留 字 的 场 合 。 由 于 它 们 不 会 产 生 断 词 (cause a word break), 它 们 和 序 列 之 间 必 须 用 空 格 分 开 。

((expression)) 表 达 式 expression 将 被 求 值 。 求 值 规 则 在 下 面 的 算 术 求 值 (ARITHMETIC EVALUATION) 章 节 中 描 述 。 如 果 表 达 式 的 值 非 零 , 返 回 值 就 是 0; 否 则 返 回 值 是 1。 这 种 做 法 和 let "expression" 等 价 。
[[
expression ]] 返 回 0 或 1, 取 决 于 条 件 表 达 式 expression 求 值 的 情 况 。 表 达 式 是 由 下 面 CONDITIONAL EXPRESSIONS 条 件 表 达 式 章 节 中 描 述 的 原 语 (primaries) 组 成 。 [[]] 中 的 词 不 会 进 行 词 的 拆 分 和 路 径 的 扩 展 处 理 ; 而 tilde 扩 展 , 参 数 和 变 量 扩 展 , 算 术 扩 展 , 命 令 替 换 , 函 数 替 换 和 引 用 的 去 除 则 都 将 进 行 。 当 使 用 ==!= 操 作 符 时 , 操 作 符 右 边 的 字 符 串 被 认 为 是 一 个 模 式 , 根 据 下 面 Pattern Matching(模 式 匹 配 ) 章 节 中 的 规 则 进 行 匹 配 。 如 果 匹 配 则 返 回 值 是 0, 否 则 返 回 1。 模 式 的 任 何 部 分 可 以 被 引 用 , 强 制 使 它 作 为 一 个 字 符 串 而 被 匹 配 。 表 达 式 可 以 用 下 列 操 作 符 结 合 起 来 。 根 据 优 先 级 的 降 序 列 出 如 下 :

( expression ) 返 回 表 达 式 expression 的 值 。 括 号 可 以 用 来 提 升 操 作 符 的 优 先 级 。
!
expression 返 回 真 , 如 果 表 达 式 expression 返 回 假 。
expression1
&& expression2 返 回 真 , 如 果 表 达 式 expression1expression2 都 返 回 真 。
expression1
|| expression2 返 回 真 , 如 果 表 达 式 expression1 或 者 expression2 二 者 之 一 返 回 真 。

&&(与 ) 和 || 操 作 符 不 会 对 表 达 式 expression2 求 值 , 如 果 expression1 可 以 决 定 整 个 条 件 表 达 式 的 返 回 值 的 话 。

for name [ in word ] ; do list ; done

in 之 后 的 一 系 列 词 会 被 扩 展 , 产 生 一 个 项 目 列 表 。 变 量 name 被 依 次 赋 以 这 个 列 表 中 的 每 个 元 素 , 序 列 list 每 次 都 被 执 行 。 如 果 in word 被 忽 略 , 那 么 for 命 令 遍 历 已 设 置 的 位 置 参 数 (positional parameter, 参 见 下 面 的 PARAMETERS 参 数 ), 为 每 一 个 执 行 一 次 序 列 list。 返 回 值 是 最 后 一 个 命 令 的 返 回 值 。 如 果 in 之 后 的 词 扩 展 的 结 果 是 空 列 表 , 就 不 会 执 行 任 何 命 令 , 返 回 值 是 0。

for (( expr1 ; expr2 ; expr3 )) ; do list ; done 首 先 , 算 术 表 达 式 expr1 被 根 据 下 面 算 术 求 值 (ARITHMETIC EVALUATION) 中 的 规 则 进 行 求 值 。 然 后 算 术 表 达 式 expr2 被 循 环 求 值 , 直 到 它 等 于 0。 每 次 expr2 结 果 非 零 时 , 序 列 list 都 被 执 行 , 算 术 表 达 式 expr3 被 求 值 。 如 果 任 何 表 达 式 被 忽 略 , 将 被 视 为 执 行 结 果 是 1。 返 回 值 是 序 列 list 中 被 执 行 的 最 后 一 个 命 令 的 返 回 值 ; 或 者 是 false, 如 果 任 何 表 达 式 非 法 的 话 。
select
name [ in word ] ; do list ; done

in 之 后 的 一 系 列 词 会 被 扩 展 , 产 生 一 个 项 目 列 表 。 这 个 扩 展 后 的 词 集 合 被 输 出 到 标 准 错 误 上 , 每 个 前 面 加 上 一 个 数 字 。 如 果 in word 被 忽 略 , 将 输 出 位 置 参 数 (参 见 下 面 的 PARAMETERS 参 数 章 节 )。 PS3 提 示 符 将 被 显 示 出 来 , 等 待 从 标 准 输 入 得 到 一 行 输 入 。 如 果 输 入 是 一 个 数 字 且 显 示 中 有 对 应 的 词 , 那 么 变 量 name 的 值 将 设 置 为 这 个 词 。 如 果 输 入 一 个 空 行 , 那 么 词 和 提 示 符 将 再 次 显 示 出 来 。 如 果 读 入 了 一 个 EOF, 命 令 就 结 束 。 任 何 其 他 值 将 设 置 变 量 name 为 空 。 读 入 的 行 保 存 为 变 量 REPLY. 序 列 list 在 每 次 选 择 之 后 都 会 执 行 , 直 到 执 行 了 一 个 break 命 令 。 select 的 退 出 状 态 是 序 列 list 中 执 行 的 最 后 一 个 命 令 的 退 出 状 态 , 如 果 没 有 执 行 命 令 就 是 0。

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac

case 命 令 首 先 扩 展 word, 然 后 依 次 试 着 用 每 个 pattern 来 匹 配 它 , 使 用 与 路 径 扩 展 相 同 的 匹 配 规 则 (参 见 下 面 的 Pathname Expansion 路 径 扩 展 章 节 )。 如 果 找 到 一 个 匹 配 , 相 应 的 序 列 将 被 执 行 。 找 到 一 个 匹 配 之 后 , 不 会 再 尝 试 其 后 的 匹 配 。 如 果 没 有 模 式 可 以 匹 配 , 返 回 值 是 0。 否 则 , 返 回 序 列 中 最 后 执 行 的 命 令 的 返 回 值 。

if list; then list; [ elif list; then list; ] ... [ else list; ] fi 序 列 if list 被 执 行 。 如 果 退 出 状 态 是 0, then list 将 被 执 行 。 否 则 , 每 个 elif 将 被 一 次 执 行 , 如 果 退 出 状 态 是 0, 相 应 的 then list 将 被 执 行 , 命 令 结 束 。 否 则 , else list 将 被 执 行 , 如 果 存 在 的 话 。 退 出 状 态 是 最 后 执 行 的 命 令 的 退 出 状 态 , 或 者 是 0, 如 果 所 有 条 件 都 不 满 足 。
while
list; do list; done
until
list; do list; done

while 命 令 不 断 地 执 行 序 列 do list, 直 到 序 列 中 最 后 一 个 命 令 返 回 0。 until 命 令 和 while 命 令 等 价 , 除 了 对 条 件 的 测 试 恰 好 相 反 ; 序 列 do list 执 行 直 到 序 列 中 最 后 一 个 命 令 返 回 非 零 状 态 值 。 whileuntil 命 令 的 退 出 状 态 是 序 列 do list 中 最 后 一 个 命 令 的 退 出 状 态 , 或 者 是 0, 如 果 没 有 执 行 任 何 命 令 。

[ function ] name () { list; } 这 样 可 以 定 义 一 个 名 为 name 的 函 数 。 函 数 体 body 是 包 含 在 { 和 } 之 间 的 命 令 序 列 list。 在 指 定 将 name 作 为 一 个 命 令 运 行 的 场 合 , 这 个 序 列 将 被 执 行 。 函 数 的 退 出 状 态 是 函 数 体 最 后 执 行 的 命 令 的 退 出 状 态 (参 见 下 面 的 FUNCTIONS 函 数 章 节 )。

注 释 (COMMENTS)

在 非 交 互 的 shell 中 或 者 使 用 内 建 命 令 shopt 启 用 了 interactive_comments 选 项 的 交 互 的 shell 中 , 以 # 起 始 的 词 使 得 这 个 词 和 所 有 同 一 行 上 所 有 剩 余 的 字 符 都 被 忽 略 。 没 有 启 用 interactive_comments 选 项 的 交 互 式 shell 不 允 许 出 现 注 释 。 这 个 选 项 在 交 互 式 shell 中 是 默 认 启 用 的 (参 见 下 面 的 shell 内 建 命 令 (SHELL BUILTIN COMMANDS) 章 节 )。

引 用 (QUOTING)

引 用 Quoting 用 来 去 掉 特 定 字 符 或 词 的 特 殊 意 义 。 引 用 可 以 用 来 禁 止 对 特 殊 字 符 的 处 理 , 阻 止 保 留 字 被 识 别 , 还 用 来 阻 止 参 数 的 扩 展 。 上 面 在 DEFINITIONS 定 义 中 列 出 的 每 个 元 字 符 metacharacters 对 于 shell 都 有 特 殊 意 义 。 如 果 要 表 达 它 的 本 义 , 必 须 引 用 它 。 在 使 用 命 令 行 历 史 扩 展 功 能 时 , history expansion 字 符 , 通 常 是 !, 必 须 被 引 用 , 才 不 会 进 行 历 史 扩 展 。 有 三 种 引 用 机 制 : 转 义 字 符 (escape character), 单 引 号 和 双 引 号 。 一 个 未 被 引 用 的 反 斜 杠 (\) 是 转 义 字 符 escape character。 它 保 留 其 后 下 一 个 字 符 的 字 面 意 义 , 除 非 那 是 一 个 新 行 符 。 如 果 \ 和 新 行 符 成 对 出 现 , 并 且 反 斜 杠 自 身 没 有 被 引 用 , 那 么 \<newline> 被 视 为 续 行 标 志 (意 思 是 , 它 被 从 输 入 流 中 删 除 并 忽 略 了 )。 将 字 符 放 在 单 引 号 之 中 , 将 保 留 引 用 中 所 有 字 符 的 字 面 意 义 。 单 引 号 不 能 包 含 在 单 引 号 引 用 之 中 , 即 使 前 面 加 上 了 反 斜 杠 。 将 字 符 放 在 双 引 号 中 , 同 样 保 留 所 有 字 符 的 字 面 意 义 , 例 外 的 情 况 是 $, , 和 \。 字 符 $ 在 双 引 号 中 仍 然 具 有 特 殊 意 义 。 反 斜 杠 只 有 后 面 是 下 列 字 符 时 才 有 特 殊 意 义 : $, , ", \, 或 <newline>. 双 引 号 可 以 包 含 在 双 引 号 引 用 中 , 但 要 在 前 面 加 上 一 个 反 斜 杠 。 特 殊 的 参 数 *@ 在 双 引 号 中 有 特 殊 意 义 (参 见 下 面 的 PARAMETERS 参 数 章 节 )。 形 式 为 $string’ 的 词 会 被 特 殊 处 理 。 它 被 扩 展 为 string, 其 中 的 反 斜 杠 转 义 字 符 被 替 换 为 ANSI C 标 准 中 规 定 的 字 符 。 反 斜 杠 转 义 序 列 , 如 果 存 在 的 话 , 将 做 如 下 转 换 :

\a

alert (bell) 响 铃

\b

backspace 回 退

\e

an escape character 字 符 Esc

\f

form feed 进 纸

\n

new line 新 行 符

\r

carriage return 回 车

\t

horizontal tab 水 平 跳 格

\v

vertical tab 竖 直 跳 格

\\

backslash 反 斜 杠

\’

single quote 单 引 号

\nnn

一 个 八 比 特 字 符 , 它 的 值 是 八 进 制 值 nnn (一 到 三 个 数 字 )。
\x
HH 一 个 八 比 特 字 符 , 它 的 值 是 十 六 进 制 值 HH (一 到 两 个 十 六 进 制 数

字 )。

\cx 一 个

ctrl-x 字 符

扩 展 结 果 是 单 引 号 引 用 的 , 就 好 像 $ 符 号 不 存 在 一 样 。 双 引 号 引 用 字 符 串 前 面 加 上 一 个 $ 符 号 将 使 得 这 个 字 符 串 被 根 据 当 前 语 言 环 境 (locale) 来 翻 译 。 如 果 当 前 语 言 环 境 是 C 或 者 POSIX, 这 个 符 号 将 被 忽 略 。 如 果 这 个 字 符 串 被 翻 译 并 替 换 了 , 那 么 替 换 结 果 是 双 引 号 引 用 的 。

参 数 (PARAMETERS)

一 个 参 数 parameter 是 一 个 储 存 值 的 实 体 。 它 可 以 是 一 个 名 称 name, 一 个 数 字 或 者 是 下 面 Special Parameters 特 殊 参 数 章 节 中 列 出 的 特 殊 字 符 之 一 。 从 shell 的 角 度 来 看 , 一 个 变 量 variable 是 一 个 由 名 称 name 代 表 的 参 数 。 一 个 变 量 有 一 个 值 value 以 及 零 个 或 多 个 属 性 attibutes。 属 性 可 以 使 用 内 建 命 令 declare 来 设 置 (参 见 下 面 shell 内 建 命 令 (SHELL BUILTIN COMMANDS) 章 节 中 对 declare 的 描 述 )。 如 果 给 一 个 参 数 赋 值 , 那 么 它 就 被 定 义 了 。 空 字 符 串 是 有 效 的 值 。 一 旦 一 个 变 量 被 定 义 了 , 它 只 能 用 内 建 命 令 unset 来 取 消 (参 见 下 面 shell 内 建 命 令 (SHELL BUILTIN COMMANDS) 章 节 ). 一 个 变 量 variable 可 以 用 这 样 的 语 句 形 式 来 赋 值 :

name=[value] 如 果 没 有 给 出 值 value, 变 量 就 被 赋 为 空 字 符 串 。 所 有 值 values 都 经 过 了 波 浪 线 扩 展 , 参 数 和 变 量 扩 展 , 命 令 替 换 , 算 术 扩 展 和 引 用 的 删 除 (参 见 下 面 的 EXPANSION 扩 展 章 节 )。 如 果 变 量 设 置 了 integer 整 数 属 性 , 那 么 值 value 将 进 行 算 术 扩 展 , 即 使 没 有 应 用 $((...)) 扩 展 (参 见 下 面 的 Arithmetic Expansion 算 术 扩 展 章 节 )。 不 会 进 行 词 的 拆 分 , 除 非 是 下 面 Special Parameters 特 殊 参 数 中 提 到 的 "$@"。 不 会 进 行 路 径 的 扩 展 。 赋 值 语 句 也 出 现 在 下 列 内 建 命 令 中 , 作 为 它 们 的 参 数 : declare, typeset, export, readonly, 和 local

Positional Parameters 位 置 参 数 位 置 参 数 positional parameter 是 以 一 或 多 个 数 字 代 表 的 参 数 , 除 了 0。 位 置 参 数 是 在 shell 启 动 时 , 根 据 它 的 参 数 来 赋 值 的 , 也 可 以 用 内 建 命 令 set 来 重 新 赋 值 。 位 置 参 数 不 能 用 赋 值 语 句 来 赋 值 。 在 一 个 shell 函 数 被 执 行 的 时 候 , 位 置 参 数 会 被 暂 时 地 替 换 掉 (参 见 下 面 的 FUNCTIONS 函 数 章 节 )。 当 位 置 参 数 由 两 个 以 上 的 数 字 构 成 时 , 它 必 须 放 在 括 号 内 (参 见 下 面 的 EXPANSION 扩 展 章 节 )。

Special Parameters 特 殊 参 数
shell 对 一 些 参 数 做 特 殊 处 理 。 这 些 参 数 只 能 被 引 用 而 不 能 被 赋 值 。

* 扩 展 为 位 置 参 数 , 从

1 开 始 。 如 果 扩 展 发 生 在 双 引 号 中 , 它 扩 展 为 一 个

词 , 值 是 各 个 参 数 , 以 特 殊 变 量 IFS 的 第 一 个 字 符 分 隔 。 也 就 是 说 , "$*" 等 价 于 "$1c$2c...", 这 里 c 是 变 量 IFS 的 第 一 个 字 符 。 如 果 没 有 设 置 IFS, 那 么 参 数 将 用 空 格 分 隔 。 IFS

@ 扩 展 为 位 置 参 数 , 从

1 开 始 。 如 果 扩 展 发 生 在 双 引 号 中 , 每 个 参 数 都 将

扩 展 为 一 个 词 。 也 就 是 说 , "$@" 等 价 于 "$1" "$2" ... 如 果 位 置 参 数 不 存 在 , "$@" 和 $@ 扩 展 为 空 (即 , 它 们 被 删 除 了 )。

# 扩 展 为 位 置 参 数 的 个 数 , 以 十 进 制 表 示 。

? 扩 展 为 最 近 执 行 的 前 台 管 道 的 状 态 。

- 扩 展 为 当 前 选 项 标 志 。 标 志 是 在 启 动 时 或 以 内 建 命 令

set 指 定 的 , 或 者

是 shell 自 身 设 置 的 (例 如 选 项 -i )。

$ 扩 展 为

shell 的 进 程 ID。 在 一 个 () 子 shell 中 , 它 扩 展 为 当 前

shell 的 进 程 ID 而 不 是 子 shell 的 。

! 扩 展 为 最 近 一 次 执 行 的 后 台

(异 步 ) 命 令 的 进 程 号 。

0 扩 展 为

shell 或 者 shell 脚 本 的 名 称 。 这 个 变 量 是 在 shell 初 始 化 时 设 置 的 。 如 果 bash 是 执 行 脚 本 文 件 时 启 动 的 , $0 将 设 置 为 那 个 文 件 的 名 称 。 如 果 bash 启 动 时 的 参 数 包 含 -c, 那 么 $0 被 设 置 为 启 动 命 令 行 被 执 行 后 的 第 一 个 参 数 , 如 果 有 的 话 。 否 则 , 它 被 设 置 为 用 来 启 动 bash 的 文 件 名 , 就 是 参 数 0。

_

shell 启 动 时 , 设 置 为 shell 或 参 数 中 被 执 行 的 shell 脚 本 的 绝 对 路 径 名 。 然 后 , 在 扩 展 时 扩 展 为 上 一 个 命 令 的 最 后 一 个 参 数 。 它 也 被 设 置 为 被 执 行 的 每 个 命 令 的 文 件 全 名 并 且 被 设 置 到 这 个 命 令 执 行 的 环 境 当 中 。 当 检 查 邮 件 时 , 这 个 参 数 保 存 着 正 在 检 查 的 邮 件 文 件 的 名 称 。

Shell Variables 变 量
shell 定 义 了 下 列 变 量 :

BASH 扩 展 为 用 来 启 动 当 前

bash 实 例 的 文 件 全 名 。

BASH_VERSINFO 一 个 只 读 数 组 变 量 , 成 员 保 存 着 当 前 bash 实 例 的 版 本 信 息 。 赋 予 数 组 元 素 的 值 是 如 下 这 些 :

BASH_VERSINFO[0] 主 版 本 号

(release).

BASH_VERSINFO[1] 次 版 本 号

(version).

BASH_VERSINFO[2] 补 丁 版 本

BASH_VERSINFO[3] 编 译 信 息

BASH_VERSINFO[4] 发 布 时 的 状

态 (例 如 , beta1).
BASH_VERSINFO[
5]

MACHTYPE 平 台 类 型

BASH_VERSION 扩 展 为 一 个 字 符 串 , 描 述 了 这 个 bash. 实 例 的 版 本 。
COMP_CWORD

${COMP_WORDS} 的 索 引 , 指 向 当 前 光 标 位 置 所 在 的 词 。 这 个 变 量 只 有 在 被 可 编 程 补 全 功 能 (参 见 下 面 的 Programmable Completion 章 节 ) 调 用 的 shell 函 数 中 才 可 用 。

COMP_LINE 当 前 命 令 行 。 这 个 变 量 只 有 在 被 命 令 补 全 功 能 调 用 的 shell 函 数 和 外 部 命 令 中 才 可 用 。
COMP_POINT
相 对 于 当 前 命 令 起 始 处 的 当 前 光 标 位 置 。 如 果 当 前 光 标 位 置 是 当 前 命 令 的 末 端 , 它 的 值 就 和 ${#COMP_LINE} 相 等 。 这 个 变 量 只 有 在 被 命 令 补 全 功 能 调 用 的 shell 函 数 和 外 部 命 令 中 才 可 用 。
COMP_WORDS
一 个 数 组 变 量 (参 见 下 面 的 Arrays(数 组 )一 节 ), 由 当 前 命 令 行 的 各 个 单 词 构 成 。 这 个 变 量 只 有 在 被 命 令 补 全 功 能 调 用 的 shell 函 数 中 才 可 用 。
DIRSTACK
一 个 数 组 变 量 , 包 含 当 前 目 录 栈 的 内 容 。 栈 中 的 目 录 排 列 的 顺 序 就 是 用 内 建 命 令 dirs 显 示 时 的 顺 序 。 对 这 个 数 组 变 量 的 成 员 赋 值 可 以 用 来 修 改 栈 中 已 有 的 目 录 , 但 是 要 添 加 和 删 除 目 录 就 必 须 使 用 内 建 命 令 pushdpopd。 对 它 赋 值 不 会 改 变 当 前 目 录 。 如 果 取 消 了 DIRSTACK 的 定 义 , 它 就 失 去 了 它 的 特 殊 意 义 , 即 使 后 来 重 新 定 义 它 。

EUID 扩 展 为 当 前 用 户 的 有 效 用 户

ID。 它 在 shell 启 动 时 设 置 。 它 是 只 读 的 。

FUNCNAME 当 前 执 行 的 shell 函 数 名 。 这 个 变 量 只 有 在 执 行 一 个 shell 函 数 时 存 在 。 向 FUNCNAME 赋 值 没 有 效 果 并 且 返 回 一 个 错 误 。 如 果 取 消 了 FUNCNAME 的 定 义 , 它 就 失 去 了 特 殊 的 意 义 , 即 使 后 来 重 新 定 义 它 。

GROUPS 一 个 数 组 变 量 , 包 含 当 前 用 户 所 属 的 组 的 列 表 。 向

GROUPS 赋 值 没 有 效 果

并 且 返 回 一 个 错 误 。 如 果 取 消 了 GROUPS 的 定 义 , 它 就 失 去 了 特 殊 的 意 义 , 即 使 后 来 重 新 定 义 它 。

HISTCMD 当 前 命 令 的 历 史 编 号 , 或 者 历 史 列 表 中 的 索 引 。 如 果 取 消 了 HISTCMD 的 定 义 , 它 就 失 去 了 特 殊 的 意 义 , 即 使 后 来 重 新 定 义 它 。
HOSTNAME
自 动 设 置 为 当 前 的 主 机 名 。
HOSTTYPE
自 动 设 置 为 一 个 字 符 串 , 唯 一 地 标 识 着 正 在 运 行 bash 的 机 器 类 型 。 默 认 值 是 系 统 相 关 的 。

LINENO 每 次 引 用 这 个 参 数 时 ,

shell 将 它 替 换 为 一 个 指 示 在 脚 本 或 函 数 中 当 前 行

号 的 十 进 制 数 字 (从 1 开 始 )。 如 果 不 是 在 脚 本 或 函 数 中 , 替 换 得 到 的 值 不 一 定 有 意 义 。 如 果 取 消 了 LINENO 的 定 义 , 它 就 失 去 了 特 殊 的 意 义 , 即 使 后 来 重 新 定 义 它 。

MACHTYPE 自 动 设 置 为 一 个 字 符 串 , 完 整 的 描 述 了 正 在 运 行 bash 的 系 统 类 型 , 格 式 是 标 准 的 GNU cpu-company-system 格 式 。 默 认 值 是 系 统 相 关 的 。

OLDPWD 上 一 次 命 令

cd 设 置 的 工 作 目 录 。

OPTARG 内 建 命 令

getopts 处 理 的 最 后 一 个 选 项 参 数 值 (参 见 下 面 的 shell 内 建

命 令 (SHELL BUILTIN COMMANDS) 章 节 )。

OPTIND 内 建 命 令

getopts 将 处 理 的 下 一 个 参 数 的 索 引 (参 见 下 面 的 shell 内 建

命 令 (SHELL BUILTIN COMMANDS) 章 节 )。

OSTYPE 自 动 设 置 的 一 个 字 符 串 , 描 述 了 正 在 运 行

bash 的 操 作 系 统 。 默 认 值 是 系

统 相 关 的 。

PIPESTATUS 一 个 数 组 变 量 (参 见 下 面 的 Arrays 数 组 章 节 ), 包 含 最 近 执 行 的 前 台 管 道 中 的 进 程 (可 能 只 包 含 一 个 命 令 )的 退 出 状 态 。

PPID

shell 的 父 进 程 的 进 程 号 。 这 个 变 量 是 只 读 的 。

PWD

cd 命 令 设 置 的 当 前 工 作 目 录 。

RANDOM 每 次

引 用 这 个 参 数 时 , 都 会 产 生 一 个 0 到 32767 之 间 的 随 机 整 数 。 可 以 通 过 向 RANDOM 赋 值 来 初 始 化 随 机 数 序 列 。 如 果 取 消 了 RANDOM 的 定 义 , 它 就 失 去 了 特 殊 的 意 义 , 即 使 后 来 重 新 定 义 它 。

REPLY

变 量 的 值 将 作 为 内 建 命 令 read 的 输 入 , 如 果 命 令 没 有 参 数 的 话 。

SECONDS 每 次 引 用 这 个 参 数 时 , 返 回 shell 自 运 行 以 来 的 秒 数 。 如 果 向 SECONDS 赋 值 , 此 后 对 它 的 引 用 将 返 回 自 赋 值 时 起 的 秒 数 加 上 所 赋 予 的 值 。 如 果 取 消 SECONDS 的 定 义 , 它 就 失 去 了 特 殊 的 意 义 , 即 使 后 来 重 新 定 义 它 。
SHELLOPTS
一 个 冒 号 分 隔 的 被 允 许 的 shell 选 项 列 表 。 列 表 中 每 个 词 都 是 内 置 命 令 set-o 选 项 的 有 效 参 数 。 SHELLOPTS 中 出 现 的 选 项 也 是 set -o 显 示 为 on 的 选 项 。 如 果 bash 启 动 时 从 环 境 中 找 到 这 个 变 量 , 那 么 在 读 取 任 何 配 置 文 件 之 前 , 列 表 中 的 每 个 选 项 都 将 被 设 置 。 这 个 变 量 是 只 读 的 。

SHLVL 每 次 启 动 一 个

bash 的 实 例 时 都 会 增 加 。

UID 扩 展 为 当 前 用 户

的 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 信 号 时 自 动 设 置 。

MAILPATH

MAIL 如 果 这 个 参 数 设 置 为 一 个 文 件 名 , 并 且 没 有 设 置 环 境 变 量

话 , 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 被 忽 略 。 数 组 变 量 的 属 性 可 以 用 内 建 命 令 declarereadonly 来 指 定 。 每 个 属 性 对 于 所 有 数 组 元 素 都 有 效 。 数 组 赋 值 可 以 使 用 复 合 赋 值 的 方 式 , 形 式 是 name=(value1 ... valuen), 这 里 每 个 value 的 形 式 都 是 [subscript]=stringstring 必 须 出 现 。 如 果 出 现 了 可 选 的 括 号 和 下 标 , 将 为 这 个 下 标 赋 值 , 否 则 被 赋 值 的 元 素 的 下 标 是 语 句 中 上 一 次 赋 值 的 下 标 加 一 。 下 标 从 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 选 项 , 从 标 准 输 入 读 入 一 列 词 来 为 数 组 赋 值 。 内 建 命 令 setdeclare 使 用 一 种 可 以 重 用 为 输 入 的 格 式 来 显 示 数 组 元 素 。

扩 展 (EXPANSION)

命 令 行 的 扩 展 是 在 拆 分 成 词 之 后 进 行 的 。 有 七 种 类 型 的 扩 展 : 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 指 定 的 字 符 串 开 始 。 lengthoffset 是 算 术 表 达 式 (参 见 下 面 的 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 的 值 是 默 认 之 外 的 值 , 那 么 词 开 头 和 结 尾 的 空 白 字 符 spacetab 都 将 被 忽 略 , 只 要 空 白 字 符 在 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 经 过 前 面 的 扩 展 之 后 , 所 有 未 引 用 的 字 符 \, , 以 及 并 非 上 述 扩 展 结 果 的 字 符 " 都 被 删 除 。

重 定 向 (REDIRECTION)

在 命 令 执 行 前 , 它 的 输 入 和 输 出 可 能 被 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 如 果 重 定 向 操 作 符 是 >, 并 且 启 用 了 内 建 命 令 setnoclobber 选 项 , 那 么 如 果 word 扩 展 后 得 到 的 文 件 名 存 在 并 且 是 一 个 普 通 的 文 件 , 重 定 向 将 失 败 。 如 果 重 定 向 操 作 符 是 >|, 或 者 重 定 向 操 作 符 是 > 并 且 没 有 启 用 内 建 命 令 setnoclobber 选 项 , 那 么 即 使 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)

Aliases (别 名 机 制 ) 允 许 将 一 个 词 来 替 换 为 一 个 字 符 串 , 如 果 它 是 一 个 简 单 命 令 的 第 一 个 词 的 话 。 shell 记 录 着 一 个 别 名 列 表 , 可 以 使 用 内 建 命 令 aliasunalias 来 定 义 和 取 消 (参 见 下 面 的 shell 内 建 命 令 (SHELL BUILTIN COMMANDS) 章 节 )。 每 个 命 令 的 第 一 个 词 , 如 果 没 有 引 用 , 都 将 被 检 查 是 否 是 一 个 别 名 。 如 果 是 , 这 个 词 将 被 它 所 指 代 的 文 本 替 换 。 别 名 和 替 换 的 文 本 可 以 包 含 任 何 有 效 的 shell 输 入 , 包 含 上 面 列 出 的 metacharacters (元 字 符 ) , 特 殊 情 况 是 别 名 中 不 能 包 含 =。 替 换 文 本 的 第 一 个 词 也 被 检 查 是 否 是 别 名 , 但 是 如 果 它 与 被 替 换 的 别 名 相 同 , 就 不 会 再 替 换 第 二 次 。 这 意 味 着 可 以 用 ls 作 为 ls -F 的 别 名 , bash 不 会 递 归 地 展 开 替 换 文 本 。 如 果 别 名 的 最 后 一 个 字 符 是 blank, 那 么 命 令 中 别 名 之 后 的 下 一 个 词 也 将 被 检 查 是 否 能 进 行 别 名 展 开 。 别 名 可 以 使 用 alias 命 令 来 创 建 或 列 举 出 来 , 使 用 unalias 命 令 来 删 除 。 在 替 换 文 本 中 没 有 参 数 机 制 。 如 果 需 要 参 数 , 应 当 使 用 shell 函 数 (参 见 下 面 的 FUNCTIONS (函 数 ) 段 落 )。 如 果 shell 不 是 交 互 的 , 别 名 将 不 会 展 开 , 除 非 使 用 内 建 命 令 shopt 设 置 了 expand_aliases 选 项 。 关 于 别 名 的 定 义 和 使 用 中 的 规 则 比 较 混 乱 。 Bash 在 执 行 一 行 中 的 任 何 命 令 之 前 , 总 是 读 入 至 少 完 整 一 行 的 输 入 。 别 名 在 命 令 被 读 取 时 展 开 , 而 不 是 在 执 行 的 时 候 。 因 此 , 别 名 定 义 如 果 和 另 一 个 命 令 在 同 一 行 , 那 么 不 会 起 作 用 , 除 非 读 入 了 下 一 行 。 别 名 定 义 之 后 , 同 一 行 中 的 命 令 不 会 受 新 的 别 名 影 响 。 这 种 行 为 在 函 数 执 行 时 存 在 争 议 , 因 为 别 名 替 换 是 在 函 数 定 义 被 读 取 时 发 生 的 , 而 不 是 函 数 被 执 行 的 时 候 , 因 为 函 数 定 义 本 身 是 一 个 复 合 命 令 。 结 果 , 在 函 数 中 定 义 的 别 名 只 有 当 这 个 函 数 执 行 完 才 会 生 效 。 为 了 保 险 起 见 , 应 当 总 是 将 别 名 定 义 放 在 单 独 的 一 行 , 不 在 复 合 命 令 中 使 用 alias。 不 管 什 么 情 况 下 , 别 名 都 被 shell 函 数 超 越 (be superseded)。

函 数 (FUNCTIONS)

一 个 shell 函 数 , 以 上 面 SHELL GRAMMAR 中 描 述 的 方 法 定 义 , 保 存 着 一 系 列 的 命 令 , 等 待 稍 后 执 行 。 当 shell 函 数 名 作 为 一 个 简 单 命 令 名 使 用 时 , 这 个 函 数 名 关 联 的 命 令 的 序 列 被 执 行 。 函 数 在 当 前 shell 的 上 下 文 环 境 中 执 行 ; 不 会 创 建 新 的 进 程 来 解 释 它 们 (这 与 shell 脚 本 的 执 行 形 成 了 对 比 )。 当 执 行 函 数 时 , 函 数 的 参 数 成 为 执 行 过 程 中 的 位 置 参 数 (positional parameters)。 特 殊 参 数 # 被 更 新 以 反 映 这 个 变 化 。 位 置 参 数 0 不 会 改 变 。 函 数 执 行 时 , FUNCNAME 变 量 被 设 置 为 函 数 的 名 称 。 函 数 和 它 的 调 用 者 在 shell 执 行 环 境 的 所 有 其 他 方 面 都 是 一 样 的 , 特 殊 情 况 是 DEBUG 陷 阱 (参 见 下 面 对 内 建 函 数 trap 的 描 述 , 在 shell 内 建 命 令 (SHELL BUILTIN COMMANDS) 章 节 中 ) 不 会 被 继 承 , 除 非 函 数 设 置 了 trace 属 性 (参 见 下 面 对 内 建 函 数 declare 的 描 述 )。 函 数 中 的 局 部 变 量 可 以 使 用 内 建 命 令 local 来 声 明 。 通 常 情 况 下 , 变 量 和 它 们 的 值 在 函 数 和 它 的 调 用 者 之 间 是 共 享 的 。 如 果 函 数 中 执 行 了 内 建 命 令 return, 那 么 函 数 结 束 , 执 行 从 函 数 调 用 之 后 的 下 一 个 命 令 开 始 。 函 数 结 束 后 , 位 置 参 数 的 值 以 及 特 殊 参 数 # 都 将 重 置 为 它 们 在 函 数 执 行 前 的 值 。 函 数 名 和 定 义 可 以 使 用 内 建 命 令 declaretypeset 加 上 -f 参 数 来 列 出 。 如 果 在 declaretypeset 命 令 中 使 用 -F 选 项 将 只 列 出 函 数 名 。 函 数 可 以 使 用 内 建 命 令 export 加 上 -f 参 数 导 出 , 使 得 子 shell 中 它 们 被 自 动 定 义 。 函 数 可 以 是 递 归 的 。 对 于 递 归 调 用 的 次 数 没 有 硬 性 限 制 。

算 术 求 值 ("ARITHMETIC EVALUATION")

在 一 定 的 环 境 下 , shell 允 许 进 行 算 术 表 达 式 的 求 值 (参 见 内 建 命 令 letArithmetic 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 之 间 的 数 字 时 小 写 字 母 和 大 写 字 母 可 以 互 换 。 操 作 符 根 据 优 先 级 顺 序 进 行 求 值 。 圆 括 号 中 的 子 表 达 式 被 最 先 求 值 , 可 能 会 超 越 上 面 的 优 先 级 规 则 。

条 件 表 达 式 ("CONDITIONAL EXPRESSIONS")

条 件 表 达 式 用 于 [[ 复 合 命 令 以 及 内 建 命 令 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 如 果 file1file2 要 新 (根 据 修 改 日 期 ), 或 者 如 果 file1 存 在 而 file2 不 存 在 , 则 为 真 。
file1
-ot file2 如 果 file1file2 更 旧 , 或 者 如 果 file1 不 存 在 而 file2 存 在 , 则 为 真 。
file1
-ef file2 如 果 file1file2 指 的 是 相 同 的 设 备 和 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 之 一 。 这 些 算 术 二 进 制 操 作 返 回 真 , 如 果 arg1arg2 分 别 是 相 等 , 不 等 , 小 于 , 小 于 或 等 于 , 大 于 , 大 于 或 等 于 关 系 。 Arg1arg2 可 以 是 正 /负 整 数 。

简 单 命 令 扩 展 ("SIMPLE COMMAND EXPANSION")

当 执 行 一 个 简 单 命 令 时 , shell 进 行 下 列 扩 展 , 赋 值 和 重 定 向 , 从 左 到 右 。

1. 解 释 器 标 记 为 与 变 量 赋 值

(在 命 令 名 之 前 的 ) 和 重 定 向 有 关 的 词 被 保 存 等

待 随 后 处 理 。

2. 并 非 变 量 赋 值 或 重 定 向 的 词 被 扩 展 。 如 果 扩 展 后 仍 然 有 词 保 留 下 来 , 第 一 个 词 被 作 为 命 令 名 , 其 余 词 是 参 数 。

3. 重 定 向 按 照 上 面

REDIRECTION 中 讲 到 的 规 则 进 行 。

4. 每 个 变 量 赋 值 中

= 之 后 的 文 本 在 赋 予 变 量 之 前 要 经 过 波 浪 线 扩 展 , 参 数

扩 展 , 命 令 替 换 , 算 术 扩 展 和 引 用 删 除 。 如 果 没 有 得 到 命 令 名 , 变 量 赋 值 影 响 当 前 shell 环 境 。 否 则 , 变 量 被 加 入 被 执 行 的 命 令 的 环 境 中 , 不 影 响 当 前 shell 环 境 。 如 果 任 何 赋 值 动 作 试 图 为 只 读 变 量 赋 值 , 将 导 致 出 错 , 命 令 以 非 零 状 态 值 退 出 。 如 果 没 有 得 到 命 令 名 , 重 定 向 仍 会 进 行 , 但 是 不 影 响 当 前 shell 环 境 。 重 定 向 出 错 将 使 命 令 以 非 零 状 态 值 退 出 。 如 果 扩 展 后 有 命 令 名 保 留 下 来 , 那 么 执 行 过 程 如 下 所 示 。 否 则 , 命 令 退 出 。 如 果 在 任 何 扩 展 中 包 含 命 令 替 换 , 那 么 整 个 命 令 的 退 出 状 态 是 最 后 一 个 命 令 替 换 的 退 出 状 态 。 如 果 没 有 进 行 命 令 替 换 , 命 令 以 状 态 零 退 出 。

命 令 执 行 (COMMAND EXECUTION)

命 令 被 拆 分 为 词 之 后 , 如 果 结 果 是 一 个 简 单 命 令 和 可 选 的 参 数 列 表 , 将 执 行 下 面 的 操 作 。 如 果 命 令 名 中 没 有 斜 杠 , 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 执 行 指 定 的 解 释 器 , 如 果 操 作 系 统 不 会 自 行 处 理 这 种 可 执 行 文 件 格 式 的 话 。 解 释 器 的 参 数 由 下 面 三 部 分 组 成 : 程 序 第 一 行 中 解 释 器 名 称 之 后 的 可 选 的 一 个 参 数 , 程 序 的 名 称 , 命 令 行 参 数 , 如 果 有 的 话 。

命 令 执 行 环 境 (COMMAND EXECUTION ENVIRONMENT)

shell 有 execution environment (执 行 环 境 ) 的 概 念 , 由 下 列 内 容 组 成 :

shell 启 动 时 继 承 的 打 开 的 文 件 , 例 如 在 内 建 命 令 exec 中 使 用 重 定 向 修 改 的 结 果

当 前 工 作 目 录 , 使 用 cdpushd 或 者 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)

当 一 个 程 序 执 行 时 , 它 被 赋 予 一 个 字 符 串 数 组 , 成 为 环 境 environment。 它 是 一 个 名 称 -值 对 (name-value) 的 列 表 , 形 式 是 name=value.

shell 提 供 了 多 种 操 作 环 境 的 方 法 。 启 动 时 , shell 扫 描 自 身 的 环 境 , 为 每 个 找 到 的 名 字 创 建 一 个 参 数 , 自 动 地 将 它 标 记 为 export (向 子 进 程 导 出 的 )。 被 执 行 的 命 令 继 承 了 这 个 环 境 。 exportdeclare -x 命 令 允 许 参 数 和 函 数 被 加 入 到 环 境 中 或 从 环 境 中 删 除 。 如 果 环 境 中 参 数 的 值 被 修 改 , 新 值 成 为 环 境 的 一 部 分 , 替 换 了 旧 值 。 所 有 被 执 行 的 命 令 继 承 的 环 境 包 含 shell 的 初 始 环 境 (可 能 值 被 修 改 过 ), 减 去 被 unset 命 令 删 除 的 , 加 上 通 过 exportdeclare -x 命 令 添 加 的 部 分 。 可 以 在 任 何 simple command 或 函 数 的 环 境 中 设 定 暂 时 有 效 的 参 数 , 只 要 将 参 数 赋 值 放 在 命 令 前 面 就 可 以 了 , 参 见 上 面 PARAMETERS 的 描 述 。 这 些 赋 值 语 句 只 在 这 个 命 令 的 环 境 中 有 效 。 如 果 设 置 了 内 建 命 令 set-k 选 项 , 所 有 的 变 量 赋 值 都 将 放 到 命 令 的 环 境 中 , 不 仅 是 在 命 令 名 前 面 的 那 些 。 当 bash 执 行 一 个 外 部 命 令 时 , 变 量 _ 被 设 置 为 命 令 的 文 件 全 名 , 然 后 被 传 递 到 命 令 的 环 境 之 中 。

退 出 状 态 ("EXIT STATUS")

从 shell 的 角 度 看 , 一 个 命 令 退 出 状 态 是 0 意 味 着 成 功 退 出 。 退 出 状 态 是 0 表 明 成 功 。 非 零 状 态 值 表 明 失 败 。 当 命 令 收 到 fatal signal N 退 出 时 , bash 使 用 128+N 作 为 它 的 退 出 状 态 。 如 果 没 有 找 到 命 令 , 为 执 行 它 而 创 建 的 子 进 程 返 回 127。 如 果 找 到 了 命 令 但 是 文 件 不 可 执 行 , 返 回 状 态 是 126。 如 果 命 令 由 于 扩 展 或 重 定 向 错 误 而 失 败 , 退 出 状 态 大 于 零 。

shell 内 建 命 令 如 果 成 功 返 回 0(true), 执 行 时 出 错 则 返 回 非 零 (false)。 所 有 内 建 命 令 返 回 2 来 指 示 不 正 确 的 用 法 。

Bash 自 身 返 回 最 后 执 行 的 命 令 的 退 出 状 态 , 除 非 发 生 了 语 法 错 误 , 这 时 它 返 回 非 零 值 。 参 见 下 面 的 内 建 命 令 exit

信 号 (SIGNALS)

如 果 bash 是 交 互 的 , 没 有 设 定 任 何 陷 阱 , 它 忽 略 SIGTERM (这 样 kill 0 不 会 杀 掉 交 互 的 shell)。 SIGINT 被 捕 获 并 处 理 (从 而 使 内 建 命 令 wait 可 以 中 断 )。 在 所 有 情 况 下 , bash 忽 略 SIGQUIT 如 果 正 在 使 用 作 业 控 制 , bash 忽 略 SIGTTIN, SIGTTOU,SIGTSTP.

bash 开 始 的 并 行 作 业 的 信 号 处 理 句 柄 都 设 置 为 shell 从 父 进 程 中 继 承 的 值 。 如 果 不 是 正 在 使 用 作 业 控 制 , 异 步 命 令 还 忽 略 SIGINTSIGQUIT 。 作 为 命 令 替 换 结 果 运 行 的 命 令 忽 略 键 盘 产 生 的 作 业 控 制 信 号 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")

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 不 会 打 印 其 他 警 告 , 暂 停 的 作 业 将 终 止 。

提 示 符 (PROMPTING)

在 交 互 执 行 时 , bash 在 准 备 好 读 入 一 条 命 令 时 显 示 主 提 示 符 PS1, 在 需 要 更 多 的 输 入 来 完 成 一 条 命 令 时 显 示 PS2。 Bash 允 许 通 过 插 入 一 些 反 斜 杠 转 义 的 特 殊 字 符 来 定 制 这 些 提 示 字 符 串 , 这 些 字 符 被 如 下 解 释 :

\a 一 个

ASCII 响 铃 字 符 (07)

\d 日 期 ,

格 式 是 "星 期 月 份 日 " (例 如 , "Tue May 26")

\D{format}

format 被 传 递 给 strftime(3), 结 果 被 插 入 到 提 示 字 符 串 中 ; 空 的 format 将 使 用 语 言 环 境 特 定 的 时 间 格 式 。 花 括 号 是 必 需 的

\e 一 个

ASCII 转 义 字 符 (033)

\h 主 机 名

, 第 一 个 ’.’ 之 前 的 部 分
\H
主 机 名
\j

shell 当 前 管 理 的 作 业 数 量

\l

shell 的 终 端 设 备 名 的 基 本 部 分

\n

新 行 符

\r 回 车

\s

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 的 描 述 )。

readline库 (READLINE)

这 是 在 交 互 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-namemacro 形 式 时 , 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-namemacrokeyseq 不 同 于 上 面 的 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 前 缀

\e

一 个 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 变 量 的 值 总 是 OnOff。 变 量 和 它 们 的 默 认 值 是 :

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 可 以 设 置 为 emacsvi。
enable-keypad (Off)
如 果 设 置 为 On , readline 在 调 用 时 将 试 图 启 用 辅 助 键 盘 。 一 些 系 统 需 要 设 置 这 个 来 启 用 方 向 键 。
expand-tilde (Off)
如 果 设 置 为 On, readline 试 图 进 行 词 的 补 全 时 会 进 行 波 浪 线 扩 展 。
history-preserve-point
如 果 设 置 为 On, 历 史 代 码 试 着 在 previous-historynext-history 取 回 的 每 个 历 史 行 的 相 同 位 置 中 加 点 。
horizontal-scroll-mode (Off)
如 果 设 置 为 On, 将 使 得 readline 使 用 单 行 来 显 示 , 如 果 它 比 屏 幕 宽 度 要 长 , 就 在 单 一 的 屏 幕 行 上 水 平 滚 动 输 入 行 , 而 不 是 自 动 回 绕 到 新 行 。
input-meta (Off)
如 果 设 置 为 On, readline 将 允 许 八 比 特 输 入 (也 就 是 说 , 它 不 会 将 它 读 入 的 字 符 中 最 高 位 删 除 ), 不 管 它 能 支 持 什 么 样 的 终 端 要 求 。 名 称 meta-flag 与 此 变 量 同 义 。
isearch-terminators (’’C-[C-J’’)
用 于 终 止 增 量 的 搜 索 , 不 再 将 字 符 当 作 命 令 执 行 的 字 符 串 。 如 果 这 个 变 量 没 有 赋 值 , 字 符 串 EscC-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-standardemacs-ctlx 键 盘 映 射 , 仅 当 readline 以 emacs 模 式 启 动 。

term

term= 形 式 用 于 包 含 与 终 端 相 关 的 按 键 关 联 , 也 许 是 将 按 键 序 列 输 出 与 终 端 的 功 能 键 相 关 联 。 等 号 = 右 边 的 词 被 同 终 端 的 全 名 和 名 称 中 第 一 个 - 前 面 的 一 部 分 相 比 较 。 例 如 , 允 许 sun 同 时 匹 配 sunsun-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 历 史 章 节 )。 有 两 种 搜 索 模 式 : incrementalnon-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, 粘 贴 新 的 顶 部 内 容 。 只 能 在 yankyank-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_LINECOMP_POINT 被 赋 值 , 使 用 上 面 Shell Variables 中 的 规 则 。 如 果 要 执 行 shell 函 数 , 还 将 设 置 变 量 COMP_WORDSCOMP_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 的 值 是 什 么 。

历 史 (HISTORY)

当 启 用 内 建 命 令 set-o history 选 项 时 , shell 允 许 访 问 command history, 以 前 输 入 的 命 令 的 列 表 。 HISTSIZE 的 值 用 作 命 令 列 表 中 保 存 的 命 令 数 量 。 过 去 HISTSIZE 个 (默 认 为 500) 命 令 将 被 保 存 。 shell 将 每 条 命 令 在 进 行 参 数 和 变 量 扩 展 之 前 保 存 到 历 史 列 表 中 (参 见 上 面 的 EXPANSION 段 落 ), 但 是 是 在 历 史 扩 展 进 行 之 后 , 并 且 要 经 过 shell 变 量 HISTIGNOREHISTCONTROL 处 理 。 在 启 动 时 , 历 史 根 据 以 变 量 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 允 许 控 制 哪 些 命 令 被 保 存 到 历 史 列 表 中 。 可 以 设 置 HISTCONTROLHISTIGNORE 变 量 , 来 使 得 shell 只 保 存 输 入 命 令 的 一 个 子 集 。 shell 选 项 cmdhist 如 果 被 启 用 , 将 使 得 shell 将 多 行 的 命 令 的 每 一 行 保 存 到 同 一 个 历 史 条 目 中 , 在 需 要 的 地 方 添 加 分 号 来 保 证 语 义 的 正 确 性 。 shell 选 项 lithist 使 得 shell 保 存 命 令 时 , 保 留 嵌 入 的 新 行 而 不 是 用 分 号 代 替 。 参 见 下 面 shell 内 建 命 令 (SHELL BUILTIN COMMANDS) 中 , 内 建 命 令 shopt 的 描 述 , 有 关 设 置 和 取 消 shell 选 项 的 信 息 。

历 史 扩 展 ("HISTORY EXPANSION")

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 Variableshistchars 的 描 述 )。

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。 任 何 分 隔 符 都 可 以 用 来 代 替 /, 最 后 一 个 分 隔 符 是 可 选 的 , 如 果 它 是 事 件 行 的 最 后 一 个 字 符 。 oldnew 中 的 分 隔 符 可 以 用 一 个 反 斜 杠 来 引 用 。 如 果 & 出 现 在 new 中 , 它 将 替 换 为 old。 可 以 用 单 个 反 斜 杠 来 引 用 &。 如 果 old 为 空 , 它 将 设 置 为 最 后 替 换 的 old, 或 者 , 如 果 前 面 没 有 发 生 过 历 史 替 换 , 就 是 !?string[?] 搜 索 中 的 最 后 一 个 string。

& 重 复 上 一 次 替 换 。

g 使 得 改 变 被 整 个 事 件 行 所 接 受 。 用 于 与

:s’ 或 ’:&’ 结 合 (例

如 , ’:gs/old/new/’)。 如 果 与 ’:s’ 结 合 使 用 , 任 何 分 隔 符 都 可 以 用 来 代 替 /, 最 后 一 个 分 隔 符 是 可 选 的 , 如 果 它 是 事 件 行 的 最 后 一 个 字 符 。

shell 内 建 命 令 (SHELL BUILTIN COMMANDS)

除 非 另 外 说 明 , 这 一 章 介 绍 的 内 建 命 令 如 果 接 受 - 引 导 的 选 项 , 那 么 它 也 接 受 -- 作 为 参 数 , 来 指 示 选 项 的 结 束 :

[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 给 出 别 名 列 表 。 如 果 有 参 数 , 将 创 建 提 供 了 valuename 的 别 名 。 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-insertvivi-command 等 价 ; emacsemacs-standard 等 价 。

-l 列 出 所 有 的

readline 功 能 。

-p 以 程 序 可 读 的

方 式 显 示 readline 功 能 名 称 和 关 联
-P
列 出 当 前 readline 功 能 名 称 和 关 联 。

-v 以 程 序 可 读

的 方 式 显 示 readline 变 量 名 称 和 值
-V
列 出 当 前 readline 变 量 和 值 。

-s 以 程 序 可 读

的 方 式 显 示 readline 键 序 列 和 对 应 的 宏
-S
显 示 readline 宏 对 应 的 键 序 列 和 他 们 输 出 的 字 符 串

-f filenamefilename 中 读 取 键 序 列
-q
function 查 询 那 些 键 将 执 行 function
-u
function 取 消 所 有 关 联 到 function 的 键 。
-r
keyseq 取 消 当 前 任 何 keyseq 的 关 联 。
-x
keyseq:shell-command 使 shell-commandkeyseq 按 下 时 被 执 行 。 返 回 值 是 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] 根 据 optionword 产 生 可 能 的 补 全 。 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 指 定 。

command

命 令 名 。 也 可 以 用 -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 设 置 每 个

nametrace(跟 踪 ) 属 性 。 被 跟 踪 的 函 数 继 承 了 调

用 者 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 反 斜 杠

\0nnn

一 个 八 比 特 字 符 , 它 的 值 是 八 进 制 值 nnn (零 到 三 个 八 进 制 数 字 )。

\nnn

一 个 八 比 特 字 符 , 它 的 值 是 八 进 制 值 nnn (一 到 三 个 八 进 制 数 字 )。

\xHH

一 个 八 比 特 字 符 , 它 的 值 是 十 六 进 制 值 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] 命 令 修 复 。 第 一 种 形 式 中 , 历 史 列 表 中 从 firstlast 范 围 内 的 命 令 都 被 选 取 。 Firstlast 可 以 指 定 为 字 符 串 (可 以 定 位 最 后 一 个 以 此 字 符 串 开 始 的 命 令 ) 或 者 数 字 (历 史 列 表 中 的 索 引 , 负 数 被 当 作 相 对 当 前 命 令 号 的 偏 移 )。 如 果 没 有 指 定 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, 除 非 遇 到 了 非 法 的 选 项 , 或 firstlast 指 定 的 历 史 行 数 超 出 了 范 围 。 如 果 给 出 了 -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 的 第 一 个 字 符 不 是 冒 号 。 如 果 发 现 了 一 个 非 法 的 选 项 , getoptsname 中 置 入 ?, 并 且 如 果 不 是 安 静 模 式 的 话 , 打 印 错 误 消 息 并 取 消 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 选 项 , 作 业 jobscommandargs 中 的 任 何 jobspec 替 换 为 相 应 的 进 程 组 ID, 执 行 command, 传 递 参 数 args 给 它 并 返 回 它 的 退 出 状 态 。

kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l
[sigspec | exit_status] 向 以 pidjobspec 为 名 的 进 程 发 送 名 为 sigspecsignum 的 信 号 。 sigspec 可 以 是 一 个 信 号 名 称 , 类 似 SIGKILL 或 信 号 编 号 ; signum 是 一 个 信 号 编 号 。 如 果 sigspec 是 一 个 信 号 名 称 , 那 么 可 以 有 , 也 可 以 没 有 SIG 前 缀 。 如 果 没 有 给 出 sigspec, 那 么 假 设 是 SIGTERM。 参 数 -l 将 列 出 所 有 信 号 的 名 称 。 如 果 给 出 -l 时 还 有 任 何 参 数 , 将 列 出 参 数 对 应 的 信 号 名 称 , 返 回 状 态 0。 -lexit_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 是 一 个 只 读 的 变 量 。

logout 退 出 登 录

shell。

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 不 会 退 出 , 如 果 失 败 的 命 令 是 untilwhile 循 环 的 一 部 分 , 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)。 这 是 默 认 允 许 的 。

-C

如 果 设 置 的 话 , bash 使 用 重 定 向 操 作 符 >, >&, 和 <> 时 , 不 会 覆 盖 已 存 在 的 文 件 。 可 以 使 用 重 定 向 操 作 符 >| 代 替 > 来 创 建 输 出 文 件 , 从 而 绕 过 这 个 限 制 。

-H

允 许 Enable ! 样 式 的 历 史 替 换 。 在 交 互 shell 中 这 个 选 项 是 默 认 启 用 的 。

-P

如 果 设 置 的 话 , 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

-q 禁 止

通 常 的 输 出 (安 静 模 式 ); 返 回 状 态 指 示 了 optname 是 否 被 设 置 。 如 果 对 -q 给 出 了 多 个 optname 参 数 , 如 果 所 有 optname 都 被 允 许 , 返 回 值 就 是 0; 否 则 返 回 非 零 值 。

-o

限 制 optname 的 值 为 内 建 命 令 set-o 选 项 定 义 的 值 。 如 果 使 用 -s-u 时 没 有 给 出 optname 参 数 , 显 示 将 分 别 限 于 被 设 置 或 被 取 消 的 选 项 。 除 非 另 外 说 明 , shopt 选 项 默 认 被 禁 止 (取 消 )。 返 回 值 在 列 出 选 项 时 是 0, 如 果 所 有 optname 都 被 允 许 的 话 , 否 则 是 非 零 值 。 当 设 置 或 取 消 选 项 时 , 返 回 值 是 0, 除 非 optname 是 非 法 的 shell 选 项 。

shopt 选 项 的 列 表 是 :
cdable_vars
如 果 设 置 的 话 , 内 建 命 令 cd 的 参 数 如 果 不 是 目 录 , 就 假 定 是 一 个 变 量 , 它 的 值 是 要 切 换 到 的 目 录 名 。

cdspell 如 果 设 置 的 话 ,

cd 命 令 中 目 录 的 细 微 拼 写 错 误 能 够 得 以 纠

正 。 检 查 的 错 误 包 括 字 符 错 位 , 缺 字 符 , 重 复 输 入 同 一 字 符 。 如 果 找 到 了 正 确 的 值 , 将 打 印 正 确 的 文 件 名 , 命 令 将 继 续 。 这 个 选 项 只 能 在 交 互 shell 中 使 用 。

checkhash 如 果 设 置 的 话 , bash 在 执 行 命 令 前 检 测 散 列 表 中 的 命 令 是 否 存 在 。 如 果 一 个 被 散 列 的 命 令 不 再 存 在 , 将 进 行 正 常 的 路 径 搜 索 。
checkwinsize
如 果 设 置 的 话 , bash 在 每 条 命 令 执 行 后 检 测 窗 口 大 小 , 如 果 需 要 的 话 就 更 新 LINESCOLUMNS 的 值 。

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 值 为 真 , 如 果 expr1expr2 都 为 真 。
expr1
-o expr2 值 为 真 , 如 果 expr1expr2 为 真 。

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> 定 义 的 信 号 名 , 或 是 一 个 信 号 编 号 。 如 果 sigspecEXIT (0), 命 令 arg 将 在 shell 退 出 时 执 行 。 如 果 sigspecDEBUG, 命 令 arg 将 在 每 个 简 单 命 令 (simple command, 参 见 上 面 的 SHELL GRAMMAR) 之 后 执 行 。 如 果 sigspecERR, 命 令 arg 将 在 任 何 命 令 以 非 零 值 退 出 时 执 行 。 如 果 失 败 的 命 令 是 untilwhile 循 环 的 一 部 分 , 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 选 项 。 当 指 定 多 于 一 个 资 源 时 , 限 额 名 称 和 单 位 将 在 值 之 前 打 印 出 来 。 其 他 选 项 按 照 如 下 意 义 解 释 :

-a 报 告 所 有 当 前 限 额

-c

core 文 件 的 最 大 值

-d 进 程 数 据 段 的 最 大 值

-f

shell 创 建 的 文 件 的 最 大 值

-l 内 存 中 可 以 锁 定 的 最 大 值

-m 常 驻 内 存 的 最 大 值

-n 打 开 的 文 件 描 述 符 最 大 个 数

(大 多 数 系 统 不 允 许 设 置 这 个 值 )

-p 管 道 大 小 , 以

512 字 节 的 块 为 单 位 (这 个 值 可 能 不 能 设 置 )

-s 栈 的 最 大 值

-t

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。 否 则 , 返 回 状 态 是 所 等 待 的 最 后 一 个 进 程 或 作 业 的 退 出 状 态 。

受 限 的 shell(RESTRICTED SHELL)

如 果 bashrbash 名 称 启 动 , 或 者 启 动 时 使 用 了 -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 +rset +o restricted 来 关 闭 受 限 模 式 。

这 些 限 制 在 所 有 启 动 文 件 读 取 之 后 才 会 生 效 。 当 一 个 shell 脚 本 作 为 一 个 命 令 执 行 时 (参 见 上 面 的 命 令 执 行 (COMMAND EXECUTION) 章 节 ), rbash 关 闭 为 执 行 脚 本 而 孵 化 (spawn) 的 shell 的 所 有 限 制 。

参 见 ("SEE ALSO")

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)

文 件 (FILES)

/bin/bash

bash 可 执 行 文 件

/etc/profile 系 统 范 围 的 初 始 化 文 件 , 登 录 shell 会 执 行 它
~/.bash_profile
个 人 初 始 化 文 件 , 登 录 shell 会 执 行 它
~/.bashrc
个 人 的 每 个 交 互 式 shell 启 动 时 执 行 的 文 件
~/.bash_logout
个 人 的 登 录 shell 清 理 文 件 , 当 一 个 登 录 shell 退 出 时 会 执 行 它
~/.inputrc
个 人 的 readline 初 始 化 文 件

作 者 (AUTHORS)

Brian Fox, Free Software Foundation
bfox [AT] gnu.org

Chet Ramey, Case Western Reserve University
chet [AT] ins.Edu

报 告 BUGS (BUG REPORTS)

如 果 你 发 现 一 个 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.

BUGS

它 太 大 了 , 并 且 有 点 慢 。

bash 和 传 统 版 本 的 sh 之 间 有 一 些 细 微 的 差 别 , 大 部 分 是 因 为 POSIX 规 约 的 要 求 。 别 名 机 制 在 一 些 应 用 中 会 混 淆 。

Shell 内 建 命 令 和 函 数 不 可 终 止 /重 新 开 始 。 组 合 的 命 令 和 使 用 ’a ; b ; c’ 形 式 的 命 令 序 列 在 进 程 试 图 暂 停 时 不 能 很 好 处 理 。 当 一 个 进 程 中 止 , shell 会 立 即 执 行 序 列 中 的 下 一 条 命 令 。 也 可 以 将 命 令 的 序 列 放 在 圆 括 号 中 , 来 强 制 启 动 子 shell, 这 样 就 可 以 将 它 们 作 为 一 个 单 元 中 止 了 。 在 $(...) 命 令 替 换 中 的 注 释 不 会 被 解 释 , 直 到 执 行 替 换 的 时 候 。 这 将 延 迟 报 错 , 直 到 命 令 开 始 执 行 之 后 的 一 段 时 间 。 数 组 变 量 还 不 能 导 出 (export)。

[中 文 版 维 护 人 ]

袁 乙 钧 <bbbush [AT] 163.com>

[中 文 版 最 新 更 新 ]

2004.03.05

《 中 国 linux论 坛 man手 册 页 翻 译 计 划 》 :

http://cmpp.linuxforum.net

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh