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