|
SHLVL 每 次 啓 動
一 個 |
bash 的 實 例 時 都
會 增 加 。
的 ID, 在
啓 動 時 初 始 化
。 這 個 變 量 是
隻 讀 的 。 下 列
變 量 被 shell 使 用 。
有 時 bash 會 爲 變
量 賦 默 認 值 ;
這 些 情 況 在 下
面 會 標 出 。
BASH_ENV 如
果 bash 在 執 行 一
個 shell 腳 本 時 設 定
了 這 個 變 量 ,
它 的 值 將 被 解
釋 爲 一 個 文 件
名 , 包 含 着 初
始 化 shell 用 到 的 命
令 , 就 像 ~/.bashrc
中 一 樣 。
BASH_ENV 的 值 在
被 解 釋 爲 一 個
文 件 名 之 前 要
經 過 參 數 擴 展
, 命 令 替 換 和
算 術 擴 展 。 不
會 使 用 PATH
來 查 找 結 果 文
件 名 。
|
CDPATH 命 令 |
|
cd 的 搜 索 路 徑
。 這 是 一 個 冒
號 分 隔 的 目 錄
列 表 , shell 從 中 查
找 |
cd 命 令
的 目 標 目 錄 。
可 以 是 這 樣 :
".:~:/usr".
COLUMNS 用
在 內 建 命 令 select
當 中 , 用 來 判
斷 輸 出 選 擇 列
表 時 的 終 端 寬
度 。 自 動 根 據
SIGWINCH 信 號 來 設 置
。
COMPREPLY 一 個 數 組 變
量 , bash 從 中 讀
取 可 能 的 命 令
補 全 。 它 是 由
命 令 補 全 功 能
調 用 的 shell 函 數 產
生 的 。
|
FCEDIT 內 建 命 令 |
|
fc 默 認 的 編 輯
器 。 |
|
FIGNORE 一
個 冒 號 分 隔 的
後 綴 名 列 表 ,
在 進 行 文 件 名
補 全 時 被 忽 略
(參 見 下 面 的
READLINE 章 節 )。
一 個 後 綴 滿 足
其 中 之 一 的 文
件 名 被 排 除 在
匹 配 的 文 件 名
之 外 。 可 以 是
這 樣 : ".o:~".
GLOBIGNORE 一 個 冒 號 分
隔 的 模 式 列 表
, 定 義 了 路 徑
名 擴 展 時 要 忽
略 的 文 件 名 集
合 。 如 果 一 個
文 件 名 與 路 徑
擴 展 模 式 匹 配
, 同 時 匹 配
GLOBIGNORE 中 的 一
個 模 式 時 , 它
被 從 匹 配 列 表
中 刪 除 。
HISTCONTROL 如 果 設 置 爲
ignorespace, 以 space 開 頭
的 行 將 不 會 插
入 到 歷 史 列 表
中 。 如 果 設 置
爲 ignoredups, 匹 配 上
一 次 歷 史 記 錄
的 行 將 不 會 插
入 。 設 置 爲
ignoreboth 會 結 合 這
兩 種 選 項 。 如
果 沒 有 定 義 ,
或 者 設 置 爲 其
他 值 , 所 有 解
釋 器 讀 取 的 行
都 將 存 入 歷 史
列 表 , 但 還 要
經 過 HISTIGNORE 處 理
。 這 個 變 量 的
作 用 可 以 被
HISTIGNORE 替 代 。 多
行 的 組 合 命 令
的 第 二 和 其 餘
行 都 不 會 被 檢
測 , 不 管 HISTCONTROL
是 什 麼 , 都 會
加 入 到 歷 史 中
。
HISTFILE 保 存 命 令 歷
史 的 文 件 名 (參
見 下 面 的 HISTORY
歷 史 章 節 )。
默 認 值 是
~/.bash_history。 如 果 取
消 定 義 , 在 交
互 式 shell 退 出 時 命
令 歷 史 將 不 會
保 存 。
HISTFILESIZE 歷 史 文 件
中 包 含 的 最 大
行 數 。 當 爲 這
個 變 量 賦 值 時
, 如 果 需 要 的
話 , 歷 史 文 件
將 被 截 斷 來 容
納 不 超 過 這 個
值 的 行 。 默 認
值 是 500。 歷 史 文
件 在 交 互 式 shell 退
出 時 也 會 被 截
斷 到 這 個 值 。
HISTIGNORE 一 個 冒 號 分
隔 的 模 式 列 表
, 用 來 判 斷 那
個 命 令 行 應 當
保 存 在 歷 史 列
表 中 。 每 個 模
式 都 定 位 於 行
首 , 必 須 匹 配
整 行 (沒 有 假 定
添 加 ’*’)。 在
HISTCONTROL 指 定 的 測
試 結 束 後 , 這
裏 的 每 個 模 式
都 要 被 測 試 。
除 了 平 常 的 shell 模
式 匹 配 字 符 ,
’&’ 匹 配 上
一 個 歷 史 行 。
’&’ 可 以 使
用 反 斜 槓 來 轉
義 ; 反 斜 槓 在
嘗 試 匹 配 之 前
將 被 刪 除 。 多
行 的 組 合 命 令
的 第 二 行 以 及
後 續 行 都 不 會
被 測 試 , 不 管
HISTIGNORE 是 什 麼 ,
都 將 加 入 到 歷
史 中 。
HISTSIZE 命 令 歷 史 中
保 存 的 歷 史 數
量 (參 見 下 面 的
HISTORY 歷 史 章
節 )。 默 認 值 是
500。
|
HOME 當 前 用 戶 的
個 人 目 錄 ; 內
建 命 令 |
|
cd 的 默 認 參 數
。 在 執 行 波 浪
線 擴 展 時 也 |
用 到 這
個 變 量 。
HOSTFILE 包
含 一 個 格 式 和
/etc/hosts 相 同 的 文
件 名 , 當 shell 需 要
補 全 主 機 名 時
要 讀 取 它 。 shell 運
行 過 程 中 可 以
改 變 可 能 的 主
機 名 補 全 列 表
; 改 變 之 後 下
一 次 需 要 主 機
名 補 全 時 bash 會
將 新 文 件 的 內
容 添 加 到 舊 列
表 中 。 如 果 定
義 了 HOSTFILE 但
是 沒 有 賦 值 ,
bash 將 嘗 試 讀 取
/etc/hosts 文 件 來 獲
得 可 能 的 主 機
名 補 全 列 表 。
當 取 消 HOSTFILE
的 定 義 時 , 主
機 名 列 表 將 清
空 。
|
IFS 內 部 字 段 分
隔 符 |
|
Internal Field Separator 用 來
在 擴 展 之 後 進
行 分 |
詞 , 使
用 內 部 命 令 read
將 行 劃 分 成 詞
。 默 認 值 是
’’<space><tab><newline>’’。
IGNOREEOF 控
制 交 互 式 shell 接 受
到 唯 一 一 個
EOF 字 符 時
的 行 爲 。 如 果
有 定 義 , 值 是
需 要 在 一 行 的
開 始 連 續 輸 入
EOF 字 符 ,
直 到 可 以 使 bash
退 出 的 字 符 個
數 。 如 果 這 個
變 量 存 在 , 但
是 值 不 是 一 個
數 字 或 者 沒 有
賦 值 , 默 認 值
是 10。 如 果 變 量
沒 有 定 義 ,
EOF 標 誌 着
輸 入 的 結 束 。
INPUTRC
readline 的
啓 動 配 置 文 件
, 而 不 是 默 認
的 ~/.inputrc (參 見 下
面 的 READLINE 章
節 )。
|
LANG 用 來 決 定 沒
有 特 地 用 |
|
LC_ 變 量 指 定 的
語 言 環 境 項 。 |
|
|
LC_ALL 這 個 變 量
超 越 了 |
|
|
|
LANG 和 所
有 其 他 指 定 語
言 環 境 項 的 LC_
變 量 。
LC_COLLATE 這 個 變 量 決
定 了 爲 路 徑 擴
展 的 結 果 排 序
時 的 字 母 順 序
, 決 定 了 範 圍
表 達 式 的 行 爲
, 等 價 類 , 和
路 徑 擴 展 中 的
歸 併 順 序 以 及
模 式 匹 配 。
LC_CTYPE 這 個 變 量 決
定 了 字 符 的 解
釋 和 路 徑 擴 展
以 及 模 式 匹 配
中 字 符 類 的 行
爲 。
LC_MESSAGES 這 個 變 量 決
定 了 翻 譯 以 $
前 導 的 雙 引 號
字 符 串 時 的 語
言 環 境 。
LC_NUMERIC 這 個 變 量 決
定 了 格 式 化 數
字 時 的 語 言 環
境 分 類 。
|
LINES 內 建 命 令 |
|
select 用 它 來 判
斷 輸 出 選 擇 列
表 時 的 列 寬 度
。 在 收 到 |
SIGWINCH 信 號
時 自 動 設 置 。
|
MAIL 如 果
這 個 參 數 設 置
爲 一 個 文 件 名
, 並 且 沒 有 設
置 環 境 變 量 |
|
MAILPATH
的
話 , bash
將 在 這 個 文 件
中 通 知 用 戶 有
郵 件 到 達 。
MAILCHECK 指
定 bash 檢 查 郵 件
的 頻 率 是 多 少
, 以 秒 爲 單 位
。 默 認 值 是 60 秒
。 需 要 檢 查 郵
件 的 時 候 , shell 在
顯 示 提 示 符 之
前 將 進 行 檢 查
。 如 果 取 消 它
的 定 義 , 或 者
設 置 爲 並 非 大
於 等 於 零 的 數
值 , shell 將 禁 止 郵
件 檢 查 。
MAILPATH 一 個 冒 號 分
隔 的 文 件 名 列
表 , 從 中 檢 查
郵 件 。 當 郵 件
到 達 某 個 特 殊
文 件 中 時 , 輸
出 的 特 定 消 息
可 以 通 過 將 文
件 名 與 消 息 以
’?’ 分 隔 來 指 定
。 在 消 息 的 文
本 中 , $_ 擴 展
爲 當 前 郵 件 文
件 的 文 件 名 。
例 如 :
MAILPATH=’/var/mail/bfox?"You
have mail":~/shell-mail?"$_ has mail!"’
Bash 爲 這 個 變 量
提 供 默 認 值 ,
但 是 它 使 用 的
用 戶 郵 件 文 件
的 位 置 是 系 統
相 關 的 (例 如 ,
/var/mail/$USER)。
|
OPTERR 如 果 設 置
爲 |
|
1, bash 顯 示 內
建 命 令 getopts 產 生
的 錯 誤 消 息 (參
見 下 |
面 的
shell 內 建 命 令 (SHELL
BUILTIN COMMANDS) 章 節 )。
每 次 shell 啓 動 時 或
者 一 個 shell 腳 本 被
執 行 時 OPTERR
被 初 始 化 爲 1。
|
PATH 搜 索
命 令 的 路 徑 。
它 是 一 個 冒 號
分 割 的 目 錄 列
表 , |
|
shell 從 中 搜
索 命 令 |
(參 見 下
面 的 命 令 執
行 (COMMAND EXECUTION) 段 落
)。 默 認 的 路 徑
是 系 統 相 關 的
, 是 由 安 裝 bash
的 系 統 管 理 員
設 置 的 。 通 常
它 的 值 是
’’/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.’’。
POSIXLY_CORRECT 如
果 bash 啓 動 環 境
中 有 這 個 變 量
, 它 將 在 讀 取
啓 動 配 置 文 件
之 前 進 入 posix
mode, 就 好 像 提
供 了 --posix 啓 動 參
數 一 樣 。 如 果 shell
運 行 過 程 中 設
置 了 它 , bash 就
啓 用 posix mode, 就
好 像 執 行 了 set -o
posix 命 令 一 樣 。
PROMPT_COMMAND 如 果 有 定
義 , 它 的 值 將
作 爲 一 個 命 令
, 每 次 顯 示 主
提 示 符 之 前 都
會 執 行 。
|
PS1 這 個 參 數 的
值 被 擴 展 |
|
(參 見 下 面 的
PROMPTING 提 示 符
段 落 ), 用 作 主
提 |
示 符 字
符 串 。 默 認 值
是 ’’\s-\v\$
’’。
|
PS2 這 個
參 數 的 值 同 |
|
PS1 一 起
被 擴 展 , 用 作
次 提 示 符 字 符
串 。 默 認 值 是
’’> |
’’。
|
PS3 這 個
參 數 的 值 被 用
作 內 建 命 令 |
|
select 的 提
示 符 (參 見 上 面
的 SHELL |
GRAMMAR 語
法 章 節 )。
|
PS4 這 個
參 數 的 值 同 |
|
PS1 一 起
被 擴 展 , 在 執
行 跟 蹤 中 在 bash
顯 示 每 個 命 令 |
之 前 顯
示 。 需 要 的 話
, PS4 的 第
一 個 字 符 會 被
複 制 多 次 , 來
指 示 indirection 的 層 數
。 默 認 值 是
’’+ ’’。
TIMEFORMAT 在
前 綴 time 保 留 字 的
管 道 中 , 這 個
參 數 的 值 用 作
格 式 字 符 串 ,
指 定 計 時 信 息
如 何 顯 示 。 字
符 % 引 入 的 轉
義 序 列 , 被 擴
展 爲 時 間 值 或
其 他 信 息 。 轉
義 序 列 和 它 們
的 含 義 如 下 所
示 ; 括 號 中 是
可 選 的 成 分 。
|
%% 一 個 字 面 上
的 |
%。 |
|
|
%[p][l]R 經 歷 的
時 間 , 以 |
|
|
秒 計 算
。
|
|
|
|
|
|
%[p][l]U |
|
CPU 在 用 戶 模 式
下 執 行 的 秒 數
。 |
|
|
%[p][l]S |
|
CPU 在 系 統 模 式
下 執 行 的 秒 數
。 |
|
|
%P |
|
CPU 使 用 率 , 算
法 是 (%U + %S) / %R。 |
|
可 選 的
p 是 指 定 精 度
(小 數 點 後 數 字
位 數 ) 的 數 值 。
如 果 是 0 就 不 輸
出 小 數 點 或 小
數 值 。 最 多 指
定 到 小 數 點 後
三 位 ; 如 果 p
大 於 3 就 會 被 改
爲 3。 如 果 沒 有
指 定 p, 默 認
使 用 3。 可 選 的
l 指 定 了 長 格
式 , 包 含 分 鐘
, 格 式 是
MMmSS.FFs。 p 的
值 決 定 了 是 不
是 包 含 小 數 位
。 如 果 沒 有 設
置 這 個 值 , bash
假 定 它 的 值 是
$’\nreal\t%3lR\nuser\t%3lU\nsys%3lS’。
如 果 它 是 空 值
, 就 不 會 顯 示
計 時 信 息 。 顯
示 格 式 字 符 串
的 時 候 , 會 加
上 一 個 前 導 的
新 行 符 。
|
TMOUT 如 果
設 置 爲 大 於 |
|
0 的 值 ,
TMOUT 被 當 作 內 建
命 令 read 的 默 認
超 時 等 待 |
時 間 。
如 果 等 待 終 端
輸 入 時 , TMOUT 秒
之 後 仍 然 沒 有
輸 入 , select 命 令
將 終 止 。 在 交
互 的 shell 中 , 它 的
值 被 解 釋 爲 顯
示 了 主 提 示 符
之 後 等 待 輸 入
的 秒 數 。 如 果
經 過 這 個 秒 數
之 後 仍 然 沒 有
輸 入 , Bash 將 退
出 。
auto_resume 這
個 變 量 控 制 了 shell
如 何 與 用 戶 和
作 業 控 制 交 互
。 如 果 設 置 了
這 個 變 量 , 一
個 不 包 含 重 定
向 的 單 個 詞 的
簡 單 命 令 , 將
作 爲 恢 復 被 中
斷 的 作 業 的 指
示 。 不 允 許 出
現 模 棱 兩 可 的
情 況 ; 如 果 有
多 個 作 業 都 以
這 個 詞 起 始 ,
將 恢 復 最 近 運
行 的 作 業 。 在
這 種 情 形 下 ,
被 中 斷 的 作 業
的 name 是 用 於 啓
動 它 的 命 令 行
。 如 果 值 設 置
爲 exact, 給 出 的
字 符 串 必 須 精
確 匹 配 被 中 斷
的 作 業 名 ; 如
果 設 置 爲 substring,
給 出 的 字 符 串
需 要 匹 配 被 中
斷 的 作 業 名 的
子 串 。 值 substring
的 功 能 與 作 業
標 識 符 %? 功 能
類 似 (參 見 下 面
的 JOB CONTROL 作 業 控
制 章 節 )。 如
果 設 置 爲 任 何
其 他 值 , 給 出
的 字 符 串 必 須
是 被 中 斷 的 作
業 的 前 綴 ; 這
樣 做 與 作 業 標
識 符 % 功 能 類
似 。
histchars 兩 到 三 個 字
符 , 控 制 着 歷
史 擴 展 和 分 段
(tokenization, 參 見 下 面
的 HISTORY EXPANSION 歷 史
擴 展 章 節 )。
第 一 個 字 符 是
history expansion(歷 史 擴 展
) 字 符 , 這 個 字
符 表 明 了 歷 史
擴 展 的 開 始 ,
通 常 是 ’!’。
第 二 個 字 符 是
quick substitution(快 速 替
換 ) 字 符 , 它 是
重 新 運 行 上 次
輸 入 的 命 令 ,
但 將 命 令 中 的
字 符 串 替 換 爲
另 一 個 的 簡 寫
, 默 認 是
’^’。 可 選 的
第 三 個 字 符 是
指 示 如 果 作 爲
一 個 詞 的 開 始
, 那 麼 一 行 中
剩 餘 字 符 是 註
釋 。 通 常 這 個
字 符 是 ’#’。
歷 史 註 釋 字 符
使 得 對 一 行 中
剩 餘 字 符 在 歷
史 替 換 中 被 跳
過 。 它 不 一 定
使 shell 解 釋 器 將 這
一 行 的 剩 餘 部
分 當 作 註 釋 。
Arrays
Bash 提 供 了 一 維
數 組 變 量 。 任
何 變 量 都 可 以
作 爲 一 個 數 組
; 內 建 命 令 declare
可 以 顯 式 地 定
義 數 組 。 數 組
的 大 小 沒 有 上
限 , 也 沒 有 限
制 在 連 續 對 成
員 引 用 和 賦 值
時 有 什 麼 要 求
。 數 組 以 整 數
爲 下 標 , 從 0 開
始 。 如 果 變 量
賦 值 時 使 用 語
法 name[subscript]=value,
那 麼 就 會 自 動
創 建 數 組 。
subscript 被 當 作 一
個 算 術 表 達 式
, 結 果 必 須 是
大 於 等 於 0 的 值
。 要 顯 式 地 定
義 一 個 數 組 ,
使 用 declare -a name (參
見 下 面 的 shell 內
建 命 令 (SHELL BUILTIN
COMMANDS) 章 節 )。 也
可 以 用 declare -a
name[subscript] 這
時 subscript 被 忽 略
。 數 組 變 量 的
屬 性 可 以 用 內
建 命 令 declare 和
readonly 來 指 定 。 每
個 屬 性 對 於 所
有 數 組 元 素 都
有 效 。 數 組 賦
值 可 以 使 用 複
合 賦 值 的 方 式
, 形 式 是
name=(value1 ...
valuen), 這 裏 每
個 value 的 形 式 都
是 [subscript]=string。
string 必 須 出 現 。
如 果 出 現 了 可
選 的 括 號 和 下
標 , 將 爲 這 個
下 標 賦 值 , 否
則 被 賦 值 的 元
素 的 下 標 是 語
句 中 上 一 次 賦
值 的 下 標 加 一
。 下 標 從 0 開 始
。 這 個 語 法 也
被 內 建 命 令 declare
所 接 受 。 單 獨
的 數 組 元 素 可
以 用 上 面 介 紹
的 語 法
name[subscript]=value 來 賦
值 。 數 組 的 任
何 元 素 都 可 以
用 ${name[subscript]} 來 引
用 。 花 括 號 是
必 須 的 , 以 避
免 和 路 徑 擴 展
衝 突 。 如 果
subscript 是 @ 或 是
*, 它 擴 展 爲
name 的 所 有 成 員
。 這 兩 種 下 標
只 有 在 雙 引 號
中 才 不 同 。 在
雙 引 號 中 ,
${name[*]} 擴 展 爲 一
個 詞 , 由 所 有
數 組 成 員 的 值
組 成 , 用 特 殊
變 量 IFS 的
第 一 個 字 符 分
隔 ; ${name[@]} 將 name
的 每 個 成 員 擴
展 爲 一 個 詞 。
如 果 數 組 沒 有
成 員 , ${name[@]} 擴
展 爲 空 串 。 這
種 不 同 類 似 於
特 殊 參 數 * 和
@ 的 擴 展 (參 見
上 面 的 Special Parameters
段 落 )。
${#name[subscript]} 擴 展 爲
${name[subscript]} 的 長 度
。 如 果 subscript 是
* 或 者 是 @,
擴 展 結 果 是 數
組 中 元 素 的 個
數 。 引 用 沒 有
下 標 數 組 變 量
等 價 於 引 用 元
素 0。 內 建 命 令
unset 用 於 銷 燬 數
組 。 unset name[subscript]
將 銷 燬 下 標 是
subscript 的 元 素 。
unset name, 這 裏 name
是 一 個 數 組 ,
或 者 unset
name[subscript], 這 裏
subscript 是 * 或 者
是 @, 將 銷 燬
整 個 數 組 。 內
建 命 令 declare, local,
和 readonly 都 能 接 受
-a 選 項 , 從 而
指 定 一 個 數 組
。 內 建 命 令 read
可 以 接 受 -a 選
項 , 從 標 準 輸
入 讀 入 一 列 詞
來 爲 數 組 賦 值
。 內 建 命 令 set
和 declare 使 用 一 種
可 以 重 用 爲 輸
入 的 格 式 來 顯
示 數 組 元 素 。
命 令 行
的 擴 展 是 在 拆
分 成 詞 之 後 進
行 的 。 有 七 種
類 型 的 擴 展 :
brace expansion(花 括 號 擴
展 ), tilde expansion(波 浪
線 擴 展 ), parameter and variable
expansion(參 數 和 變 量
擴 展 ), command substitution(命
令 替 換 ), arithmetic
expansion(算 術 擴 展 ), word
splitting(詞 的 拆 分 ),
和 pathname expansion(路 徑
擴 展 ). 擴 展 的 順
序 是 : brace expansion, tilde expansion,
parameter, variable 和 arithmetic expansion 還
有 command substitution (按 照 從
左 到 右 的 順 序 ),
word splitting, 最 後 是 pathname
expansion. 還 有 一 種 附
加 的 擴 展 : process
subtitution (進 程 替 換 )
只 有 在 支 持 它
的 系 統 中 有 效
。 只 有 brace expansion, word splitting,
和 pathname expansion 在 擴 展
前 後 的 詞 數 會
發 生 改 變 ; 其
他 擴 展 總 是 將
一 個 詞 擴 展 爲
一 個 詞 。 唯 一
的 例 外 是 上 面
提 到 的 "$@" 和
"${name[@]}" (參
見 PARAMETERS參
數 )。
Brace
Expansion
Brace expansion 是 一 種 可
能 產 生 任 意 字
符 串 的 機 制 。
這 種 機 制 類 似
於 pathname expansion, 但 是
並 不 需 要 存 在
相 應 的 文 件 。
花 括 號 擴 展 的
模 式 是 一 個 可
選 的 preamble(前 導 字
符 ), 後 面 跟 着 一
系 列 逗 號 分 隔
的 字 符 串 , 包
含 在 一 對 花 括
號 中 , 再 後 面
是 一 個 可 選 的
postscript(附 言 )。 前
導 被 添 加 到 花
括 號 中 的 每 個
字 符 串 前 面 ,
附 言 被 附 加 到
每 個 結 果 字 符
串 之 後 , 從 左
到 右 進 行 擴 展
。 花 括 號 擴 展
可 以 嵌 套 。 擴
展 字 符 串 的 結
果 沒 有 排 序 ;
而 是 保 留 了 從
左 到 右 的 順 序
。 例 如 , a{d,c,b}e
擴 展 爲 ’ade ace abe’。
花 括 號 擴 展 是
在 任 何 其 他 擴
展 之 前 進 行 的
, 任 何 對 其 他
擴 展 有 特 殊 意
義 的 字 符 都 保
留 在 結 果 中 。
它 是 嚴 格 字 面
上 的 。 Bash 不 會
對 擴 展 的 上 下
文 或 花 括 號 中
的 文 本 做 任 何
語 義 上 的 解 釋
。 正 確 的 花 括
號 擴 展 必 須 包
含 沒 有 引 用 的
左 括 號 和 右 括
號 , 以 及 至 少
一 個 沒 有 引 用
的 逗 號 。 任 何
不 正 確 的 表 達
式 都 不 會 被 改
變 。 可 以 用 反
斜 槓 來 引 用 {
或 , 來 阻 止 將
它 們 識 別 爲 花
括 號 表 達 式 的
一 部 分 。 爲 了
避 免 與 參 數 擴
展 衝 突 , 字 符
串 ${ 不 被 認 爲
有 效 的 組 合 。
這 種 結 構 通 常
用 來 簡 寫 字 符
串 的 公 共 前 綴
遠 比 上 例 中 爲
長 的 情 況 , 例
如 :
mkdir
/usr/local/src/bash/{old,new,dist,bugs} 或 者
:
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} 花
括 號 擴 展 導 致
了 與 歷 史 版 本
的 sh 的 一 點 不
兼 容 。 在 左 括
號 或 右 括 號 作
爲 詞 的 一 部 分
出 現 時 , sh 不
會 對 它 們 進 行
特 殊 處 理 , 會
在 輸 出 中 保 留
它 們 。 Bash 將 括
號 從 花 括 號 擴
展 結 果 的 詞 中
刪 除 。 例 如 ,
向 sh 輸 入 file{1,2}
會 導 致 不 變 的
輸 出 。 同 樣 的
輸 入 在 bash 進 行
擴 展 之 後 , 會
輸 出 file1 file2 . 如 果
需 要 同 sh 嚴 格
地 保 持 兼 容 ,
需 要 在 啓 動 bash
的 時 候 使 用 +B
選 項 , 或 者 使
用 set 命 令 加 上
+B 選 項 來 禁 用
花 括 號 擴 展 (參
見 下 面 的 shell 內
建 命 令 (SHELL BUILTIN
COMMANDS) 章 節 )。
Tilde
Expansion 如 果 一 個 詞
以 沒 有 引 用 的
波 浪 線 字 符
(’~’) 開 始 , 所
有 在 第 一 個 沒
有 引 用 的 斜 線
(’/’) 之 前 的 字
符 (或 者 是 這 個
詞 的 所 有 字 符
, 如 果 沒 有 沒
引 用 的 斜 線 的
話 ) 都 被 認 爲 是
tilde-prefix(波 浪 線 前
綴 )。 如 果 tilde-prefix 中
沒 有 被 引 用 的
字 符 , 那 麼 波
浪 線 之 後 的 字
符 串 被 認 爲 是
login name(登 錄 名 )。
如 果 登 錄 名 是
空 字 符 串 , 波
浪 線 將 被 替 換
爲 shell 參 數 HOME
的 值 。 如 果 沒
有 定 義
HOME, 將 替
換 爲 執 行 此 shell 的
用 戶 的 個 人 目
錄 。 否 則 , tilde-prefix
被 替 換 爲 與 指
定 登 錄 名 相 聯
繫 的 個 人 目 錄
。 如 果 tilde-prefix 是
’~+’, 將 使 用 shell
變 量 PWD 的
值 來 替 換 。 如
果 tilde-prefix 是 ’~-’,
並 且 設 置 了 shell 變
量 OLDPWD,
將 使 用 這 個 變
量 值 來 替 換 。
如 果 在 tilde-prefix 中 ,
波 浪 線 之 後 的
字 符 串 由 一 個
數 字 N 組 成 ,
前 綴 可 選 的 ’+’
或 者 ’-’, 那 麼
tilde-prefix 將 被 替 換 爲
目 錄 棧 中 相 應
的 元 素 , 就 是
將 tilde-prefix 作 爲 參 數
執 行 內 建 命 令
dirs 顯 示 的 結 果
。 如 果 tilde-prefix 中 波
浪 線 之 後 的 字
符 是 一 個 數 字
, 沒 有 前 綴 ,
那 麼 就 假 定 有
一 個 ’+’。 如 果
登 錄 名 不 合 法
, 或 者 波 浪 線
擴 展 失 敗 , 這
個 詞 將 不 會 變
化 。 在 變 量 賦
值 中 , 對 於 :
或 = 之 後 的 字
符 串 會 立 即 檢
查 未 引 用 的
tilde-prefix。 這 種 情 況
下 , 仍 然 會 進
行 波 浪 線 擴 展
。 因 此 , 可 以
使 用 帶 波 浪 線
的 文 件 名 來 爲
PATH, MAILPATH,
和 CDPATH 賦 值
, shell 將 賦 予 擴 展
之 後 的 值 。
Parameter
Expansion 字 符 ’$’
引 入 了 參 數 擴
展 , 命 令 替 換
和 算 術 擴 展 。
要 擴 展 的 參 數
名 或 符 號 可 能
包 含 在 花 括 號
中 , 花 括 號 可
選 的 , 但 是 可
以 使 得 要 擴 展
的 變 量 不 會 與
緊 隨 其 後 的 字
符 合 並 , 成 爲
新 的 名 稱 。 使
用 花 括 號 的 時
候 , 匹 配 的 右
括 號 是 第 一 個
’}’, 並 且 它
沒 有 被 反 斜 槓
引 用 或 包 含 在
一 個 引 用 的 字
符 串 中 , 也 沒
有 包 含 在 一 個
嵌 入 的 算 術 擴
展 , 命 令 替 換
或 是 參 數 擴 展
中 。
${parameter} 被 替 換 爲
parameter 的 值 。 如
果 parameter 是 一 個
位 置 參 數 , 並
且 數 字 多 於 一
位 時 ; 或 者 當
緊 隨 parameter 之 後
有 不 屬 於 名 稱
一 部 分 的 字 符
時 , 都 必 須 加
上 花 括 號 。 如
果 parameter 的 第 一
個 字 符 是 一 個
感 嘆 號 , 將 引
進 一 層 間 接 變
量 。 bash 使 用 以
parameter 的 其 餘 部
分 爲 名 的 變 量
的 值 作 爲 變 量
的 名 稱 ; 接 下
來 新 的 變 量 被
擴 展 , 它 的 值
用 在 隨 後 的 替
換 當 中 , 而 不
是 使 用 parameter 自
身 的 值 。 這 也
稱 爲 indirect expansion(間
接 擴 展 ). 例 外 情
況 是 下 面 講 到
的 ${!prefix*}。 下 面
的 每 種 情 況 中
, word 都 要 經 過
波 浪 線 擴 展 ,
參 數 擴 展 , 命
令 替 換 和 算 術
擴 展 。 如 果 不
進 行 子 字 符 串
擴 展 , bash 測 試
一 個 沒 有 定 義
或 值 爲 空 的 參
數 ; 忽 略 冒 號
的 結 果 是 隻 測
試 未 定 義 的 參
數 。
${parameter:-word}
Use Default
Values(使 用 默 認 值
)。 如 果 parameter 未
定 義 或 值 爲 空
, 將 替 換 爲 word
的 擴 展 。 否 則
, 將 替 換 爲
parameter 的 值 。
${parameter:=word}
Assign Default
Values(賦 默 認 值 )。
如 果 parameter 未 定
義 或 值 爲 空 ,
word 的 擴 展 將 賦
予 parameter. parameter 的
值 將 被 替 換 。
位 置 參 數 和 特
殊 參 數 不 能 用
這 種 方 式 賦 值
。
${parameter:?word}
Display Error if Null or
Unset(顯 示 錯 誤 ,
如 果 未 定 義 或
值 爲 空 )。 如 果
parameter 未 定 義 或
值 爲 空 , word (或
一 條 信 息 , 如
果 word 不 存 在 ) 的
擴 展 將 寫 入 到
標 準 錯 誤 ; shell 如
果 不 是 交 互 的
, 則 將 退 出 。
否 則 , parameter 的
值 將 被 替 換 。
${parameter:+word}
Use Alternate
Value(使 用 可 選 值
)。 如 果 parameter 未
定 義 或 值 爲 空
, 不 會 進 行 替
換 ; 否 則 將 替
換 爲 word 擴 展 後
的 值 。
${parameter:offset}
${parameter:offset:length}
Substring
Expansion(子 字 符 串 擴
展 )。 擴 展 爲
parameter 的 最 多 length
個 字 符 , 從 offset
指 定 的 字 符 開
始 。 如 果 忽 略
了 length, 擴 展 爲
parameter 的 子 字 符
串 , 從 offset 指 定
的 字 符 串 開 始
。 length 和 offset 是
算 術 表 達 式 (參
見 下 面 的 ARITHMETIC
EVALUATION 算 術 求 值
段 落 )。 length 必 須
是 一 個 大 於 等
於 0 的 數 值 。 如
果 offset 求 值 結 果
小 於 0, 值 將 當
作 從 parameter 的 值
的 末 尾 算 起 的
偏 移 量 。 如 果
parameter 是 @, 結 果
是 length 個 位 置 參
數 , 從 offset 開 始
。 如 果 parameter 是
一 個 數 組 名 ,
以 @ 或 * 索 引 , 結
果 是 數 組 的 length
個 成 員 , 從
${parameter[offset]} 開 始
。 子 字 符 串 的
下 標 是 從 0 開 始
的 , 除 非 使 用
位 置 參 數 時 ,
下 標 從 1 開 始 。
${!prefix*}
擴 展 爲 名 稱 以
prefix 開 始 的 變 量
名 , 以 特 殊 變
量 IFS 的 第
一 個 字 符 分 隔
。
${#parameter} 替 換 爲
parameter 的 值 的 長
度 (字 符 數 目 )。
如 果 parameter 是 *
或 者 是 @, 替 換
的 值 是 位 置 參
數 的 個 數 。 如
果 parameter 是 一 個
數 組 名 , 下 標
是 * 或 者 是 @,
替 換 的 值 是 數
組 中 元 素 的 個
數 。
${parameter#word}
${parameter##word}
word 被 擴
展 爲 一 個 模 式
, 就 像 路 徑 擴
展 中 一 樣 。 如
果 這 個 模 式 匹
配 parameter 的 值 的
起 始 , 那 麼 擴
展 的 結 果 是 將
parameter 擴 展 後 的
值 中 , 最 短 的
匹 配 (’’#’’
的 情 況 ) 或 者 最
長 的 匹 配
(’’##’’的 情
況 ) 刪 除 的 結 果
。 如 果 parameter 是
@ 或 者 是 *, 則
模 式 刪 除 操 作
將 依 次 施 用 於
每 個 位 置 參 數
, 最 後 擴 展 爲
結 果 的 列 表 。
如 果 parameter 是 一
個 數 組 變 量 ,
下 標 是 @ 或 者
是 *, 模 式 刪 除
將 依 次 施 用 於
數 組 中 的 每 個
成 員 , 最 後 擴
展 爲 結 果 的 列
表 。
${parameter%word}
${parameter%%word}
word 被 擴
展 爲 一 個 模 式
, 就 像 路 徑 擴
展 中 一 樣 。 如
果 這 個 模 式 匹
配 parameter 擴 展 後
的 值 的 尾 部 ,
那 麼 擴 展 的 結
果 是 將 parameter 擴
展 後 的 值 中 ,
最 短 的 匹 配
(’’%’’ 的 情
況 ) 或 者 最 長 的
匹 配
(’’%%’’的 情
況 ) 刪 除 的 結 果
。 如 果 parameter 是
@ 或 者 是 *, 則
模 式 刪 除 操 作
將 依 次 施 用 於
每 個 位 置 參 數
, 最 後 擴 展 爲
結 果 的 列 表 。
如 果 parameter 是 一
個 數 組 變 量 ,
下 標 是 @ 或 者
是 *, 模 式 刪 除
將 依 次 施 用 於
數 組 中 的 每 個
成 員 , 最 後 擴
展 爲 結 果 的 列
表 。
${parameter/pattern/string}
${parameter//pattern/string}
patterm 被
擴 展 爲 一 個 模
式 , 就 像 路 徑
擴 展 中 一 樣 。
parameter 被 擴 展 ,
其 值 中 最 長 的
匹 配 pattern 的 內 容
被 替 換 爲 string。
在 第 一 種 形 式
中 , 只 有 第 一
個 匹 配 被 替 換
。 第 二 種 形 式
使 得 pattern 中 所 有
匹 配 都 被 替 換
爲 string。 如 果
pattern 以 # 開 始 ,
它 必 須 匹 配
parameter 擴 展 後 值
的 首 部 。 如 果
pattern 以 % 開 始 ,
它 必 須 匹 配
parameter 擴 展 後 值
的 尾 部 。 如 果
string 是 空 值 ,
pattern 的 匹 配 都 將
被 刪 除 , pattern 之
後 的 / 將 被 忽
略 。 如 果 parameter
是 @ 或 者 是 *,
則 替 換 操 作 將
依 次 施 用 於 每
個 位 置 參 數 ,
最 後 擴 展 爲 結
果 的 列 表 。 如
果 parameter 是 一 個
數 組 變 量 , 下
標 是 @ 或 者 是
*, 模 式 刪 除 將
依 次 施 用 於 數
組 中 的 每 個 成
員 , 最 後 擴 展
爲 結 果 的 列 表
。
Command
Substitution 命 令 替 換
(Command substitution) 允 許 以
命 令 的 輸 出 替
換 命 令 名 。 有
兩 種 形 式 :
$(command)
還 有
’command’
Bash
進 行 擴 展 的 步
驟 是 執 行 command,
以 它 的 標 準 輸
出 替 換 它 , 並
且 將 所 有 後 續
的 新 行 符 刪 除
。 內 嵌 的 新 行
符 不 會 刪 除 ,
但 是 它 們 可 能
會 在 詞 的 拆 分
中 被 刪 除 。 命
令 替 換 $(cat file)
可 以 用 等 價 但
是 更 快 的 方 法
$(< file) 代 替 。
當 使 用 舊 式 的
反 引 號 ("’’")
替 換 形 式 時 ,
反 斜 槓 只 有 其
字 面 意 義 , 除
非 後 面 是 $,
’, 或 者 是 \.
第 一 個 前 面 沒
有 反 斜 槓 的 反
引 號 將 結 束 命
令 替 換 。 當 使
用 $(command) 形 式 時
, 括 號 中 所 有
字 符 組 成 了 整
個 命 令 ; 沒 有
被 特 殊 處 理 的
字 符 。 命 令 替
換 可 以 嵌 套 。
要 在 使 用 反 引
號 形 式 時 嵌 套
, 可 以 用 反 斜
槓 來 轉 義 內 層
的 反 引 號 。 如
果 替 換 髮 生 在
雙 引 號 之 中 ,
結 果 將 不 進 行
詞 的 拆 分 和 路
徑 擴 展 。
Arithmetic
Expansion 算 術 擴 展 允
許 算 術 表 達 式
的 求 值 和 結 果
的 替 換 。 算 術
擴 展 的 格 式 是
:
$((expression))
表 達 式 expression 被
視 爲 如 同 在 雙
引 號 之 中 一 樣
, 但 是 括 號 中
的 雙 引 號 不 會
被 特 殊 處 理 。
表 達 式 中 所 有
詞 都 經 過 了 參
數 擴 展 , 字 符
串 擴 展 , 命 令
替 換 和 引 用 的
刪 除 。 算 術 替
換 可 以 嵌 套 。
求 值 根 據 下 面
算 術 求 值 (ARITHMETIC
EVALUATION) 章 節 中 列
出 的 規 則 進 行
。 如 果 表 達 式
expression 非 法 , bash
輸 出 錯 誤 提 示
消 息 , 不 會 進
行 替 換 。
Process
Substitution
Process substitution (進 程 替
換 ) 只 有 在 支 持
命 名 管 道 (FIFOs),
或 者 支 持 使 用
/dev/fd 方 式 爲 打 開
的 文 件 命 名 的
系 統 中 才 可 用
。 它 的 形 式 是
<(list) 或 者 是
>(list)。 進 程
list 運 行 時 的 輸
入 或 輸 出 被 連
接 到 一 個 FIFO 或
者 /dev/fd 中 的 文 件
。 文 件 的 名 稱
作 爲 一 個 參 數
被 傳 遞 到 當 前
命 令 , 作 爲 擴
展 的 結 果 。 如
果 使 用 >(list)
形 式 , 向 文 件
寫 入 相 當 於 爲
list 提 供 輸 入 。
如 果 使 用
<(list) 形 式 ,
可 以 讀 作 爲 參
數 傳 遞 的 文 件
來 獲 得 list 的 輸
出 。 如 果 可 能
的 話 , 進 程 替
換 是 與 參 數 和
變 量 擴 展 , 命
令 替 換 和 算 術
擴 展 同 時 發 生
的 。
Word
Splitting
shell 檢 測 不 在 雙 引
號 引 用 中 發 生
的 參 數 擴 展 ,
命 令 替 換 和 算
術 擴 展 的 結 果
, 進 行 word splitting(詞
的 拆 分 )。
shell 將
IFS 的 每 個
字 符 都 作 爲 定
界 符 , 根 據 這
些 字 符 來 將 其
他 擴 展 的 結 果
分 成 詞 。 如 果
IFS 沒 有 定
義 , 或 者 它 的
值 是 默 認 的
<space><tab><newline>, 那
麼 IFS 字 符
的 任 何 序 列 都
將 作 爲 分 界 之
用 。 如 果
IFS 的 值 是
默 認 之 外 的 值
, 那 麼 詞 開 頭
和 結 尾 的 空 白
字 符 space 和 tab 都
將 被 忽 略 , 只
要 空 白 字 符 在
IFS 的 值 之
內 (即 , IFS
包 含 空 白 字 符
)。 任 何 在
IFS 之 中 但
是 不 是 IFS
空 白 的 字 符 ,
以 及 任 何 相 鄰
的 IFS 空 白
字 符 , 將 字 段
分 隔 開 來 。
IFS 空 白 字
符 的 序 列 也 被
作 爲 分 界 符 。
如 果 IFS 的
值 是 空 , 不 會
發 生 詞 的 拆 分
。 顯 式 給 出 的
空 值 參 數 (""
或 ’’) 將 被 保
留 。 隱 含 的 空
值 參 數 , 來 自
於 空 值 的 參 數
擴 展 , 如 果 沒
有 引 用 則 將 被
刪 除 。 如 果 空
值 的 參 數 在 雙
引 號 引 用 中 擴
展 , 結 果 是 空
值 的 參 數 , 將
被 保 留 。 注 意
如 果 沒 有 發 生
擴 展 , 不 會 進
行 詞 的 拆 分 。
Pathname
Expansion 詞 的 拆 分 之
後 , 除 非 設 置
過 -f 選 項 , bash
搜 索 每 個 詞 ,
尋 找 字 符 *, ?,
和 [. 如 果 找 到
了 其 中 之 一 ,
那 麼 這 個 詞 被
當 作 一 個 pattern(模
式 ), 被 替 換 爲
匹 配 這 個 模 式
的 文 件 名 以 字
母 順 序 排 列 的
列 表 。 如 果 沒
有 找 到 匹 配 的
文 件 名 , 並 且 shell
禁 用 了 nullglob 選 項
, 這 個 詞 將 不
發 生 變 化 。 如
果 設 置 了 nullglob 選
項 並 且 沒 有 找
到 匹 配 , 這 個
詞 將 被 刪 除 。
如 果 啓 用 了
nocaseglob 選 項 , 匹
配 時 將 不 考 慮
字 母 的 大 小 寫
。 當 模 式 用 作
路 徑 名 擴 展 時
, 字 符
’’.’’ 如 果
在 一 個 名 稱 的
開 始 或 者 緊 隨
一 個 斜 槓 之 後
, 那 麼 它 必 須
被 顯 式 地 匹 配
, 除 非 設 置 了
dotglob shell 選 項 。 當
匹 配 一 個 路 徑
名 時 , 斜 槓 符
必 須 被 顯 式 地
匹 配 。 其 他 情
況 下 , 字 符
’’.’’ 不 會
被 特 殊 對 待 。
參 見 下 面 的 shell
內 建 命 令 (SHELL BUILTIN
COMMANDS) 中 對 shopt
的 介 紹 , 其 中
有 shell 選 項 nocaseglob,
nullglob, 和 dotglob 的 描
述 。 環 境 變 量
GLOBIGNORE 可 以 用
來 限 制 匹 配 pattern
的 文 件 名 集 合
。 如 果 設 置 了
GLOBIGNORE, 每 個
匹 配 的 文 件 名
如 果 匹 配
GLOBIGNORE 中 任 何
一 個 模 式 的 話
將 從 匹 配 的 列
表 中 刪 除 。 文
件 名 ’’.’’
和 ’’..’’ 總
是 被 忽 略 , 即
使 設 置 了
GLOBIGNORE。 但 是
, 設 置 GLOBIGNORE
和 啓 用 shell 選 項
dotglob 效 果 是 相 同
的 , 因 此 所 有
其 他 以
’’.’’ 開 頭
的 文 件 名 將 被
匹 配 。 要 得 到
原 來 的 行 爲 (忽
略 所 有 以
’’.’’ 開 頭
的 文 件 名 ), 可
以 將 ’’.*’’
添 加 爲 GLOBIGNORE
的 模 式 之 一 。
選 項 dotglob 被 禁 用
, 如 果 GLOBIGNORE
沒 有 定 義 時 。
Pattern
Matching 任 何 模 式 中
出 現 的 字 符 ,
除 了 下 面 描 述
的 特 殊 模 式 字
符 外 , 都 匹 配
它 本 身 。 模 式
中 不 能 出 現 NUL 字
符 。 如 果 要 匹
配 字 面 上 的 特
殊 模 式 字 符 ,
它 必 須 被 引 用
。 特 殊 模 式 字
符 有 下 述 意 義
:
|
* 匹 配 任 何 字
符 串 包 含 空 串
。 |
|
|
|
? 匹 配 任 何 單
個 字 符 。 |
|
|
|
[...] 匹 配 所 包
含 的 任 何 字 符
之 一 。 用 一 個
連 字 符 |
|
(’-’) 分 隔 的 一
對 字 符 意 思 |
是 一 個
range expression (範 圍 表 達
式 ); 任 何 排 在
它 們 之 間 的 字
符 , 包 含 它 們
, 都 被 匹 配 。
排 序 使 用 當 前
語 言 環 境 的 字
符 順 序 和 字 符
集 。 如 果 [ 之
後 的 第 一 個 字
符 是 一 個 ! 或
是 一 個 ^ 那 麼
任 何 不 包 含 在
內 的 字 符 將 被
匹 配 。 範 圍 表
達 式 中 字 符 的
順 序 是 由 當 前
語 言 環 境 和 環
境 變 量 LC_COLLATE 的
值 (如 果 設 置 了
的 話 ) 決 定 的 。
一 個 - 只 有 作
爲 集 合 中 第 一
個 或 最 後 一 個
字 符 時 才 能 被
匹 配 。 一 個 ]
只 有 是 集 合 中
第 一 個 字 符 時
才 能 被 匹 配 。
在 [ 和 ] 中 ,
character classes (字 符 類 )
可 以 用 [:class:]
這 樣 的 語 法 來
指 定 , 這 裏 class
是 在 POSIX.2 標 準 中
定 義 的 下 列 類
名 之 一 :
alnum alpha ascii blank cntrl digit graph lower print punct
space upper word xdigit 一 個 字
符 類 匹 配 任 何
屬 於 這 一 類 的
字 符 。 word 字 符
類 匹 配 字 母 ,
數 字 和 字 符 _。
在 [ 和 ] 中 ,
可 以 用 [=c=]
這 樣 的 語 法 來
指 定 equivalence class (等
價 類 )。 它 匹 配
與 字 符 c 有 相
同 歸 併 權 值 (collation
weight, 由 當 前 語 言
環 境 定 義 ) 的 字
符 。 在 [ 和 ]
中 , 語 法
[.symbol.] 匹 配 歸
併 符 號 (collating symbol)
symbol。 如 果 使 用
內 建 命 令 shopt 啓
用 了 shell 選 項
extglob, 將 識 別 另
外 幾 種 模 式 匹
配 操 作 符 。 下
面 的 描 述 中 ,
pattern-list 是 一 個 或
多 個 模 式 以 |
分 隔 的 列 表 。
複 合 的 模 式 可
以 使 用 一 個 或
多 個 下 列 的 子
模 式 構 造 出 來
:
?(pattern-list) 匹 配 所
給 模 式 零 次 或
一 次 出 現
*(pattern-list) 匹 配 所
給 模 式 零 次 或
多 次 出 現
+(pattern-list) 匹 配 所
給 模 式 一 次 或
多 次 出 現
@(pattern-list) 準 確 匹
配 所 給 模 式 之
一
!(pattern-list) 任 何 除
了 匹 配 所 給 模
式 之 一 的 字 串
Quote
Removal 經 過 前 面 的
擴 展 之 後 , 所
有 未 引 用 的 字
符 \, ’, 以 及
並 非 上 述 擴 展
結 果 的 字 符 "
都 被 刪 除 。
在 命 令
執 行 前 , 它 的
輸 入 和 輸 出 可
能 被 redirected (重 定 向
), 使 用 一 種 shell
可 以 解 釋 的 特
殊 記 法 。 重 定
向 也 可 以 用 於
爲 當 前 shell 執 行 環
境 打 開 和 關 閉
文 件 。 下 列 重
定 向 操 作 符 可
以 前 置 或 者 放
在 simple command (簡 單 命
令 ) 之 中 的 任 何
位 置 , 或 者 放
在 command 之 後 。 重
定 向 是 以 出 現
的 順 序 進 行 處
理 的 , 從 左 到
右 。 下 列 描 述
中 , 如 果 文 件
描 述 符 被 忽 略
, 並 且 第 一 個
重 定 向 操 作 符
是 <, 那 麼 重 定
向 指 的 是 標 準
輸 入 (文 件 描 述
符 是 0)。 如 果 重
定 向 操 作 符 的
第 一 個 字 符 是
>, 那 麼 重 定 向
指 的 是 標 準 輸
出 (文 件 描 述 符
是 1)。 下 列 描 述
中 , 重 定 向 操
作 符 之 後 的 詞
如 果 沒 有 特 殊
說 明 , 都 要 經
過 brace expansion, tilde expansion, parameter
expansion, command substitution, arithmetic expansion, quote
removal, pathname expansion, 還 有 word
splitting。 如 果 擴 展
爲 多 於 一 個 詞
, bash 將 報 錯 。
注 意 重 定 向 的
順 序 非 常 重 要
。 例 如 , 命 令
ls >
dirlist 2>&1 將 標 準
輸 出 和 標 準 錯
誤 重 定 向 到 文
件 dirlist, 而 命 令
ls
2>&1 > dirlist 只 會
將 標 準 輸 出 重
定 向 到 文 件 dirlist,
因 爲 在 標 準 輸
出 被 重 定 向 到
文 件 dirlist 中 之 前
, 標 準 錯 誤 被
複 製 爲 標 準 輸
出 。 一 些 文 件
名 在 重 定 向 中
被 bash 特 殊 處 理
, 如 下 表 所 示
:
/dev/fd/fd 如 果 fd 是
一 個 合 法 的 整
數 , 文 件 描 述
符 fd 將 被 複 制
。
/dev/stdin 文 件 描 述 符
0 被 複 制 。
/dev/stdout 文 件 描 述 符
1 被 複 制 。
/dev/stderr 文 件 描 述 符
2 被 複 制 。
/dev/tcp/host/port 如
果 host 是 一 個 合
法 的 主 機 名 或
Internet 地 址 , 並 且
port 是 一 個 整 數
端 口 號 或 服 務
名 , bash 試 圖 建
立 與 相 應 的 socket
(套 接 字 ) 的 TCP 連 接
。
/dev/udp/host/port 如
果 host 是 一 個 合
法 的 主 機 名 或
Internet 地 址 , 並 且
port 是 一 個 整 數
端 口 號 或 服 務
名 , bash 試 圖 建
立 與 相 應 的 socket
(套 接 字 ) 的 UDP 連 接
。 打 開 或 創 建
文 件 錯 誤 將 導
致 重 定 向 出 錯
。
Redirecting
Input 重 定 向 輸 入
使 得 以 word 擴 展
結 果 爲 名 的 文
件 被 打 開 並 通
過 文 件 描 述 符
n 讀 取 , 如 果
沒 有 指 定 n 那
麼 就 作 爲 標 準
輸 入 (文 件 描 述
符 爲 0) 讀 取 。 重
定 向 輸 入 的 一
般 形 式 是 :
[n]<word
Redirecting
Output 重 定 向 輸 出
使 得 以 word 擴 展
結 果 爲 名 的 文
件 被 打 開 並 通
過 文 件 描 述 符
n 寫 入 , 如 果
沒 有 指 定 n 那
麼 就 作 爲 標 準
輸 出 (文 件 描 述
符 爲 1) 寫 入 。 重
定 向 的 一 般 形
式 是 :
[n]>word
如 果 重 定 向 操
作 符 是 >, 並
且 啓 用 了 內 建
命 令 set 的 noclobber
選 項 , 那 麼 如
果 word 擴 展 後 得
到 的 文 件 名 存
在 並 且 是 一 個
普 通 的 文 件 ,
重 定 向 將 失 敗
。 如 果 重 定 向
操 作 符 是 >|, 或
者 重 定 向 操 作
符 是 > 並 且 沒
有 啓 用 內 建 命
令 set 的 noclobber 選
項 , 那 麼 即 使
word 得 出 的 文 件
名 存 在 , 也 會
嘗 試 進 行 重 定
向 。
Appending
Redirected Output (添 加 到 重
定 向 後 的 輸 出
尾 部 ) 這 種 方 式
的 輸 出 重 定 向
使 得 以 word 擴 展
結 果 爲 名 的 文
件 被 打 開 並 通
過 文 件 描 述 符
n 從 尾 部 添 加
。 如 果 沒 有 指
定 n 就 使 用 標
準 輸 出 (文 件 描
述 符 1)。 如 果 文
件 不 存 在 , 它
將 被 創 建 。 重
定 向 的 一 般 形
式 是 :
[n]>>word
Redirecting
Standard Output and Standard Error
Bash 允 許 使 用 這
種 結 構 將 標 準
輸 出 和 標 準 錯
誤 (文 件 描 述 符 1
和 2) 重 定 向 到 以
word 擴 展 結 果 爲
名 的 文 件 中 。
有 兩 種 重 定 向
標 準 輸 出 /標 準
錯 誤 的 形 式 :
&>word
還 有 >&word 兩
種 形 式 中 , 推
薦 使 用 第 一 種
。 它 與 >word
2>&1 在 語 義 上
等 價 。
Here
Documents 這 種 重 定 向
使 得 shell 從 當 前 源
文 件 讀 取 輸 入
, 直 到 遇 到 僅
包 含 word 的 一 行
(並 且 沒 有 尾 部
空 白 , trailing blanks) 爲
止 。 直 到 這 一
點 的 所 有 行 被
用 作 命 令 的 標
準 輸 入 。
here-document
的 格 式 是 :
<<[-]word
here-document
delimiter 不 會 對word 進
行 parameter expansion, command substitution,
arithmetic expansion, 或 者 pathname
expansion。 如 果 word 中
任 何 字 符 是 引
用 的 , delimiter 將
是 對 word 進 行 引
用 刪 除 的 結 果
, here-document 中 的 行 不
會 被 擴 展 。 如
果 word 沒 有 被 引
用 , here-documnet 中 的 所
有 行 都 要 經 過
parameter expansion, command substitution, 和
arithmetic expansion。 在 後 一
種 情 況 下 , 字
符 序 列 \<newline> 被
忽 略 ; 必 須 用
\ 來 引 用 字 符
\, $, 和 ’. 如
果 重 定 向 操 作
符 是 <<-, 那 麼
所 有 前 導 的 tab 字
符 都 被 從 輸 入
行 和 包 含 delimiter
的 行 中 刪 除 。
這 樣 使 得 shell 腳 本
中 的 here-document 可 以 被
更 好 地 縮 進 。
Here
Strings
here-document 的 變 種 , 形
式 是
<<<word
word
被 擴 展 , 提 供
給 命 令 作 爲 標
準 輸 入 。
Duplicating
File Descriptors (複 製 文 件
描 述 符 ) 重 定 向
操 作 符
[n]<&word
用 於 複 製 文 件
描 述 符 。 如 果
word 擴 展 爲 一 個
或 多 個 數 字 ,
n 代 表 的 文 件
描 述 符 將 成 爲
那 個 文 件 描 述
符 的 複 製 。 如
果 word 中 的 數 字
並 未 指 定 一 個
被 用 於 讀 取 的
文 件 描 述 符 ,
將 產 生 一 個 重
定 向 錯 誤 。 如
果 word 擴 展 爲 -,
文 件 描 述 符 n
將 被 關 閉 。 如
果 沒 有 指 定
n, 將 使 用 標
準 輸 入 (文 件 描
述 符 0)。 類 似 的
, 操 作 符
[n]>&word
用 於 複 製 輸 出
文 件 描 述 符 。
如 果 沒 有 指 定
n, 將 使 用 標
準 輸 出 (文 件 描
述 符 1)。 如 果 word
中 的 數 字 並 未
指 定 一 個 被 用
於 輸 出 的 文 件
描 述 符 , 將 產
生 一 個 重 定 向
錯 誤 。 特 殊 情
況 下 , 如 果 忽
略 了 n, 並 且
word 並 非 擴 展 爲
一 個 或 多 個 數
字 , 標 準 輸 出
和 標 準 錯 誤 將
被 重 定 向 , 和
前 面 描 述 的 一
樣 。
Moving File
Descriptors 重 定 向 操 作
符
[n]<&digit-
將 文 件 描 述 符
digit 移 動 爲 文 件
描 述 符 n, 或 標
準 輸 入 (文 件 描
述 符 0), 如 果 沒
有 指 定 n 的 話
。 digit 複 製 爲 n
之 後 就 被 關 閉
了 。 類 似 的 ,
重 定 向 操 作 符
[n]>&digit-
將 文 件 描 述 符
digit 移 動 爲 文 件
描 述 符 n, 或 標
準 輸 出 (文 件 描
述 符 1), 如 果 沒
有 指 定 n 的 話
。
Opening File
Descriptors for Reading and Writing 重 定
向 操 作 符
[n]<>word
使 得 以 word 擴 展
結 果 爲 名 的 文
件 被 打 開 , 通
過 文 件 描 述 符
n 進 行 讀 寫 。
如 果 沒 有 指 定
n 那 麼 就 使 用
文 件 描 述 符 0。
如 果 文 件 不 存
在 , 它 將 被 創
建 。
Aliases
(別 名 機 制 ) 允 許
將 一 個 詞 來 替
換 爲 一 個 字 符
串 , 如 果 它 是
一 個 簡 單 命 令
的 第 一 個 詞 的
話 。 shell 記 錄 着 一
個 別 名 列 表 ,
可 以 使 用 內 建
命 令 alias 和 unalias
來 定 義 和 取 消
(參 見 下 面 的
shell 內 建 命 令 (SHELL
BUILTIN COMMANDS) 章 節 )。
每 個 命 令 的 第
一 個 詞 , 如 果
沒 有 引 用 , 都
將 被 檢 查 是 否
是 一 個 別 名 。
如 果 是 , 這 個
詞 將 被 它 所 指
代 的 文 本 替 換
。 別 名 和 替 換
的 文 本 可 以 包
含 任 何 有 效 的 shell
輸 入 , 包 含 上
面 列 出 的 metacharacters
(元 字 符 ) , 特 殊
情 況 是 別 名 中
不 能 包 含 =。
替 換 文 本 的 第
一 個 詞 也 被 檢
查 是 否 是 別 名
, 但 是 如 果 它
與 被 替 換 的 別
名 相 同 , 就 不
會 再 替 換 第 二
次 。 這 意 味 着
可 以 用 ls 作 爲 ls
-F 的 別 名 , bash
不 會 遞 歸 地 展
開 替 換 文 本 。
如 果 別 名 的 最
後 一 個 字 符 是
blank, 那 麼 命 令 中
別 名 之 後 的 下
一 個 詞 也 將 被
檢 查 是 否 能 進
行 別 名 展 開 。
別 名 可 以 使 用
alias 命 令 來 創 建
或 列 舉 出 來 ,
使 用 unalias 命 令 來
刪 除 。 在 替 換
文 本 中 沒 有 參
數 機 制 。 如 果
需 要 參 數 , 應
當 使 用 shell 函 數 (參
見 下 面 的 FUNCTIONS
(函 數 ) 段 落 )。
如 果 shell 不 是 交 互
的 , 別 名 將 不
會 展 開 , 除 非
使 用 內 建 命 令
shopt 設 置 了
expand_aliases 選 項 。 關
於 別 名 的 定 義
和 使 用 中 的 規
則 比 較 混 亂 。
Bash 在 執 行 一 行
中 的 任 何 命 令
之 前 , 總 是 讀
入 至 少 完 整 一
行 的 輸 入 。 別
名 在 命 令 被 讀
取 時 展 開 , 而
不 是 在 執 行 的
時 候 。 因 此 ,
別 名 定 義 如 果
和 另 一 個 命 令
在 同 一 行 , 那
麼 不 會 起 作 用
, 除 非 讀 入 了
下 一 行 。 別 名
定 義 之 後 , 同
一 行 中 的 命 令
不 會 受 新 的 別
名 影 響 。 這 種
行 爲 在 函 數 執
行 時 存 在 爭 議
, 因 爲 別 名 替
換 是 在 函 數 定
義 被 讀 取 時 發
生 的 , 而 不 是
函 數 被 執 行 的
時 候 , 因 爲 函
數 定 義 本 身 是
一 個 複 合 命 令
。 結 果 , 在 函
數 中 定 義 的 別
名 只 有 當 這 個
函 數 執 行 完 纔
會 生 效 。 爲 了
保 險 起 見 , 應
當 總 是 將 別 名
定 義 放 在 單 獨
的 一 行 , 不 在
複 合 命 令 中 使
用 alias。 不 管 什
麼 情 況 下 , 別
名 都 被 shell 函 數 超
越 (be superseded)。
一 個 shell 函
數 , 以 上 面 SHELL
GRAMMAR 中 描 述 的
方 法 定 義 , 保
存 着 一 系 列 的
命 令 , 等 待 稍
後 執 行 。 當 shell 函
數 名 作 爲 一 個
簡 單 命 令 名 使
用 時 , 這 個 函
數 名 關 聯 的 命
令 的 序 列 被 執
行 。 函 數 在 當
前 shell 的 上 下 文 環
境 中 執 行 ; 不
會 創 建 新 的 進
程 來 解 釋 它 們
(這 與 shell 腳 本 的 執
行 形 成 了 對 比
)。 當 執 行 函 數
時 , 函 數 的 參
數 成 爲 執 行 過
程 中 的 位 置 參
數 (positional parameters)。 特 殊
參 數 # 被 更 新
以 反 映 這 個 變
化 。 位 置 參 數 0
不 會 改 變 。 函
數 執 行 時 ,
FUNCNAME 變 量 被
設 置 爲 函 數 的
名 稱 。 函 數 和
它 的 調 用 者 在 shell
執 行 環 境 的 所
有 其 他 方 面 都
是 一 樣 的 , 特
殊 情 況 是
DEBUG 陷 阱 (參
見 下 面 對 內 建
函 數 trap 的 描 述
, 在 shell 內 建 命
令 (SHELL BUILTIN COMMANDS) 章
節 中 ) 不 會 被 繼
承 , 除 非 函 數
設 置 了 trace 屬 性
(參 見 下 面 對 內
建 函 數 declare
的 描 述 )。 函 數
中 的 局 部 變 量
可 以 使 用 內 建
命 令 local 來 聲 明
。 通 常 情 況 下
, 變 量 和 它 們
的 值 在 函 數 和
它 的 調 用 者 之
間 是 共 享 的 。
如 果 函 數 中 執
行 了 內 建 命 令
return, 那 麼 函 數
結 束 , 執 行 從
函 數 調 用 之 後
的 下 一 個 命 令
開 始 。 函 數 結
束 後 , 位 置 參
數 的 值 以 及 特
殊 參 數 # 都 將
重 置 爲 它 們 在
函 數 執 行 前 的
值 。 函 數 名 和
定 義 可 以 使 用
內 建 命 令 declare 或
typeset 加 上 -f 參 數
來 列 出 。 如 果
在 declare 或 typeset 命
令 中 使 用 -F 選
項 將 只 列 出 函
數 名 。 函 數 可
以 使 用 內 建 命
令 export 加 上 -f 參
數 導 出 , 使 得
子 shell 中 它 們 被 自
動 定 義 。 函 數
可 以 是 遞 歸 的
。 對 於 遞 歸 調
用 的 次 數 沒 有
硬 性 限 制 。
在 一 定
的 環 境 下 , shell 允
許 進 行 算 術 表
達 式 的 求 值 (參
見 內 建 命 令 let
和 Arithmetic Expansion (算 術
表 達 式 ))。 求 值
使 用 固 定 寬 度
的 整 數 , 不 檢
查 是 否 溢 出 ,
但 是 被 零 除 會
被 捕 獲 , 標 記
爲 錯 誤 。 操 作
數 及 其 優 先 級
和 聚 合 程 度 與 C
語 言 中 相 同 。
下 列 操 作 數 的
列 表 按 照 相 同
優 先 級 的 操 作
數 其 級 別 來 分
組 。 列 出 的 級
別 順 序 是 優 先
級 遞 減 的 。
id++
id-- 變 量 自 增
/自 減 (在 後 )
++id --id 變 量
自 增 /自 減 (在 前
)
|
- + |
|
(單 目 的 ) 取 負
/取 正 |
|
|
! ~ |
|
|
|
邏 輯 和
位 取 反
|
|
|
|
** 乘 冪 |
|
|
* / % 乘 , 除 ,
取 餘 |
|
|
+ - 加 , 減 |
|
|
<< >> 左 |
|
/右 位 移
<= >= < > 比 較
|
== != 相 等 |
|
/不 等 |
|
|
& 位 與 |
|
(AND)
或 (exclusive OR)
| 位 或 (OR)
&& 邏 輯 與 (AND)
|| 邏 輯 或 (OR)
expr?expr:expr
條 件 求 值
= *= /= %= += -= <<= >>= &= ^= |=
賦 值
expr1 , expr2 逗 號 表
達 式
shell 變
量 可 以 作 爲 操
作 數 ; 在 表 達
式 求 值 之 前 會
進 行 參 數 擴 展
。 在 表 達 式 中
, 可 以 用 名 稱
引 用 shell 變 量 , 不
必 使 用 參 數 擴
展 的 語 法 。 變
量 被 引 用 時 ,
其 值 被 作 爲 算
術 表 達 式 來 求
值 。 shell 變 量 用 於
表 達 式 中 時 ,
不 必 啓 用 整 數
屬 性 。 以 0 爲 前
導 的 常 量 被 當
作 八 進 制 數 ,
以 0x 或 0X 作 爲 前 導
表 明 是 十 六 進
制 。 其 他 情 況
下 , 數 字 的 形
式 是 [base#]n, 這 裏
base 是 一 個 2 到 64
的 十 進 制 數 值
, 作 爲 數 字 的
基 數 , n 是 在
這 個 基 數 中 數
字 的 值 。 如 果
忽 略 了 base#, 將
以 10 爲 基 數 。 大
於 10 的 數 字 依 次
以 小 寫 字 母 ,
大 寫 字 母 , @ 和 _
表 示 。 如 果 base
小 於 或 等 於 36,
在 表 示 10 與 35 之 間
的 數 字 時 小 寫
字 母 和 大 寫 字
母 可 以 互 換 。
操 作 符 根 據 優
先 級 順 序 進 行
求 值 。 圓 括 號
中 的 子 表 達 式
被 最 先 求 值 ,
可 能 會 超 越 上
面 的 優 先 級 規
則 。
條 件 表
達 式 用 於 [[ 複
合 命 令 以 及 內
建 命 令 test 和 [
中 , 用 來 測 試
文 件 屬 性 , 進
行 字 符 串 和 算
術 比 較 。 表 達
式 使 用 下 面 的
單 目 或 二 進 制
操 作 構 造 。 如
果 某 操 作 的 任
何 file 參 數 的 形
式 是 /dev/fd/n, 那 麼
將 檢 查 文 件 描
述 符 n。 如 果
某 操 作 的 file 參
數 是 /dev/stdin,
/dev/stdout 或 者 /dev/stderr
之 一 , 將 分 別
檢 查 文 件 描 述
符 0, 1 和 2。
-a file 如
果 file 存 在 則 爲
真 。
-b file 如 果 file 存
在 且 爲 塊 設 備
則 爲 真 。
-c file 如 果 file 存
在 且 爲 字 符 設
備 則 爲 真 。
-d file 如 果 file 存
在 且 是 一 個 目
錄 則 爲 真 。
-e file 如 果 file 存
在 則 爲 真 。
-f file 如 果 file 存
在 且 爲 普 通 文
件 則 爲 真 。
-g file 如 果 file 存
在 且 是 設 置 組
ID的 (sgid) 則 爲 真 。
-h file 如 果 file 存
在 且 爲 符 號 鏈
接 則 爲 真 。
-k file 如 果 file 存
在 且 設 置 了
’’sticky’’ 位 (粘
滯 位 ) 則 爲 真 。
-p file 如 果 file 存
在 且 是 一 個 命
名 管 道 (FIFO) 則 爲 真
。
-r file 如 果 file 存
在 且 可 讀 則 爲
真 。
-s file 如 果 file 存
在 且 大 小 大 於
零 則 爲 真 。
|
-t fd 如 果 文 件
描 述 符 |
|
fd 是 打 開 的 且
對 應 一 個 終 端
則 爲 真 。 |
|
-u file 如
果 file 存 在 且 是
設 置 用 戶 ID的 (suid)
則 爲 真 。
-w file 如 果 file 存
在 且 可 寫 則 爲
真 。
-x file 如 果 file 存
在 且 可 執 行 則
爲 真 。
-O file 如 果 file 存
在 且 爲 有 效 用
戶 ID所 擁 有 則 爲
真 。
-G file 如 果 file 存
在 且 爲 有 效 組
ID所 擁 有 則 爲 真
。
-L file 如 果 file 存
在 且 爲 符 號 鏈
接 則 爲 真 。
-S file 如 果 file 存
在 且 爲 套 接 字
則 爲 真 。
-N file 如 果 file 存
在 且 上 次 讀 取
後 被 修 改 過 則
爲 真 。
file1 -nt file2 如 果
file1 比 file2 要 新
(根 據 修 改 日 期
), 或 者 如 果 file1
存 在 而 file2 不 存
在 , 則 爲 真 。
file1 -ot file2 如 果
file1 比 file2 更 舊
, 或 者 如 果 file1
不 存 在 而 file2 存
在 , 則 爲 真 。
file1 -ef file2 如 果
file1 和 file2 指 的
是 相 同 的 設 備
和 inode 號 則 爲 真 。
-o optname 如 果 啓 用
了 shell 選 項 optname 則
爲 真 。 參 見 下
面 對 內 建 命 令
set 的 -o 選 項 的
描 述 中 的 選 項
列 表 。
-z string 如 果 string
的 長 度 爲 0 則 爲
真 。
-n string
|
string 如 果 |
|
string 的 長 度 非 0
則 爲 真 。 |
|
string1 ==
string2 如 果 字 符 串
相 等 則 爲 真 。
= 可 以 用 於 使
用 == 的 場 合 來
兼 容 POSIX 規 範 。
string1 != string2 如 果
字 符 串 不 相 等
則 爲 真 。
string1 < string2 如 果
string1 在 當 前 語 言
環 境 的 字 典 順
序 中 排 在 string2 之
前 則 爲 真 。
string1 > string2 如 果
string1 在 當 前 語 言
環 境 的 字 典 順
序 中 排 在 string2 之
後 則 爲 真 。
arg1 OP arg2
OP
是 -eq, -ne, -lt, -le,
-gt, 或 -ge 之 一 。
這 些 算 術 二 進
制 操 作 返 回 真
, 如 果 arg1 與 arg2
分 別 是 相 等 ,
不 等 , 小 於 ,
小 於 或 等 於 ,
大 於 , 大 於 或
等 於 關 係 。 Arg1
和 arg2 可 以 是 正
/負 整 數 。
當 執 行
一 個 簡 單 命 令
時 , shell 進 行 下 列
擴 展 , 賦 值 和
重 定 向 , 從 左
到 右 。
|
1. 解 釋 器 標 記 爲
與 變 量 賦 值 |
|
(在 命 令 名 之 前
的 ) 和 重 定 向 有
關 的 詞 被 保 存
等 |
待 隨 後
處 理 。
|
2. 並 非 變
量 賦 值 或 重 定
向 的 詞 被 擴 展
。 如 果 擴 展 後
仍 然 有 詞 保 留
下 來 , 第 一 個
詞 被 作 爲 命 令
名 , 其 餘 詞 是
參 數 。 |
|
3. 重 定 向 按 照 上
面 |
REDIRECTION
中 講 到 的 規 則
進 行 。
|
4. 每 個 變
量 賦 值 中 |
|
= 之 後
的 文 本 在 賦 予
變 量 之 前 要 經
過 波 浪 線 擴 展
, 參 數 |
擴 展 ,
命 令 替 換 , 算
術 擴 展 和 引 用
刪 除 。 如 果 沒
有 得 到 命 令 名
, 變 量 賦 值 影
響 當 前 shell 環 境 。
否 則 , 變 量 被
加 入 被 執 行 的
命 令 的 環 境 中
, 不 影 響 當 前 shell
環 境 。 如 果 任
何 賦 值 動 作 試
圖 爲 只 讀 變 量
賦 值 , 將 導 致
出 錯 , 命 令 以
非 零 狀 態 值 退
出 。 如 果 沒 有
得 到 命 令 名 ,
重 定 向 仍 會 進
行 , 但 是 不 影
響 當 前 shell 環 境 。
重 定 向 出 錯 將
使 命 令 以 非 零
狀 態 值 退 出 。
如 果 擴 展 後 有
命 令 名 保 留 下
來 , 那 麼 執 行
過 程 如 下 所 示
。 否 則 , 命 令
退 出 。 如 果 在
任 何 擴 展 中 包
含 命 令 替 換 ,
那 麼 整 個 命 令
的 退 出 狀 態 是
最 後 一 個 命 令
替 換 的 退 出 狀
態 。 如 果 沒 有
進 行 命 令 替 換
, 命 令 以 狀 態
零 退 出 。
命 令 被
拆 分 爲 詞 之 後
, 如 果 結 果 是
一 個 簡 單 命 令
和 可 選 的 參 數
列 表 , 將 執 行
下 面 的 操 作 。
如 果 命 令 名 中
沒 有 斜 槓 , shell 試
圖 定 位 命 令 位
置 。 如 果 存 在
同 名 的 shell 函 數 ,
函 數 將 被 執 行
, 像 上 面
FUNCTIONS 中 講 到
的 一 樣 。 如 果
名 稱 不 是 一 個
函 數 , shell 從 內 建
命 令 中 搜 索 它
。 如 果 找 到 對
應 命 令 , 它 將
被 執 行 。 如 果
名 稱 既 不 是 shell 函
數 也 不 是 一 個
內 建 命 令 , 並
且 沒 有 包 含 斜
槓 , bash 搜 索
PATH 的 每 個
成 員 , 查 找 含
有 此 文 件 名 (可
執 行 文 件 ) 的 目
錄 。 Bash 使 用 散
列 表 來 儲 存 可
執 行 文 件 的 全
路 徑 (參 見 下 面
的 shell 內 建 命 令
(SHELL BUILTIN COMMANDS) 中 的
hash。 只 有 在 散
列 表 中 沒 有 找
到 此 命 令 , 纔
對 PATH 進 行
完 整 的 搜 索 。
如 果 搜 索 不 成
功 , shell 輸 出 錯 誤
消 息 , 返 回 退
出 狀 態 127。 如 果
搜 索 成 功 , 或
者 命 令 中 包 含
一 個 或 多 個 斜
槓 , shell 在 單 獨 的
執 行 環 境 中 執
行 這 個 程 序 。
參 數 0 被 設 置 爲
所 給 名 稱 ; 命
令 的 其 他 參 數
被 設 置 爲 所 給
的 參 數 , 如 果
有 的 話 。 如 果
執 行 失 敗 , 因
爲 文 件 不 是 可
執 行 格 式 , 並
且 此 文 件 不 是
目 錄 , 就 假 定
它 是 一 個 shell script
(腳 本 ), 一 個 包
含 shell 命 令 的 文 件
。 此 時 將 孵 化
(spawn) 出 一 個 子 shell 來
執 行 它 。 子 shell 重
新 初 始 化 自 身
, 效 果 就 好 像
是 執 行 了 一 個
新 的 shell 來 處 理 腳
本 一 樣 , 但 是
父 shell 保 存 的 命 令
位 置 仍 然 被 保
留 (參 見 下 面 的
shell 內 建 命 令 (SHELL
BUILTIN COMMANDS) 中 的
hash)。 如 果 程 序
是 以 #! 開 頭 的
文 件 , 那 麼 第
一 行 的 其 餘 部
分 指 定 了 這 個
程 序 的 解 釋 器
。 shell 執 行 指 定 的
解 釋 器 , 如 果
操 作 系 統 不 會
自 行 處 理 這 種
可 執 行 文 件 格
式 的 話 。 解 釋
器 的 參 數 由 下
面 三 部 分 組 成
: 程 序 第 一 行
中 解 釋 器 名 稱
之 後 的 可 選 的
一 個 參 數 , 程
序 的 名 稱 , 命
令 行 參 數 , 如
果 有 的 話 。
shell 有
execution environment (執 行 環
境 ) 的 概 念 , 由
下 列 內 容 組 成
:
|
• |
|
shell 啓 動 時
繼 承 的 打 開 的
文 件 , 例 如 在
內 建 命 令 exec 中
使 用 重 定 向 修
改 的 結 果
當 前 工
作 目 錄 , 使 用
cd, pushd 或 者 popd
設 置 , 或 是 由 shell
在 啓 動 時 繼 承
得 到
文 件 創
建 模 式 掩 碼 ,
使 用 umask 設 置 或
是 從 shell 的 父 進 程
中 繼 承 得 到
• 當 前 陷 阱 , 用
trap 設 置
•
shell 參
數 , 使 用 變 量
賦 值 或 者 set 設
置 , 或 者 是 從
父 進 程 的 環 境
中 繼 承 得 到
|
• |
|
shell 函 數 ,
在 執 行 中 定 義
或 者 是 從 父 進
程 的 環 境 中 繼
承 得 到
設 爲 允
許 的 選 項 , 在
執 行 時 設 置 (要
麼 是 默 認 允 許
的 , 要 麼 是 命
令 行 給 出 的 ) 或
者 是 用 set 設 置
用 shopt 設
爲 允 許 的 選 項
• 用 alias 定 義 的
shell 別 名
進 程 號
, 包 含 後 臺 作
業 的 進 程 號 ,
$$ 的 值 , 以 及
$PPID 的 值 當 並 非
shell 函 數 或 內 置 命
令 的 簡 單 命 令
執 行 時 , 它 在
一 個 由 下 述 內
容 組 成 的 單 獨
的 執 行 環 境 中
啓 動 。 除 非 另
外 說 明 , 值 都
是 從 shell 中 繼 承 的
。
•
|
|
|
shell 打 開 的
文 件 , 加 上 對
命 令 使 用 重 定
向 修 改 和 添 加
的 文 件 |
|
• |
|
|
當 前 工
作 目 錄
|
|
|
|
• 文 件 創 建 模
式 掩 碼 |
|
|
• 標 記 爲 導 出 |
|
(export) 的 shell
變 量 , 以 及 傳
遞 到 環 境 中 爲
這 個 命 令 導 出
的 變 量
|
• |
|
shell 捕 捉 的
陷 阱 被 重 置 爲
從 shell 的 父 進 程 中
繼 承 的 值 , shell 忽
略 的 陷 阱 也 被
忽 略 |
在 單 獨
的 環 境 中 啓 動
的 命 令 不 能 影
響 shell 的 執 行 環 境
。 命 令 替 換 和
異 步 命 令 都 在
子 shell 環 境 中 執 行
。 子 shell 環 境 是 原
有 shell 環 境 的 賦 值
, 但 shell 捕 捉 的 陷
阱 被 重 置 爲 shell 啓
動 時 從 父 進 程
中 繼 承 的 值 。
作 爲 管 道 一 部
分 來 執 行 的 內
建 命 令 也 在 一
個 子 shell 環 境 中 執
行 。 對 子 shell 環 境
所 作 修 改 不 能
影 響 到 原 有 shell 的
執 行 環 境 。 如
果 命 令 後 面 是
& 並 且 沒 有 啓
用 作 業 控 制 ,
命 令 的 默 認 標
準 輸 入 將 是 空
文 件 /dev/null。 否 則
, 被 執 行 的 命
令 從 調 用 它 的 shell
中 繼 承 被 重 定
向 修 改 的 文 件
描 述 符 。
當 一 個
程 序 執 行 時 ,
它 被 賦 予 一 個
字 符 串 數 組 ,
成 爲 環 境
environment。 它 是 一
個 名 稱 -值 對
(name-value) 的 列 表
, 形 式 是
name=value.
shell 提
供 了 多 種 操 作
環 境 的 方 法 。
啓 動 時 , shell 掃 描
自 身 的 環 境 ,
爲 每 個 找 到 的
名 字 創 建 一 個
參 數 , 自 動 地
將 它 標 記 爲 export
(向 子 進 程 導 出
的 )。 被 執 行 的
命 令 繼 承 了 這
個 環 境 。 export 和
declare -x 命 令 允 許
參 數 和 函 數 被
加 入 到 環 境 中
或 從 環 境 中 刪
除 。 如 果 環 境
中 參 數 的 值 被
修 改 , 新 值 成
爲 環 境 的 一 部
分 , 替 換 了 舊
值 。 所 有 被 執
行 的 命 令 繼 承
的 環 境 包 含 shell 的
初 始 環 境 (可 能
值 被 修 改 過 ),
減 去 被 unset 命 令
刪 除 的 , 加 上
通 過 export 和 declare -x
命 令 添 加 的 部
分 。 可 以 在 任
何 simple command 或 函 數
的 環 境 中 設 定
暫 時 有 效 的 參
數 , 只 要 將 參
數 賦 值 放 在 命
令 前 面 就 可 以
了 , 參 見 上 面
PARAMETERS 的 描 述
。 這 些 賦 值 語
句 只 在 這 個 命
令 的 環 境 中 有
效 。 如 果 設 置
了 內 建 命 令 set
的 -k 選 項 , 所
有 的 變 量 賦 值
都 將 放 到 命 令
的 環 境 中 , 不
僅 是 在 命 令 名
前 面 的 那 些 。
當 bash 執 行 一 個
外 部 命 令 時 ,
變 量 _ 被 設 置
爲 命 令 的 文 件
全 名 , 然 後 被
傳 遞 到 命 令 的
環 境 之 中 。
從 shell 的 角
度 看 , 一 個 命
令 退 出 狀 態 是 0
意 味 着 成 功 退
出 。 退 出 狀 態
是 0 表 明 成 功 。
非 零 狀 態 值 表
明 失 敗 。 當 命
令 收 到 fatal signal N 退
出 時 , bash 使 用
128+N 作 爲 它 的 退
出 狀 態 。 如 果
沒 有 找 到 命 令
, 爲 執 行 它 而
創 建 的 子 進 程
返 回 127。 如 果 找
到 了 命 令 但 是
文 件 不 可 執 行
, 返 回 狀 態 是
126。 如 果 命 令 由
於 擴 展 或 重 定
向 錯 誤 而 失 敗
, 退 出 狀 態 大
於 零 。
shell 內
建 命 令 如 果 成
功 返 回 0(true), 執
行 時 出 錯 則 返
回 非 零 (false)。 所
有 內 建 命 令 返
回 2 來 指 示 不 正
確 的 用 法 。
Bash
自 身 返 回 最 後
執 行 的 命 令 的
退 出 狀 態 , 除
非 發 生 了 語 法
錯 誤 , 這 時 它
返 回 非 零 值 。
參 見 下 面 的 內
建 命 令 exit。
如 果 bash
是 交 互 的 , 沒
有 設 定 任 何 陷
阱 , 它 忽 略
SIGTERM (這 樣 kill
0 不 會 殺 掉 交 互
的 shell)。 SIGINT
被 捕 獲 並 處 理
(從 而 使 內 建 命
令 wait 可 以 中 斷
)。 在 所 有 情 況
下 , bash 忽 略
SIGQUIT。
如 果 正 在 使 用
作 業 控 制 , bash
忽 略 SIGTTIN,
SIGTTOU, 和
SIGTSTP.
bash
開 始 的 並 行 作
業 的 信 號 處 理
句 柄 都 設 置 爲 shell
從 父 進 程 中 繼
承 的 值 。 如 果
不 是 正 在 使 用
作 業 控 制 , 異
步 命 令 還 忽 略
SIGINT 和 SIGQUIT
。 作 爲 命 令
替 換 結 果 運 行
的 命 令 忽 略 鍵
盤 產 生 的 作 業
控 制 信 號
SIGTTIN,
SIGTTOU, 和
SIGTSTP. 如
果 收 到 信 號
SIGHUP, shell 默 認
退 出 。 在 退 出
前 , 交 互 的 shell 向
所 有 作 業 , 運
行 的 或 停 止 的
, 發 送 SIGHUP
信 號 。 shell 向 停 止
的 作 業 發 出
SIGCONT 信 號 來
保 證 它 們 會 收
到 SIGHUP.
要 阻 止 shell 向 特 定
的 作 業 發 送 信
號 , 應 當 使 用
內 建 命 令 disown 將
作 業 從 作 業 表
中 刪 除 (參 見 下
面 的 shell 內 建 命
令 (SHELL BUILTIN COMMANDS) 章
節 ) 或 者 使 用 disown
-h 來 標 記 爲 不 接
受 SIGHUP。 如
果 使 用 shopt 設 置
了 shell 選 項 huponexit,
在 交 互 的 登 錄 shell
退 出 時 bash 向 所
有 作 業 發 出
SIGHUP 信 號 。
當 bash 等 待 命 令
執 行 結 束 時 ,
如 果 收 到 已 設
置 了 陷 阱 的 信
號 , 陷 阱 (trap) 將 不
會 執 行 , 直 到
命 令 結 束 。 當
bash 通 過 內 建 命
令 wait 等 待 異 步
命 令 時 , 如 果
收 到 已 設 置 了
陷 阱 的 信 號 ,
將 使 得 內 建 命
令 wait 立 即 以 大
於 128 的 狀 態 值 返
回 。 接 着 , 陷
阱 將 立 即 被 執
行 。
Job
control (作 業 控 制 ) 指
的 是 可 以 選 擇
停 止 (suspend, 掛 起
) 進 程 執 行 , 並
且 可 以 在 之 後
繼 續 (resume, 恢 復 )
執 行 的 能 力 。
用 戶 一 般 在 交
互 的 人 機 界 面
中 使 用 這 種 功
能 。 界 面 是 由
系 統 的 終 端 驅
動 和 bash 共 同 提
供 的 。
shell 將
每 個 管 道 分 配
給 一 個 作 業
(job)。 它 保 存 一
個 當 前 運 行 的
作 業 表 , 可 以
用 jobs 命 令 來 列
出 。 當 bash 啓 動
一 個 異 步 的 作
業 時 (background, 後 臺
執 行 ), 它 輸 出
這 樣 的 一 行 :
[1] 25647
表 明 這 個 作 業
的 作 業 號 是 1,
與 作 業 相 關 連
的 管 道 中 最 後
一 個 進 程 的 進
程 ID是 15647。 管 道 中
所 有 進 程 都 是
同 一 個 作 業 的
成 員 。 Bash 使 用
作 業 (job) 概 念 作
爲 作 業 控 制 的
基 礎 。 爲 簡 化
作 業 控 制 的 用
戶 界 面 的 實 現
, 操 作 系 統 負
責 管 理 “當 前 終
端 的 進 程 組 ”
(current terminal process group ID) 的 概
念 。 這 個 進 程
組 的 成 員 (進 程
組 ID 是 當 前 終 端
進 程 組 ID 的 進 程 )
可 以 收 到 鍵 盤
產 生 的 信 號 ,
例 如
SIGINT. 這
些 進 程 被 稱 爲
foreground(前 臺 的 )。
Background (後 臺 的 ) 進
程 是 那 些 進 程
組 ID 與 終 端 不 同
的 進 程 ; 這 些
進 程 不 會 收 到
鍵 盤 產 生 的 信
號 。 只 有 前 臺
進 程 可 以 從 終
端 讀 或 向 終 端
寫 。 後 臺 進 程
試 圖 讀 /寫 終 端
時 , 將 收 到 終
端 驅 動 程 序 發
送 的 SIGTTIN (SIGTTOU)
信 號 。 這 個 信
號 如 果 沒 有 加
以 捕 捉 , 將 掛
起 這 個 進 程 。
如 果 bash 運 行 其
上 的 操 作 系 統
支 持 作 業 控 制
, bash 會 包 含 使
用 它 的 設 施 。
在 一 個 進 程 正
在 運 行 的 時 候
鍵 入 suspend 掛 起 字
符 (通 常 是 ^Z, Control-Z)
將 使 這 個 進 程
暫 停 , 將 控 制
權 還 給 bash. 輸 入
delayed suspend , 延 時 掛 起
字 符 (通 常 是 ^Y,
Control-Y) 將 使 這 個 進
程 在 試 圖 從 終
端 讀 取 輸 入 時
暫 停 , 將 控 制
權 還 給 bash. 用 戶
接 下 來 可 以 控
制 此 作 業 的 狀
態 , 使 用 bg 命
令 使 它 在 後 臺
繼 續 運 行 , fg
命 令 使 它 在 前
臺 繼 續 運 行 ,
或 kill 命 令 將 它
殺 死 。 ^Z 會 立
即 起 作 用 , 並
且 還 有 使 等 待
中 的 (pending) 輸 出 和
輸 入 被 忽 略 的
附 加 副 作 用 。
有 很 多 方 法 來
指 代 shell 中 的 作 業
。 字 符 % 可 以
引 入 作 業 名 。
編 號 爲 n 的 作
業 可 以 用 %n 的
形 式 來 指 代 。
作 業 也 可 以 用
啓 動 它 的 名 稱
的 前 綴 , 或 者
命 令 行 中 的 子
字 符 串 來 指 代
。 例 如 , %ce 指
代 一 個 暫 停 的
ce 作 業 。 如 果
前 綴 匹 配 多 於
一 個 作 業 , bash
報 錯 。 另 一 方
面 , 使 用 %?ce, 可
以 指 代 任 何 命
令 行 中 包 含 字
符 串 ce 的 作 業
。 如 果 子 字 符
串 匹 配 多 於 一
個 作 業 , bash 報
錯 。 符 號 %% 和
%+ 指 代 shell 意 義 上
的 current job, 當 前
作 業 , 也 就 是
前 臺 被 暫 停 的
最 後 一 個 作 業
, 或 者 是 在 後
臺 啓 動 的 作 業
。 previous job , 前 一 作
業 可 以 使 用 %-
來 指 代 。 在 有
關 作 業 的 輸 出
信 息 中 (例 如 ,
命 令 jobs 的 輸 出
), 當 前 作 業 總
是 被 標 記 爲 +,
前 一 作 業 標 記
爲 -. 簡 單 地 給
出 作 業 名 , 可
以 用 來 把 它 放
到 前 臺 : %1 是
’’fg %1’’ 的 同
義 詞 , 將 作 業 1
從 後 臺 放 到 前
臺 。 類 似 的 ,
’’%1 &’’ 在
後 臺 恢 復 作 業
1, 與 ’’bg %1’’
等 價 。 當 某 個
作 業 改 變 狀 態
時 , shell 立 即 可 以
得 知 。 通 常 ,
bash 等 待 直 到 要
輸 出 一 個 提 示
符 時 , 纔 會 報
告 作 業 的 狀 態
變 化 , 從 而 不
會 打 斷 其 他 輸
出 。 如 果 啓 用
了 內 建 命 令 set
的 -b 選 項 , bash
將 立 即 報 告 這
些 變 化 。 對
SIGCHLD 信 號 的
陷 阱 將 在 每 個
子 進 程 退 出 時
執 行 。 如 果 在
作 業 暫 停 時 試
圖 退 出 bash, shell
打 印 一 條 警 告
消 息 。 命 令 jobs
可 能 被 用 來 檢
查 作 業 的 狀 態
。 如 果 再 次 試
圖 退 出 , 中 間
沒 有 其 他 命 令
, shell 不 會 打 印 其
他 警 告 , 暫 停
的 作 業 將 終 止
。
在 交 互
執 行 時 , bash 在
準 備 好 讀 入 一
條 命 令 時 顯 示
主 提 示 符
PS1, 在 需 要
更 多 的 輸 入 來
完 成 一 條 命 令
時 顯 示 PS2。
Bash 允 許 通 過 插
入 一 些 反 斜 槓
轉 義 的 特 殊 字
符 來 定 製 這 些
提 示 字 符 串 ,
這 些 字 符 被 如
下 解 釋 :
|
\a 一 個 |
ASCII 響 鈴 字
符 (07)
格 式 是
"星 期 月 份 日 "
(例 如 , "Tue May 26")
\D{format}
format 被 傳
遞 給 strftime(3), 結
果 被 插 入 到 提
示 字 符 串 中 ;
空 的 format 將 使 用
語 言 環 境 特 定
的 時 間 格 式 。
花 括 號 是 必 需
的
|
\e 一 個 |
ASCII 轉 義 字 符 (033)
, 第 一
個 ’.’ 之 前 的 部
分
\H 主 機 名
\j
shell 當
前 管 理 的 作 業
數 量
|
\l |
|
shell 的 終 端
設 備 名 的 基 本
部 分 |
|
|
\n |
|
|
|
新 行 符
shell 的
名 稱 , $0 的 基
本 部 分 (最 後 一
個 斜 槓 後 面 的
部 分 )
|
\t 當 前
時 間 , 採 用 |
24小 時 制
的 HH:MM:SS 格 式 |
|
\T 當 前 時 間 ,
採 用 |
12小 時 制 的 HH:MM:SS 格
式 |
|
\@ 當 前 時 間 ,
採 用 |
12小 時 制 上 午 /下
午 (am/pm) 格 式 |
|
\A 當 前 時 間 ,
採 用 |
24小 時 制 上 午 /下
午 格 式 |
|
\u 當 前 用 戶 的
用 戶 名 |
the username of the current user |
|
\v |
|
bash
的 版 本 (例 如 ,
2.00)
|
\V |
|
bash 的 發
行 編 號 , 版 本
號 加 補 丁 級 別
(例 如 , 2.00.0) |
|
\w |
|
|
當 前 工
作 目 錄
|
|
|
|
\W 當 前 工 作 目
錄 的 基 本 部 分 |
|
|
\! 此 命 令 的 歷
史 編 號 |
|
|
\# 此 命 令 的 命
令 編 號 |
|
|
\$ 如 果 有 效 |
|
UID 是 0, 就
是 #, 其 他 情 況
下 是 $
|
\nnn 對
應 八 進 制 數 |
nnn 的 字
符 |
|
|
\\ 一 個 反 斜
槓 |
|
|
|
\[ 一 個 不 可 打
印 字 |
|
|
符 序 列
的 開 始 , 可 以
用 於 在 提 示 符
中 嵌 入 終 端 控
制 序 列
|
\] 一 個 不 可 打
印 字 符 序 列 的
結 束 命 令 編 號
和 歷 史 編 號 通
常 是 不 同 的 :
歷 史 編 號 是 命
令 在 歷 史 列 表
中 的 位 置 , 可
能 包 含 從 歷 史
文 件 中 恢 復 的
命 令 |
(參 見 下
面 的 HISTORY 歷
史 章 節 ), 而
命 令 編 號 是 當
前 shell 會 話 中 執 行
的 命 令 序 列 中
, 命 令 的 位 置
。 字 符 串 被 解
碼 之 後 , 它 將
進 行 擴 展 , 要
經 過 parameter expansion, command substitution,
arithmetic expansion 和 quote removal, 最
後 要 經 過 shell 選 項
promptvars 處 理 (參 見
下 面 的 shell 內 建
命 令 (SHELL BUILTIN COMMANDS)
章 節 中 , 對 命
令 shopt 的 描 述
)。
這 是 在
交 互 shell 中 處 理 讀
取 輸 入 的 庫 ,
除 非 在 shell 啓 動 時
給 出 了 --noediting 選
項 。 默 認 情 況
下 , 行 編 輯 命
令 類 似 於 emacs 中 的
那 些 。 也 可 以
使 用 vi 樣 式 的 行
編 輯 界 面 。 要
在 shell 運 行 之 後 關
閉 行 編 輯 , 使
用 內 置 命 令 set
的 +o emacs 或 +o vi 選
項 (參 見 下 面 的
shell 內 建 命 令 (SHELL
BUILTIN COMMANDS) 章 節
)。
Readline
Notation 在 這 個 小 節
中 , 將 使 用 emacs 樣
式 的 記 法 來 表
述 按 鍵 。 Ctrl 鍵 記
爲 C-key, 例 如 , C-n
意 思 是 Ctrl-N。 類 似
的 , meta 鍵 記 爲
M-key, 因 此 M-x 意 味
着 Meta-x。 (在 沒 有
meta 鍵 的 鍵 盤 上
, M-x 意 思 是
ESC-x, 也 就 是 說
, 按 下 Esc 鍵 , 然
後 按 x 鍵 。 這
使 得 Esc 成 爲 meta
prefix。 M-C-x 的 組 合
意 思 是 Esc-Ctrl-x,
也 就 是 按 Esc 鍵 ,
然 後 按 住 Ctrl 鍵 ,
同 時 按 x 鍵 。 )
readline
命 令 可 以 有 數
字 的 參 數
(arguments), 一 般 作 爲
重 複 的 計 數 。
有 些 時 候 , 它
是 重 要 參 數 的
標 記 。 給 向 前
方 進 行 的 命 令
(例 如 , kill-line) 傳
遞 負 數 參 數 ,
將 使 得 命 令 向
反 方 向 進 行 。
下 面 的 命 令 如
果 接 受 參 數 時
的 行 爲 與 此 不
同 , 將 另 行 說
明 。 當 命 令 被
描 述 爲 剪 切
(killing) 文 本 時 ,
被 刪 除 的 文 本
被 保 存 , 等 待
將 來 使 用 (粘 貼
, yanking)。 被 剪 切
的 文 本 保 存 在
kill ring 中 。 連 續
的 剪 切 使 得 文
本 被 依 次 加 入
到 一 個 單 元 中
, 可 以 一 次 被
粘 貼 。 不 剪 切
文 本 的 命 令 將 kill
ring 中 的 文 本 分 離
。
Readline
Initialization 初 始 化
readline 可 以 通 過 將
命 令 放 入 初 始
化 文 件 (inputrc 文 件
) 來 定 製 。 文 件
名 從 變 量
INPUTRC 的 值 中
獲 取 。 如 果 沒
有 設 置 這 個 變
量 , 默 認 是
~/.inputrc. 當 使 用 readline
庫 的 程 序 啓 動
時 , 將 讀 取 初
始 化 文 件 , 按
鍵 關 聯 和 變 量
將 被 設 置 。 readline
初 始 化 文 件 中
只 允 許 有 很 少
的 基 本 構 造 。
空 行 被 忽 略 。
以 # 開 始 的 行
是 註 釋 。 以 $
開 始 的 行 指 示
了 有 條 件 的 構
造 。 其 他 行 表
示 按 鍵 關 聯 和
變 量 設 置 。 默
認 的 按 鍵 關 聯
可 以 使 用 inputrc 文
件 改 變 。 其 他
使 用 這 個 庫 的
程 序 可 以 添 加
它 們 自 己 的 命
令 和 關 聯 。 例
如 , 將
M-Control-u:
universal-argument 或
C-Meta-u: universal-argument 放 入
inputrc 將 使 得 M-C-u 執
行 readline 命 令
universal-argument. 可 以 識
別 下 列 字 符 的
符 號 名 稱 : RUBOUT,
DEL, ESC, LFD, NEWLINE,
RET, RETURN, SPC, SPACE,
和 TAB. 在 命 令 名
之 外 , readline 允 許
將 按 鍵 與 一 個
字 符 串 關 聯 ,
當 按 下 這 個 鍵
時 , 將 插 入 這
個 字 符 串 (一 個
宏 , macro)。
Readline Key
Bindings
inputrc 文 件 中 的 控
制 按 鍵 關 聯 的
語 法 非 常 簡 單
。 需 要 的 內 容
是 命 令 名 或 宏
, 以 及 它 應 當
關 聯 到 的 按 鍵
序 列 。 名 稱 可
以 以 兩 種 方 式
指 定 : 一 個 按
鍵 的 符 號 名 稱
, 可 能 帶 有 Meta-
或 Control- 前 綴 , 或
者 是 一 個 按 鍵
序 列 。 當 使 用
keyname:function-name 或 macro
形 式 時 , keyname 是
按 鍵 以 英 文 拼
寫 的 名 稱 。 例
如 :
Control-u:
universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output" 在 上
述 例 子 中 , C-u
被 關 聯 到 函 數
universal-argument, M-DEL 被 關
聯 到 函 數
backward-kill-word, 而 C-o 被
關 聯 爲 運 行 右
邊 給 出 的 宏 (意
思 是 , 將 向 行
中 插 入 ’’>
output’’ )。 在 第 二
種 形 式 中 ,
"keyseq":function-name 或
macro, keyseq 不 同
於 上 面 的 keyname,
表 示 整 個 按 鍵
序 列 的 字 符 串
可 以 通 過 將 按
鍵 序 列 放 在 雙
引 號 引 用 中 來
指 定 。 可 以 使
用 一 些 GNU Emacs 樣 式
的 按 鍵 序 列 ,
如 下 例 所 示 ,
但 是 不 會 識 別
按 鍵 的 符 號 名
稱 。
"\C-u":
universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1" 在
上 述 例 子 中 ,
C-u 被 又 一 次 關
聯 到 函 數
universal-argument. C-x C-r 被 關
聯 到 函 數
re-read-init-file, 而 ESC [ 1 1 ~
被 關 聯 爲 插 入
文 本 ’’Function Key
1’’.
GNU Emacs
樣 式 的 轉 義 序
列 的 全 集 爲 :
|
\C- |
|
Ctrl 前 綴 |
|
|
\M- |
|
Meta 前 綴
一 個 Esc 字
符
\\ 反 斜 槓
的 "
\’ 字 面 上 的 ’
除 了 GNU Emacs
樣 式 的 轉 義 序
列 , 還 有 一 系
列 反 斜 槓 轉 義
序 列 可 用 :
|
\a 響 鈴 |
|
|
|
\b 回 退 |
|
|
|
\d 刪 除 |
|
|
|
\f 進 紙 |
|
|
|
\n 新 行 符 |
|
|
|
\r 回 車 |
|
|
|
\t 水 平 跳 格 |
|
|
|
\v 豎 直 跳 格 |
|
|
|
\nnn 一 個 八 比
特 字 符 , 它 的
值 是 八 進 制 值 |
|
nnn (一 到 三 個 八
進 制 數 |
字 )。
|
\xHH 一
個 八 比 特 字 符
, 它 的 值 是 十
六 進 制 值 |
|
HH (一 到
兩 個 十 六 進 制
數 |
字 )。 輸
入 宏 的 文 本 時
, 必 須 使 用 單
引 號 或 雙 引 號
引 用 來 表 明 是
宏 的 定 義 。 沒
有 引 用 的 文 本
被 當 作 函 數 名
。 在 宏 的 定 義
體 中 , 上 述 反
斜 槓 轉 義 被 擴
展 。 反 斜 槓 將
引 用 宏 文 本 中
所 有 其 他 字 符
, 包 括 " 和
’。
Bash
允 許 使 用 內 建
命 令 bind 來 顯 示
和 修 改 當 前 readline
按 鍵 關 聯 。 在
交 互 使 用 中 可
以 用 內 建 命 令
set 的 -o 選 項 切
換 到 編 輯 模 式
(參 見 下 面 的
shell 內 建 命 令 (SHELL
BUILTIN COMMANDS) 章 節
)。
Readline
Variables
readline 包 含 額 外 的
可 用 於 定 製 它
的 行 爲 的 變 量
。 可 以 在 inputrc 文
件 中 設 置 變 量
, 使 用 如 下 形
式 的 語 句 :
set
variable-name value 除 非 另
外 說 明 , readline 變
量 的 值 總 是 On
或 Off。 變 量 和
它 們 的 默 認 值
是 :
bell-style (audible)
控 制 了 當 readline 需
要 鳴 終 端 響 鈴
時 的 動 作 。 如
果 設 置 爲 none,
readline 不 會 鳴 鈴 。
如 果 設 置 爲
visible, readline 使 用 可
視 的 響 鈴 , 如
果 可 用 的 話 。
如 果 設 置 爲
audible, readline 試 着 鳴
終 端 響 鈴 。
comment-begin (’’#’’) 這
個 字 符 串 在 執
行 readline 命 令 insert-comment
時 被 插 入 。 這
個 命 令 在 emacs 模 式
下 被 關 聯 爲
M-#, 在 vi 模 式 下
是 #。
completion-ignore-case (Off) 如 果 設
置 爲 On, readline 進
行 大 小 寫 不 敏
感 的 文 件 名 匹
配 和 補 全 。
completion-query-items (100) 這 個 變
量 決 定 着 何 時
向 用 戶 詢 問 ,
是 否 查 看 由 命
令 possible-completions 產 生
的 可 能 的 補 全
數 量 。 它 可 以
設 爲 任 何 大 於
或 等 於 0 的 值 。
如 果 可 能 的 補
全 數 量 大 於 或
等 於 這 個 變 量
的 值 , 用 戶 將
被 提 示 是 否 願
意 查 看 它 們 ;
否 則 將 直 接 在
終 端 上 列 出 它
們 。
convert-meta (On) 如 果 設 置
爲 On, readline 將 把
設 置 了 最 高 位
的 字 符 轉 換 爲 ASCII
按 鍵 序 列 , 方
法 是 去 掉 第 八
位 , 前 綴 一 個
轉 義 字 符 (實 際
上 , 使 用 Esc 作 爲
轉 義 符 meta prefix)。
disable-completion (Off) 如 果 設
置 爲 On, readline 將
禁 止 詞 的 補 全
。 補 全 字 符 將
被 插 入 到 行 中
, 就 好 像 它 們
被 映 射 爲
self-insert。
editing-mode (emacs) 控 制 readline 的
按 鍵 關 聯 集 合
與 emacs 還 是 vi 相
似 。 editing-mode 可 以
設 置 爲 emacs 或
vi。
enable-keypad (Off) 如 果 設 置
爲 On , readline 在 調
用 時 將 試 圖 啓
用 輔 助 鍵 盤 。
一 些 系 統 需 要
設 置 這 個 來 啓
用 方 向 鍵 。
expand-tilde (Off) 如 果 設 置
爲 On, readline 試 圖
進 行 詞 的 補 全
時 會 進 行 波 浪
線 擴 展 。
history-preserve-point 如 果 設
置 爲 On, 歷 史
代 碼 試 着 在
previous-history 或 next-history
取 回 的 每 個 歷
史 行 的 相 同 位
置 中 加 點 。
horizontal-scroll-mode (Off) 如 果 設
置 爲 On, 將 使
得 readline 使 用 單 行
來 顯 示 , 如 果
它 比 屏 幕 寬 度
要 長 , 就 在 單
一 的 屏 幕 行 上
水 平 滾 動 輸 入
行 , 而 不 是 自
動 迴 繞 到 新 行
。
input-meta (Off) 如 果 設 置
爲 On, readline 將 允
許 八 比 特 輸 入
(也 就 是 說 , 它
不 會 將 它 讀 入
的 字 符 中 最 高
位 刪 除 ), 不 管
它 能 支 持 什 麼
樣 的 終 端 要 求
。 名 稱 meta-flag 與
此 變 量 同 義 。
isearch-terminators (’’C-[C-J’’)
用 於 終 止 增 量
的 搜 索 , 不 再
將 字 符 當 作 命
令 執 行 的 字 符
串 。 如 果 這 個
變 量 沒 有 賦 值
, 字 符 串 Esc 和
C-J 將 終 止 增 量
的 搜 索 。
keymap (emacs) 設 置 當 前
readline 鍵 盤 映 射 。
有 效 的 鍵 盤 映
射 名 稱 是 emacs,
emacs-standard, emacs-meta, emacs-ctlx, vi,
vi-command, 還 有
vi-insert。 vi 等 價 於
vi-command; emacs 等 價 於
emacs-standard。 默 認 值
是 emacs; editing-mode 的 值
也 會 影 響 默 認
的 鍵 盤 映 射 。
mark-directories (On) 如 果 設
置 爲 On, 補 全
的 目 錄 名 會 添
加 一 個 斜 槓 。
mark-modified-lines (Off) 如 果 設
置 爲 On, 已 被
修 改 的 歷 史 行
將 顯 示 爲 前 綴
一 個 星 號 (*)。
mark-symlinked-directories (Off) 如 果
設 置 爲 On, 補
全 的 名 稱 如 果
是 到 目 錄 的 符
號 鏈 接 , 則 將
添 加 一 個 斜 槓
(與 mark-directories 的 值 同
樣 處 理 )。
match-hidden-files (On) 這 個 變
量 , 如 果 設 置
爲 On, 將 使 得
readline 在 進 行 文 件
名 補 全 時 , 匹
配 以 ’.’ 開 頭 的
文 件 (隱 藏 文 件
), 除 非 用 戶 在
要 補 全 的 文 件
名 中 給 出 了 前
導 的 ’.’。
output-meta (Off) 如 果 設 置
爲 On, readline 將 直
接 顯 示 設 置 了
第 八 位 的 字 符
, 而 不 是 轉 化
爲 一 個 帶 meta 前 綴
的 轉 義 序 列 。
page-completions (On) 如 果 設
置 爲 On, readline 將
使 用 內 建 的 類
似 more 的 分 頁 程
序 , 來 每 次 顯
示 一 屏 可 能 的
補 全 。
print-completions-horizontally (Off) 如 果
設 置 爲 On, readline
將 匹 配 的 補 全
按 字 母 表 順 序
排 序 , 然 後 水
平 排 列 顯 示 出
來 , 而 不 是 在
屏 幕 上 豎 直 排
列 顯 示 。
show-all-if-ambiguous (Off) 這 將 調
整 補 全 函 數 的
默 認 行 爲 。 如
果 設 置 爲 on, 擁
有 多 於 一 個 可
能 的 補 全 的 詞
將 立 即 列 出 所
有 匹 配 , 而 不
是 鳴 響 鈴 。
visible-stats (Off) 如 果 設 置
爲 On, 在 列 出
可 能 的 補 全 時
, 將 在 文 件 名
後 面 添 加 一 個
表 示 文 件 類 型
的 字 符 , 文 件
類 型 由 stat(2) 報 告
。
Readline
Conditional Constructs
readline 實 現 了 一 種
功 能 , 本 質 上
與 C 預 處 理 器 進
行 條 件 編 譯 的
功 能 類 似 , 允
許 根 據 測 試 的
結 果 進 行 鍵 盤
關 聯 和 變 量 設
置 。 其 中 使 用
了 四 種 解 釋 器
指 令 。
|
$if |
|
$if 結 構 允 許 根
據 編 輯 模 式 ,
正 在 使 用 的 終
端 , 使 用 readline 的
應 用 程 序 來 設
定 按 鍵 關 聯 。
測 試 的 文 本 包
括 一 行 , 直 到
行 尾 ; 不 必 用
字 符 來 隔 離 它
。 |
mode
|
|
|
$if 結 構
的 mode= 形 式 用 於
測 試 readline 處 於 emacs 還
是 vi 模 式 。 這 可
以 與 命 令 set keymap
結 合 使 用 , 例
如 , 設 置 emacs-standard
和 emacs-ctlx 鍵 盤 映
射 , 僅 當 readline 以 emacs
模 式 啓 動 。 |
|
term |
|
term= 形 式 用 於
包 含 與 終 端 相
關 的 按 鍵 關 聯
, 也 許 是 將 按
鍵 序 列 輸 出 與
終 端 的 功 能 鍵
相 關 聯 。 等 號
= 右 邊 的 詞 被
同 終 端 的 全 名
和 名 稱 中 第 一
個 - 前 面 的 一
部 分 相 比 較 。
例 如 , 允 許 sun
同 時 匹 配 sun 和
sun-cmd。 |
application
application 結
構 用 於 包 含 應
用 程 序 相 關 的
設 置 。 每 個 使
用 readline 的 程 序 都
設 置 application name, 初
始 化 文 件 可 以
測 試 它 的 值 。
它 可 用 於 將 一
個 按 鍵 序 列 與
對 特 定 的 程 序
有 用 的 功 能 相
關 聯 。 例 如 ,
下 列 命 令 添 加
了 一 個 按 鍵 序
列 , 用 以 引 用 bash
中 當 前 的 詞 或
前 一 個 詞
$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
|
$endif 上 例 中 的
這 個 命 令 , 結
束 了 一 個 |
|
$if 命 令 。 |
|
|
$else 如 果 測 試
失 敗 , |
|
|
|
$if 指 令
中 這 個 分 支 的
命 令 將 被 執 行
。
$include 這 個 指 令 使
用 單 個 文 件 名
作 爲 參 數 , 從
文 件 中 讀 取 命
令 和 按 鍵 關 聯
。 例 如 , 下 列
指 令 將 讀 取
/etc/inputrc:
$include
/etc/inputrc
Searching
readline 提 供 了 從 命
令 歷 史 中 搜 索
包 含 給 定 字 符
串 的 行 的 命 令
(參 見 下 面 的
HISTORY 歷 史 章
節 )。 有 兩 種 搜
索 模 式 : incremental
和 non-incremental. 增 量 的
搜 索 在 用 戶 結
束 輸 入 搜 索 字
符 串 時 開 始 。
在 搜 索 字 符 串
的 每 個 字 符 被
輸 入 的 同 時 ,
readline 顯 示 與 已 輸
入 的 字 符 串 匹
配 的 下 一 個 歷
史 條 目 。 增 量
的 搜 索 只 要 求
輸 入 能 找 到 期
望 的 歷 史 條 目
所 需 的 那 麼 多
字 符 。 isearch-terminators
變 量 中 的 字 符
用 來 終 止 一 次
增 量 的 搜 索 。
如 果 這 個 變 量
沒 有 被 賦 值 , Esc
和 Ctrl-J 字 符 串 將 結
束 一 次 增 量 的
搜 索 。 Ctrl-G 將 取 消
一 次 增 量 的 搜
索 , 恢 復 初 始
的 行 。 當 搜 索
終 止 時 , 包 含
搜 索 字 符 串 的
歷 史 條 目 成 爲
當 前 行 。 要 從
歷 史 列 表 中 找
到 其 他 匹 配 的
條 目 , 適 當 地
鍵 入 Ctrl-S 或 Ctrl-R。 這
樣 將 在 歷 史 中
向 前 /向 後 搜 索
下 一 個 匹 配 已
輸 入 的 搜 索 字
符 串 的 條 目 。
其 他 關 聯 到 某
個 readline 命 令 的 按
鍵 序 列 將 終 止
搜 索 並 執 行 關
聯 的 命 令 。 例
如 , newline 將 終 止
搜 索 , 接 受 當
前 行 , 從 而 執
行 歷 史 列 表 中
的 命 令 。
readline
可 以 記 住 上 次
增 量 搜 索 的 字
符 串 。 如 果 鍵
入 兩 次 Ctrl-R, 中 間
沒 有 輸 入 任 何
字 符 來 定 義 一
個 新 的 搜 索 字
符 串 , 那 麼 將
使 用 已 記 住 的
搜 索 字 符 串 。
非 增 量 的 搜 索
將 整 個 搜 索 字
符 串 讀 入 , 然
後 纔 開 始 搜 索
匹 配 的 歷 史 條
目 。 搜 索 字 符
串 可 以 由 用 戶
輸 入 , 或 者 是
當 前 行 的 內 容
的 一 部 分 。
Readline
Command Names 下 面 列 出
的 是 命 令 的 名
稱 以 及 默 認 情
況 下 它 們 關 聯
的 按 鍵 序 列 。
命 令 名 稱 如 果
沒 有 對 應 的 按
鍵 序 列 , 那 麼
默 認 是 沒 有 關
聯 的 。 在 下 列
描 述 中 , 點 (point)
指 當 前 光 標 位
置 , 標 記 (mark) 指
命 令 set-mark 保 存 的
光 標 位 置 。 point 和
mark 之 間 的 文 本 被
稱 爲 範 圍
(region)。
Commands for
Moving 移 動
beginning-of-line (C-a) 移 動 到
當 前 行 的 開 始
。
end-of-line (C-e) 移 動 到 當
前 行 的 結 尾 。
forward-char (C-f) 向 前 移 動
一 字 。
backward-char (C-b) 向 後 移 動
一 字 。
forward-word (M-f) 向 前 移 動
到 下 一 詞 尾 。
詞 由 字 符 (字 母
和 數 字 ) 組 成 。
backward-word (M-b) 向 後 移 動
到 當 前 或 上 一
詞 首 。
clear-screen (C-l) 清 除 屏 幕
, 保 留 當 前 行
在 屏 幕 頂 端 。
有 參 數 時 , 刷
新 當 前 行 , 不
清 屏 。
redraw-current-line 刷 新 當 前
行 。
Commands for
Manipulating the History 操 縱 歷 史
行
accept-line (Newline, Return) 接 受 這
一 行 , 不 管 光
標 在 什 麼 位 置
。 如 果 行 非 空
, 將 根 據 變 量
HISTCONTROL 的 狀 態
加 入 到 歷 史 列
表 中 。 如 果 行
是 修 改 過 的 歷
史 行 , 將 恢 復
該 歷 史 行 到 初
始 狀 態 。
previous-history (C-p) 從 歷 史
列 表 中 取 得 前
一 個 命 令 , 從
列 表 中 向 後 移
動 。
next-history (C-n) 從 歷 史 列
表 中 取 得 後 一
個 命 令 , 從 列
表 中 向 前 移 動
。
beginning-of-history (M-<) 移 動 到
歷 史 中 的 第 一
行 。
end-of-history (M->) 移 動 到
輸 入 歷 史 行 的
末 尾 , 也 就 是
當 前 輸 入 的 行
的 末 尾 。
reverse-search-history (C-r) 從 當 前
行 開 始 向 後 搜
索 , 按 照 需 要
在 歷 史 中 向 “上
”移 動 。 這 是 一
個 增 量 的 搜 索
。
forward-search-history (C-s) 從 當 前
行 開 始 向 前 搜
索 , 按 照 需 要
在 歷 史 中 向 “下
”移 動 。 這 是 一
個 增 量 的 搜 索
。
non-incremental-reverse-search-history (M-p) 從
當 前 行 開 始 向
後 , 使 用 非 增
量 搜 索 來 查 找
用 戶 給 出 的 字
符 串 。
non-incremental-forward-search-history (M-n) 從
當 前 行 開 始 向
前 , 使 用 非 增
量 搜 索 來 查 找
用 戶 給 出 的 字
符 串 。
history-search-forward 從 當 前
行 開 始 向 前 搜
索 歷 史 , 查 找
從 當 前 行 首 到 point
之 間 的 字 符 串
。 這 是 一 個 非
增 量 的 搜 索 。
history-search-backward 從 當 前
行 開 始 向 後 搜
索 歷 史 , 查 找
從 當 前 行 首 到 point
之 間 的 字 符 串
。 這 是 一 個 非
增 量 的 搜 索 。
yank-nth-arg (M-C-y) 將 前 一 個
命 令 的 第 一 個
參 數 (通 常 是 上
一 行 的 第 二 個
詞 ) 插 入 到 point 位
置 。 有 參 數 n
時 , 將 前 一 個
命 令 的 第 n 個
詞 (前 一 個 命 令
中 的 詞 從 0 開 始
計 數 ) 插 入 到 point
位 置 。 負 數 參
數 則 插 入 前 一
個 命 令 倒 數 第
n 個 詞 。
yank-last-arg (M-., M-_) 插 入 前
一 個 命 令 的 最
後 一 個 參 數 (上
一 歷 史 條 目 的
最 後 一 個 詞 )。
有 參 數 時 , 行
爲 類 似 於
yank-nth-arg。 後 繼 的
yank-last-arg 調 用 將 從
歷 史 列 表 中 向
後 移 動 , 依 次
將 每 行 的 最 後
一 個 參 數 插 入
。
shell-expand-line (M-C-e) 擴 展 行
, 像 shell 做 的 那 樣
。 其 中 包 含 別
名 和 歷 史 擴 展
, 還 有 所 有 的 shell
詞 的 擴 展 。 參
見 下 面 的 HISTORY
EXPANSION 中 關 於 歷
史 擴 展 的 描 述
。
history-expand-line (M-^) 在 當 前
行 進 行 歷 史 擴
展 。 參 見 下 面
的 HISTORY EXPANSION 中
關 於 歷 史 擴 展
的 描 述 。
magic-space 在 當 前 行 進
行 歷 史 擴 展 ,
並 插 入 一 個 空
格 。 參 見 下 面
的 HISTORY EXPANSION 中
關 於 歷 史 擴 展
的 描 述 。
alias-expand-line 在 當 前 行
進 行 別 名 擴 展
, 參 見 上 面 的
ALIASES 中 關 於
別 名 擴 展 的 描
述 。
history-and-alias-expand-line 在 當 前
行 進 行 歷 史 和
別 名 擴 展 。
insert-last-argument (M-., M-_) 與
yank-last-arg 同 義 。
operate-and-get-next (C-o) 接 受 當
前 行 , 加 以 執
行 , 從 歷 史 中
取 出 相 對 當 前
行 的 下 一 行 進
行 編 輯 。 任 何
參 數 都 被 忽 略
。
edit-and-execute-command (C-xC-e) 啓 動
一 個 編 輯 器 ,
編 輯 當 前 命 令
行 , 將 結 果 作
爲 shell 命 令 運 行 。
Bash 將 依 次 試 着
運 行 $FCEDIT,
$EDITOR, 和 emacs 作
爲 編 輯 器 。
Commands for
Changing Text 改 變 文 本
delete-char (C-d) 刪 除 point 處
的 字 符 。 如 果 point
在 行 首 , 行 中
沒 有 字 符 , 最
後 一 次 輸 入 的
字 符 沒 有 被 關
聯 到 delete-char, 將
返 回 EOF.
backward-delete-char (Rubout) 刪 除 光
標 之 後 的 字 符
。 當 給 出 一 個
數 值 的 參 數 時
, 保 存 刪 除 的
文 本 到 kill ring 中 。
forward-backward-delete-char 刪 除 光
標 下 的 字 符 ,
除 非 光 標 在 行
尾 , 此 時 刪 除
光 標 後 的 字 符
。
quoted-insert (C-q, C-v) 將 輸 入
的 下 一 字 符 保
持 原 樣 添 加 到
行 中 。 例 如 ,
可 以 用 它 來 插
入 類 似 C-q 的 字
符 。
tab-insert (C-v TAB) 插 入 一 個
跳 格 符 號 。
self-insert
(a, b, A, 1, !, ...) 插
入 鍵 入 的 字 符
。
transpose-chars (C-t) 將 point 之 前
的 字 符 向 前 移
動 , 越 過 point 處 的
字 符 , 同 時 也
改 變 point 的 位 置 。
如 果 point 在 行 尾 ,
將 調 換 point 之 前 的
兩 個 字 符 。 負
數 參 數 沒 有 作
用 。
transpose-words (M-t) 將 point 之 前
的 詞 向 前 移 動
, 越 過 point 處 的 詞
, 同 時 也 改 變 point
的 位 置 。 如 果 point
在 行 尾 , 將 調
換 行 中 的 最 後
兩 個 詞 。
upcase-word (M-u) 將 當 前 (或
下 一 個 ) 詞 變 成
全 大 寫 。 有 負
值 的 參 數 時 ,
將 前 一 個 詞 變
爲 大 寫 , 但 是
不 移 動 point。
downcase-word (M-l) 將 當 前 (或
下 一 個 ) 詞 變 成
全 小 寫 。 有 負
值 的 參 數 時 ,
將 前 一 個 詞 變
爲 小 寫 , 但 是
不 移 動 point。
capitalize-word (M-c) 將 當 前
(或 下 一 個 ) 詞 變
爲 首 字 大 寫 。
有 負 值 的 參 數
時 , 將 前 一 個
詞 變 爲 首 字 大
寫 , 但 是 不 移
動 point。
overwrite-mode 控 制 插 入
/改 寫 模 式 。 給
出 一 個 正 整 數
參 數 時 , 切 換
爲 改 寫 模 式 。
給 出 一 個 非 正
數 參 數 時 , 切
換 爲 插 入 模 式
。 這 個 命 令 隻
影 響 emacs 模 式 ;
vi 模 式 的 改 寫
與 此 不 同 。 每
個 對 readline() 的 調
用 都 以 插 入 模
式 開 始 。 在 改
寫 模 式 下 , 關
聯 到 self-insert 的 字
符 替 換 point 處 的 字
符 , 而 不 是 將
它 推 到 右 邊 。
關 聯 到 backward-delete-char
的 字 符 以 空 格
替 換 point 前 的 字 符
。 默 認 情 況 下
, 這 個 命 令 沒
有 關 聯 。
Killing and
Yanking 剪 切 和 粘 貼
kill-line (C-k) 剪 切 從 point
到 行 尾 的 文 本
。
backward-kill-line (C-x Rubout) 反 向
剪 切 到 行 首 。
unix-line-discard (C-u) 反 向 剪
切 到 行 首 。 與
backward-kill-line 沒 有 什
麼 區 別 。 剪 切
的 文 本 被 保 存
於 kill-ring 中 。
kill-whole-line 剪 切 當 前
行 中 所 有 字 符
, 不 管 point 在 什 麼
位 置 。
kill-word (M-d) 剪 切 從 point
到 當 前 詞 尾 ,
或 者 如 果 point 在 詞
之 間 , 那 麼 剪
切 到 下 一 詞 尾
。
backward-kill-word (M-Rubout) 剪 切 point
之 後 的 詞 。 詞
的 邊 界 與 backward-word
使 用 的 相 同 。
unix-word-rubout (C-w) 剪 切 point 之
後 的 詞 , 使 用
空 白 作 爲 詞 的
邊 界 。 剪 切 的
文 本 被 保 存 於
kill-ring 中 。
delete-horizontal-space (M-\) 刪 除 point
兩 邊 的 所 有 空
格 和 跳 格 。
kill-region 剪 切 當 前 region
的 文 本 。
copy-region-as-kill 將 region 的 文
本 複 製 到 剪 切
緩 衝 區 中 。
copy-backward-word 將 point 前 面
的 詞 複 製 到 剪
切 緩 衝 區 中 。
詞 的 邊 界 與
backward-word 使 用 的 相
同 。
copy-forward-word 將 point 之 後
的 詞 複 製 到 剪
切 緩 衝 區 中 。
詞 的 邊 界 與
backward-word 使 用 的 相
同 。
yank (C-y) 將 kill-ring 頂 部 的
內 容 粘 貼 到 point 處
的 緩 衝 區 中
yank-pop (M-y) 輪 轉 kill-ring,
粘 貼 新 的 頂 部
內 容 。 只 能 在
yank 或 yank-pop 之 後
使 用 。
Numeric
Arguments 數 值 參 數
digit-argument (M-0, M-1, ..., M--) 將 這
個 數 字 加 入 已
有 的 (already accumulating) 參 數
中 , 或 者 開 始
新 的 參 數 。 M-- 開
始 一 個 否 定 的
參 數 。
universal-argument 這 是 指 定
參 數 的 另 一 種
方 法 。 如 果 這
個 命 令 後 面 跟
着 一 個 或 多 個
數 字 , 可 能 還
包 含 前 導 的 負
號 , 這 些 數 字
定 義 了 參 數 。
如 果 命 令 之 後
跟 隨 着 數 字 ,
再 次 執 行
universal-argument 將 結 束
數 字 參 數 , 但
是 其 他 情 況 下
被 忽 略 。 有 一
種 特 殊 情 況 ,
如 果 命 令 之 後
緊 接 着 一 個 並
非 數 字 或 負 號
的 字 符 , 下 一
命 令 的 參 數 計
數 將 乘 以 4。 參
數 計 數 初 始 是
1, 因 此 第 一 次
執 行 這 個 函 數
, 使 得 參 數 計
數 爲 4, 第 二 次
執 行 使 得 參 數
計 數 爲 16, 以 此
類 推 。
Completing
補 全
complete (TAB) 試 着 對 point 之
前 的 文 本 進 行
補 全 。 Bash 依 次
試 着 將 文 本 作
爲 一 個 變 量 (如
果 文 本 以 $ 開
始 ), 一 個 用 戶
名 (如 果 文 本 以
~ 開 始 ), 主 機
名 (如 果 文 本 以
@ 開 始 ), 或 者
命 令 (以 及 別 名
和 函 數 ) 來 補 全
。 如 果 這 些 都
沒 有 匹 配 , 將
嘗 試 文 件 名 補
全 。
possible-completions (M-?) 列 出 point
之 前 的 文 本 可
能 的 補 全 。
insert-completions (M-*) 插 入
possible-completions 已 產 生
的 point 之 前 的 文 本
所 有 的 補 全 。
menu-complete 與 complete 相 似
, 但 是 使 用 可
能 的 補 全 列 表
中 的 某 個 匹 配
替 換 要 補 全 的
詞 。 重 複 執 行
menu-complete 將 遍 歷 可
能 的 補 全 列 表
, 插 入 每 個 匹
配 。 到 達 補 全
列 表 的 結 尾 時
, 鳴 終 端 響 鈴
(按 照 bell-style 的 設
置 來 做 ) 並 恢 復
初 始 的 文 本 。
參 數 n 將 在 匹
配 列 表 中 向 前
移 動 n 步 ; 負
數 參 數 可 以 用
於 在 列 表 中 向
後 移 動 。 這 個
命 令 應 當 與 TAB
鍵 關 聯 , 但 是
默 認 情 況 下 是
沒 有 關 聯 的 。
delete-char-or-list 刪 除 光 標
下 的 字 符 , 如
果 不 是 在 行 首
或 行 尾 (類 似
delete-char)。 如 果 在
行 尾 , 行 爲 與
possible-completions 一 致 。
這 個 命 令 默 認
沒 有 關 聯 。
complete-filename (M-/) 嘗 試 對 point
之 前 的 文 本 進
行 文 件 名 補 全
。
possible-filename-completions (C-x /) 列 出
point 之 前 的 文 本 可
能 的 補 全 , 將
它 視 爲 文 件 名
。
complete-username (M-~) 嘗 試 對 point
之 前 的 文 本 進
行 補 全 , 將 它
視 爲 用 戶 名 。
possible-username-completions (C-x ~) 列 出
point 之 前 的 文 本 可
能 的 補 全 , 將
它 視 爲 用 戶 名
。
complete-variable (M-$) 嘗 試 對 point
之 前 的 文 本 進
行 補 全 , 將 它
視 爲 shell 變 量 。
possible-variable-completions (C-x $) 列 出
point 之 前 的 文 本 可
能 的 補 全 , 將
它 視 爲 shell 變 量 。
complete-hostname (M-@) 嘗 試 對 point
之 前 的 文 本 進
行 補 全 , 將 它
視 爲 主 機 名 。
possible-hostname-completions (C-x @) 列 出
point 之 前 的 文 本 可
能 的 補 全 , 將
它 視 爲 主 機 名
。
complete-command (M-!) 嘗 試 對 point
之 前 的 文 本 進
行 補 全 , 將 它
視 爲 命 令 名 。
命 令 補 全 嘗 試
着 將 此 文 本 依
次 與 別 名 , 保
留 字 , shell 函 數 ,
shell 內 建 命 令 , 最
後 是 可 執 行 文
件 名 進 行 匹 配
。
possible-command-completions (C-x !) 列 出
point 之 前 的 文 本 可
能 的 補 全 , 將
它 視 爲 命 令 名
。
dynamic-complete-history (M-TAB) 嘗 試
對 point 之 前 的 文 本
進 行 補 全 , 將
此 文 本 與 歷 史
列 表 中 的 行 相
比 較 來 查 找 可
能 的 補 全 匹 配
。
complete-into-braces (M-{) 進 行 文
件 名 補 全 , 將
可 能 的 補 全 列
表 放 在 花 括 號
中 插 入 , 使 得
列 表 可 以 被 shell 使
用 (參 見 上 面 的
Brace Expansion 花 括 號 擴
展 )。
Keyboard
Macros 宏
start-kbd-macro (C-x () 開 始 保
存 輸 入 字 符 爲
當 前 鍵 盤 宏 。
end-kbd-macro (C-x )) 停 止 保
存 輸 入 字 符 爲
當 前 鍵 盤 宏 ,
保 存 宏 定 義 。
call-last-kbd-macro (C-x e) 重 新 執
行 上 次 定 義 的
鍵 盤 宏 , 即 顯
示 出 宏 中 的 字
符 , 好 像 它 們
是 從 鍵 盤 輸 入
的 一 樣 。
Miscellaneous
re-read-init-file (C-x C-r) 讀 入
inputrc 文 件 的 內 容
, 合 併 其 中 的
按 鍵 關 聯 和 變
量 賦 值 。
abort (C-g) 取 消 當 前 編
輯 命 令 , 鳴 終
端 響 鈴 (按 照
bell-style 的 設 置 來
做 )。
do-uppercase-version (M-a, M-b, M-x, ...)
如 果 有 Meta 前 綴 的
字 符 x 是 小 寫
的 , 那 麼 與 命
令 相 關 連 的 是
對 應 的 大 寫 字
符 。
prefix-meta (ESC) 將 輸 入 的
下 一 個 字 符 加
上 Meta 前 綴 。
ESC f 等 價 於
Meta-f.
undo (C-_, C-x C-u) 增 量 的 撤
銷 , 分 別 記 住
每 一 行 。
revert-line (M-r) 撤 銷 這 一
行 的 所 有 修 改
。 這 與 執 行 命
令 undo 足 夠 多 次
的 效 果 相 同 ,
將 這 一 行 恢 復
到 初 始 狀 態 。
tilde-expand (M-&) 對 當 前
詞 進 行 波 浪 線
擴 展 。
set-mark (C-@, M-<space>) 在 point 處
設 置 mark。 如 果 給
出 了 數 值 的 參
數 , 標 記 被 設
置 到 那 個 位 置
。
exchange-point-and-mark (C-x C-x) 交 換
point 和 mark。 當 前 光
標 位 置 被 設 置
爲 保 存 的 位 置
, 舊 光 標 位 置
被 保 存 爲 mark。
character-search (C-]) 讀 入 一
個 字 符 , point 移 動
到 這 個 字 符 下
一 次 出 現 的 地
方 。 負 數 將 搜
索 上 一 個 出 現
。
character-search-backward (M-C-]) 讀 入
一 個 字 符 , point 移
動 到 這 個 字 符
上 一 次 出 現 的
地 方 。 負 數 將
搜 索 下 面 的 出
現 。
insert-comment (M-#) 沒 有 數 值
的 參 數 時 , readline
變 量 comment-begin 的 值
將 被 插 入 到 當
前 行 首 。 如 果
給 出 一 個 數 值
的 參 數 , 命 令
的 行 爲 類 似 於
一 個 開 關 : 如
果 行 首 字 符 不
匹 配 comment-begin 的 值
, 將 插 入 這 個
值 , 否 則 匹 配
comment-begin 的 字 符 將
被 從 行 首 刪 除
。 在 兩 種 情 況
下 , 這 一 行 都
被 接 受 , 好 像
輸 入 了 新 行 符
一 樣 。 comment-begin 的
默 認 值 使 得 這
個 命 令 將 當 前
行 變 成 一 條 shell 註
釋 。 如 果 數 值
參 數 使 得 註 釋
字 符 被 刪 除 ,
這 一 行 將 被 shell 執
行 。
glob-complete-word (M-g)
point 之 前
的 詞 被 當 作 路
徑 擴 展 的 一 個
模 式 , 尾 部 暗
含 了 一 個 星 號
。 這 個 模 式 被
用 來 爲 可 能 的
補 全 產 生 匹 配
的 文 件 名 列 表
。
glob-expand-word (C-x
*)
point 之 前
的 詞 被 當 作 路
徑 擴 展 的 一 個
模 式 , 匹 配 的
文 件 名 的 列 表
被 插 入 , 替 換
這 個 詞 。 如 果
給 出 一 個 數 值
參 數 , 在 路 徑
擴 展 之 前 將 添
加 一 個 星 號 。
glob-list-expansions (C-x
g) 顯 示 glob-expand-word 可
能 產 生 的 擴 展
的 列 表 , 重 繪
當 前 行 。 如 果
給 出 一 個 數 值
參 數 , 在 路 徑
擴 展 之 前 將 添
加 一 個 星 號 。
dump-functions 向 readline 輸 出
流 打 印 所 有 的
函 數 和 它 們 的
按 鍵 關 聯 。 如
果 給 出 一 個 數
值 參 數 , 輸 出
將 被 格 式 化 ,
可 以 用 作 inputrc 文
件 一 部 分 。
dump-variables 向 readline 輸 出
流 打 印 所 有 可
設 置 的 readline 函 數
。 如 果 給 出 一
個 數 值 參 數 ,
輸 出 將 被 格 式
化 , 可 以 用 作
inputrc 文 件 一 部 分
。
dump-macros 向 readline 輸 出 流
打 印 所 有 關 聯
到 宏 的 readline 按 鍵
序 列 以 及 它 們
輸 出 的 字 符 串
。 如 果 給 出 一
個 數 值 參 數 ,
輸 出 將 被 格 式
化 , 可 以 用 作
inputrc 文 件 一 部 分
。
display-shell-version (C-x C-v) 顯 示
當 前 bash 實 例 的
版 本 信 息 。
Programmable
Completion 可 編 程 補 全
當 試 圖 對 一 個
命 令 的 參 數 進
行 詞 的 補 全 時
, 如 果 已 經 使
用 內 建 命 令 complete
定 義 了 這 個 命
令 的 補 全 規 則 (
compspec), 將 啓 動 可
編 程 補 全 功 能
(參 見 下 面 的
shell 內 建 命 令 (SHELL
BUILTIN COMMANDS) 章 節 )。
首 先 , 命 令 名
被 確 認 。 如 果
針 對 這 個 命 令
有 補 全 規 則 的
定 義 , 那 麼 將
使 用 規 則 來 產
生 可 能 的 詞 的
補 全 的 列 表 。
如 果 命 令 詞 是
一 個 路 徑 全 名
, 將 首 先 搜 索
針 對 這 個 路 徑
全 名 的 規 則 。
如 果 針 對 這 個
路 徑 全 名 沒 有
找 到 規 則 , 將
嘗 試 查 找 針 對
最 後 一 個 斜 槓
後 面 的 部 分 的
規 則 。 一 旦 找
到 了 一 個 規 則
, 它 將 用 作 產
生 匹 配 的 詞 。
如 果 沒 有 找 到
, 將 進 行 上 面
Completing 中 描 述 的
bash 默 認 的 補 全
。 首 先 , 將 執
行 規 則 指 定 的
動 作 。 只 有 以
被 補 全 的 詞 開
始 的 匹 配 詞 纔
會 被 返 回 。 當
在 文 件 或 目 錄
名 補 全 中 使 用
-f 或 -d 選 項 時
, shell 變 量
FIGNORE 將 用 於
對 匹 配 進 行 過
濾 。 接 下 來 ,
將 產 生 所 有 由
-G 選 項 給 出 的
文 件 名 擴 展 模
式 指 定 的 補 全
。 模 式 產 生 的
詞 不 必 匹 配 要
補 全 的 詞 。 shell 變
量 GLOBIGNORE 不 會
用 於 過 濾 匹 配
結 果 , 但 是 變
量 FIGNORE 會 被
使 用 。 接 下 來
, 將 考 慮 -W 選
項 的 參 數 指 定
的 字 符 串 。 這
個 字 符 串 首 先
被 劃 分 , 用 特
殊 變 量 IFS
中 的 字 符 作 爲
分 隔 符 。 shell 引 用
被 當 作 一 個 詞
。 接 下 來 , 每
個 詞 被 擴 展 ,
使 用 上 面
EXPANSION 中 描 述
的 brace expansion, tilde expansion, parameter
和 variable expansion, command substitution,
arithmetic expansion, 以 及 pathname expansion
規 則 處 理 。 對
於 結 果 , 再 使
用 上 面 Word Splitting 中
描 述 的 規 則 劃
分 成 詞 。 擴 展
的 結 果 與 要 補
全 的 詞 進 行 前
部 一 致 的 比 較
, 匹 配 的 詞 成
爲 可 能 的 補 全
。 在 這 些 匹 配
被 產 生 後 , 任
何 由 -F 和 -C 選
項 指 定 的 shell 函 數
和 命 令 將 被 執
行 。 當 命 令 或
函 數 被 執 行 時
, 變 量 COMP_LINE
和 COMP_POINT 被 賦
值 , 使 用 上 面
Shell Variables 中 的 規 則
。 如 果 要 執 行 shell
函 數 , 還 將 設
置 變 量 COMP_WORDS
和 COMP_CWORD 當 函
數 或 命 令 被 執
行 時 , 第 一 個
參 數 是 等 待 參
數 被 補 全 的 命
令 的 名 稱 , 第
二 個 參 數 是 要
補 全 的 詞 , 第
三 個 參 數 是 當
前 命 令 行 中 ,
要 補 全 的 詞 前
面 的 詞 。 對 要
補 全 的 詞 產 生
的 補 全 不 會 進
行 任 何 過 濾 ;
函 數 或 命 令 在
產 生 匹 配 時 有
完 全 的 自 由 。
任 何 -F 指 定 的
函 數 將 被 首 先
執 行 。 函 數 可
以 使 用 任 何 shell 功
能 , 包 含 內 建
命 令 compgen, 來 產
生 匹 配 。 它 必
須 將 可 能 的 補
全 放 到 數 組 變
量 COMPREPLY 中 。
接 下 來 , 任 何
-C 選 項 指 定 的
命 令 將 被 執 行
, 其 執 行 環 境
與 命 令 替 換 的
環 境 相 同 。 它
應 當 向 標 準 輸
出 打 印 一 個 補
全 的 列 表 , 每
行 一 個 。 反 斜
槓 可 以 用 來 轉
義 一 個 新 行 符
, 如 果 需 要 的
話 。 所 有 可 能
的 補 全 都 產 生
之 後 , 將 對 列
表 進 行 -X 選 項
指 定 的 任 何 過
濾 。 過 濾 器 是
一 個 模 式 , 和
路 徑 名 擴 展 中
的 一 樣 ; 模 式
中 的 & 替 換 爲
要 補 全 的 詞 。
字 面 上 的 & 可
以 用 反 斜 槓 轉
義 ; 反 斜 槓 在
進 行 匹 配 時 被
刪 除 。 任 何 匹
配 這 個 模 式 的
補 全 將 從 列 表
中 刪 除 。 前 導
的 ! 將 使 模 式
含 義 相 反 ; 這
種 情 況 下 , 任
何 不 匹 配 這 個
模 式 的 補 全 將
被 刪 除 。 最 後
, B-P 和 -S 指 定 的
任 何 前 綴 和 後
綴 被 添 加 到 補
全 列 表 的 每 個
成 員 後 面 , 結
果 返 回 給 readline 補
全 代 碼 , 作 爲
可 能 的 補 全 列
表 。 如 果 先 前
執 行 的 動 作 沒
有 產 生 任 何 匹
配 , 並 且 在 定
義 compspec 規 則 時 ,
爲 complete 命 令 提 供
了 -o dirname 選 項 ,
將 嘗 試 目 錄 名
補 全 。 默 認 情
況 下 , 如 果 找
到 了 一 個 規 則
, 它 產 生 的 任
何 東 西 都 被 返
回 給 補 全 代 碼
, 作 爲 可 能 的
補 全 的 全 集 。
不 再 嘗 試 默 認
的 bash 補 全 , readline
默 認 的 文 件 名
補 全 也 會 禁 止
。 如 果 定 義 規
則 時 , 爲 complete 命
令 提 供 了 -o default
選 項 , 在 規 則
沒 有 產 生 匹 配
時 將 進 行 readline 默
認 的 補 全 處 理
。 當 一 個 規 則
指 出 期 望 目 錄
名 補 全 時 , 可
編 程 補 全 函 數
強 制 readline 在 補 全
的 名 稱 後 面 添
加 一 個 斜 槓 ,
如 果 它 是 一 個
到 目 錄 的 符 號
連 接 。 然 後 還
要 經 過 readline 變 量
mark-directories 的 值 處 理
, 不 管 readline 變 量
mark-symlinked-directories 的 值 是
什 麼 。
當 啓 用
內 建 命 令 set 的
-o history 選 項 時 , shell
允 許 訪 問 command
history, 以 前 輸 入
的 命 令 的 列 表
。 HISTSIZE 的 值 用 作
命 令 列 表 中 保
存 的 命 令 數 量
。 過 去 HISTSIZE
個 (默 認 爲 500) 命 令
將 被 保 存 。 shell 將
每 條 命 令 在 進
行 參 數 和 變 量
擴 展 之 前 保 存
到 歷 史 列 表 中
(參 見 上 面 的
EXPANSION 段 落 ),
但 是 是 在 歷 史
擴 展 進 行 之 後
, 並 且 要 經 過 shell
變 量 HISTIGNORE 和
HISTCONTROL 處 理 。
在 啓 動 時 , 歷
史 根 據 以 變 量
HISTFILE 的 值 爲
名 的 文 件 (默 認
是 ~/.bash_history) 進 行 初
始 化 。 如 果 需
要 的 話 , 以
HISTFILE 爲 名 的
文 件 將 被 截 斷
, 來 包 含 不 超
過 變 量
HISTFILESIZE 的 值
指 定 的 行 數 。
當 交 互 shell 退 出 時
, 最 後 $HISTSIZE
行 被 從 歷 史 列
表 中 複 製 到
$HISTFILE 文 件 中
。 如 果 啓 用 了 shell
選 項 histappend (參 見
下 面 的 shell 內 建
命 令 (SHELL BUILTIN COMMANDS)
章 節 中 對 內 建
命 令 shopt 的 描 述
), 這 些 行 被 追
加 到 歷 史 文 件
中 , 否 則 歷 史
文 件 被 覆 蓋 。
如 果 HISTFILE 被
取 消 定 義 , 或
者 如 果 歷 史 文
件 不 可 寫 , 歷
史 將 不 會 保 存
。 保 存 歷 史 之
後 , 歷 史 文 件
被 截 斷 , 以 包
含 不 超 過
HISTFILESIZE 行 。
如 果 HISTFILESIZE
被 取 消 定 義 ,
不 會 進 行 截 斷
操 作 。 內 建 命
令 fc (參 見 下 面
的 shell 內 建 命 令
(SHELL BUILTIN COMMANDS) 章 節 )
可 以 用 來 列 出
或 修 改 並 重 新
執 行 歷 史 列 表
中 的 一 部 分 。
內 建 命 令 history 可
以 用 來 顯 示 或
修 改 歷 史 列 表
, 操 作 歷 史 文
件 。 當 使 用 命
令 行 編 輯 時 ,
每 種 編 輯 模 式
都 有 搜 索 命 令
, 提 供 對 歷 史
列 表 的 訪 問 。
shell 允
許 控 制 哪 些 命
令 被 保 存 到 歷
史 列 表 中 。 可
以 設 置 HISTCONTROL
和 HISTIGNORE 變 量
, 來 使 得 shell 只 保
存 輸 入 命 令 的
一 個 子 集 。 shell 選
項 cmdhist 如 果 被 啓
用 , 將 使 得 shell 將
多 行 的 命 令 的
每 一 行 保 存 到
同 一 個 歷 史 條
目 中 , 在 需 要
的 地 方 添 加 分
號 來 保 證 語 義
的 正 確 性 。 shell 選
項 lithist 使 得 shell 保
存 命 令 時 , 保
留 嵌 入 的 新 行
而 不 是 用 分 號
代 替 。 參 見 下
面 shell 內 建 命 令
(SHELL BUILTIN COMMANDS) 中 ,
內 建 命 令 shopt 的
描 述 , 有 關 設
置 和 取 消 shell 選 項
的 信 息 。
shell 支
持 歷 史 擴 展 機
制 , 類 似 於 csh
中 歷 史 擴 展 。
這 一 節 描 述 了
可 用 的 語 法 特
徵 。 在 交 互 的 shell
中 這 一 機 制 被
默 認 啓 用 , 可
以 使 用 內 建 命
令 set 的 -H 選 項
來 禁 用 它 (參 見
下 面 的 shell 內 建
命 令 (SHELL BUILTIN COMMANDS)
章 節 )。 非 交 互
的 shell 默 認 不 進 行
歷 史 擴 展 。 歷
史 擴 展 將 歷 史
列 表 中 的 詞 引
入 輸 入 流 中 ,
使 得 可 以 方 便
地 重 複 已 執 行
命 令 , 在 當 前
輸 入 行 中 爲 前
一 個 命 令 插 入
新 的 參 數 , 或
者 快 速 修 正 前
一 個 命 令 中 的
錯 誤 。 歷 史 擴
展 在 讀 入 一 整
行 後 , 在 shell 將 它
拆 分 成 詞 之 前
立 即 進 行 。 它
由 兩 部 分 組 成
。 首 先 是 判 斷
替 換 中 使 用 歷
史 列 表 中 哪 一
行 。 其 次 是 選
擇 那 一 行 中 要
包 含 到 當 前 行
中 的 部 分 。 從
歷 史 中 選 擇 的
行 稱 爲 event, 從
那 一 行 中 選 擇
的 部 分 是 words。
可 以 用 多 種 多
樣 的 modifiers 來 操
縱 所 選 的 詞 。
在 讀 入 輸 入 時
, 行 被 按 照 同
樣 方 式 分 解 成
詞 , 因 此 多 個
以 metacharacter 分 隔 的
詞 , 如 果 被 引
號 包 含 , 就 被
當 成 一 個 詞 。
歷 史 擴 展 由 歷
史 擴 展 字 符 引
入 , 默 認 是
!。 只 有 反 斜
槓 (\) 和 單 引 號
可 以 引 用 歷 史
擴 展 字 符 。 內
建 命 令 shopt 可 以
設 定 多 個 選 項
值 , 來 調 整 歷
史 擴 展 的 行 爲
。 如 果 shell 選 項
histverify 被 啓 用 (參
見 內 建 命 令 shopt
的 描 述 ), 並 且
正 在 使 用 readline,
歷 史 替 換 不 會
被 立 即 傳 給 shell 解
釋 器 。 與 此 相
對 , 擴 展 後 的
行 被 重 新 載 入
readline 編 輯 緩 衝 區
, 進 行 進 一 步
的 修 改 。 如 果
正 在 使 用 readline,
並 且 啓 用 了 shell 選
項 histreedit, 失 敗
的 歷 史 替 換 將
被 重 新 載 入 到
readline 編 輯 緩 衝 區
, 進 行 改 正 。
內 建 命 令 history 的
-p 選 項 可 以 用
來 在 執 行 之 前
查 看 歷 史 擴 展
將 如 何 進 行 。
內 建 命 令 history 的
-s 選 項 可 以 用
來 在 歷 史 列 表
末 尾 添 加 命 令
, 而 不 真 正 執
行 它 們 , 從 而
在 接 下 來 的 調
用 中 可 以 使 用
它 們 。
shell 允
許 控 制 歷 史 擴
展 機 制 使 用 的
多 種 字 符 (參 見
上 面 的 Shell Variables 中
histchars 的 描 述 )。
Event
Designators 事 件 指 示 器
(event designator) 是 一 個 對
歷 史 列 表 中 某
個 命 令 行 條 目
的 引 用 。
|
! 開 始 一 個 命
令 替 換 , 除 非
後 面 跟 隨 的 是 |
|
blank, newline, = 或 是 (. |
|
!n 引 用 命 令
行 |
|
|
n.
|
!-n 引
用 當 前 命 令 行
減 去 |
n. |
|
|
!! 引 用 上 一 條
命 令 。 這 是 |
’!-1’ 的 同 義 詞
。 |
|
!string 引
用 最 近 的 以 string
開 始 的 命 令 。
!?string[?] 引 用 最
近 的 包 含 string 的
命 令 。 尾 部 的
? 可 以 被 忽 略
, 如 果 string 之 後
緊 接 着 一 個 新
行 符 。
^ string1 ^
string2 ^ 快 速
替 換 。 重 複 上
一 條 命 令 , 將
string1 替 換 爲 string2.
與
’’!!:s/string1/string2/’’
等 價 (參 見 下 面
的 修 飾 符
(Modifiers))。
|
!# 到 此 爲 止 輸
入 的 整 個 命 令
行 。 |
|
Word
Designators 詞 指 示 器 (word
designator) 用 於 從 event 中
選 擇 期 望 的 詞
。 : 分 隔 event 規 則
與 word 指 示 器 。 它
可 以 忽 略 , 如
果 詞 指 示 器 以
^, $, *, -, 或 %
開 始 。 詞 被 從
行 首 開 始 編 號
, 第 一 個 詞 被
表 示 爲 0。 插 入
當 前 行 中 的 詞
以 單 個 空 格 分
隔 。
0 (zero) 第 0 個 詞 。 對
shell 來 將 , 這 是 命
令 名 。
|
n 第 |
n 個 詞 。
個 參 數
。 也 就 是 , 第 1
個 詞 。
$ 最 後 的 參 數 。
% 最 近 一 次 搜 索
’?string?’ 匹 配 的
詞 。
x-y 一 組 詞
;
’-y’
是 ’0-y’ 的 簡 寫
。
|
* 所 有
詞 , 除 了 第 |
|
0 個 。 這
是 ’1-$’ 的 同 義
詞 。 如 果 event 中 只
有 一 個 |
詞 , 使
用 * 也 不 是 錯
誤 ; 這 種 情 況
下 將 返 回 空 字
符 串 。
|
x* |
|
x-$ 的 簡
寫 。 |
|
|
x- |
|
-$ 的 簡 寫 , 就
像 x* 一 樣 , 但
是 忽 略 最 後 一
個 詞 。 |
|
如 果 給
出 了 一 個 word 指 示
器 , 沒 有 給 出 event
規 則 , 前 一 個
命 令 將 用 作 event。
修 飾 符 (Modifiers) 可
選 的 word 指 示 器 之
後 , 可 以 出 現
一 個 或 多 個 下
述 modifiers 的 序 列 ,
每 一 個 都 前 綴
有 ’:’。
|
h 刪 除
文 件 名 組 成 的
尾 部 , 只 保 留
頭 部 。 |
|
|
t 刪 除 文 件 名
組 成 中 前 面 的
成 分 , 保 留 尾
部 。 |
|
|
r 刪 除 |
|
.xxx 形 式
中 尾 部 的 後 綴
成 分 , 保 留 基
本 名 稱 部 分 。
|
e 刪 除
所 有 內 容 , 保
留 尾 部 的 後 綴
。 |
|
|
p 打 印 新 的 命
令 , 但 是 不 執
行 它 。 |
|
|
q 引 用 替 換 所
得 的 詞 , 使 它
不 再 進 行 替 換
。 |
|
|
x 引 用 替 換 所
得 的 詞 , 類 似
與 |
|
q, 但 是
會 根 據 blanks, 空
白 和 新 行 符 分
解 爲 詞 。
s/old/new/ 將 事
件 行 中 出 現 的
第 一 個 old 替 換
爲 new。 任 何 分
隔 符 都 可 以 用
來 代 替 /, 最 後
一 個 分 隔 符 是
可 選 的 , 如 果
它 是 事 件 行 的
最 後 一 個 字 符
。 old 和 new 中 的
分 隔 符 可 以 用
一 個 反 斜 槓 來
引 用 。 如 果 & 出
現 在 new 中 , 它
將 替 換 爲 old。
可 以 用 單 個 反
斜 槓 來 引 用 &。
如 果 old 爲 空 ,
它 將 設 置 爲 最
後 替 換 的 old,
或 者 , 如 果 前
面 沒 有 發 生 過
歷 史 替 換 , 就
是 !?string[?] 搜 索
中 的 最 後 一 個
string。
|
& 重 複 上 一
次 替 換 。 |
|
|
|
g 使 得 改 變 被
整 個 事 件 行 所
接 受 。 用 於 與 |
|
’:s’ 或
’:&’ 結 合 (例 |
如 ,
’:gs/old/new/’)。
如 果 與 ’:s’ 結
合 使 用 , 任 何
分 隔 符 都 可 以
用 來 代 替 /, 最
後 一 個 分 隔 符
是 可 選 的 , 如
果 它 是 事 件 行
的 最 後 一 個 字
符 。
除 非 另
外 說 明 , 這 一
章 介 紹 的 內 建
命 令 如 果 接 受
- 引 導 的 選 項
, 那 麼 它 也 接
受 -- 作 爲 參 數
, 來 指 示 選 項
的 結 束 :
[arguments] 沒
有 效 果 ; 這 個
命 令 除 了 擴 展
arguments 並 且 作 任
何 指 定 的 重 定
向 之 外 , 不 做
任 何 事 。 退 出
時 返 回 0。
. filename [arguments]
source filename [arguments] 讀
取 並 在 當 前 shell 環
境 中 執 行 filename 中
的 命 令 , 返 回
filename 中 最 後 一 個
命 令 的 返 回 狀
態 。 如 果 filename 中
不 包 含 斜 槓 (slash),
系 統 將 在
PATH 中 查 找
包 含 filename 的 目 錄
。 在 PATH 中
搜 索 的 文 件 不
必 是 可 執 行 的
。 如 果 bash 不 是
運 行 於 posix mode,
當 PATH 中 找
不 到 文 件 時 會
在 當 前 目 錄 搜
索 。 如 果 shopt 內
建 命 令 的 sourcepath
選 項 被 關 閉 ,
PATH 將 不 會
被 搜 索 。 如 果
有 任 何 arguments ,
它 們 成 爲 filename 的
位 置 參 數 (positional
parameters), 否 則 位 置
參 數 不 發 生 變
化 。 返 回 狀 態
是 腳 本 中 最 後
一 個 命 令 退 出
時 的 狀 態 。 沒
有 執 行 命 令 則
返 回 0, 沒 有 找
到 或 不 能 讀 取
filename 時 返 回 false。
alias [-p] [name[=value] ...]
Alias 不 帶
參 數 或 者 帶 -p
參 數 運 行 時 將
在 標 準 輸 出 以
這 樣 的 格 式 alias
name=value 給 出 別 名
列 表 。 如 果 有
參 數 , 將 創 建
提 供 了 value 的 name
的 別 名 。 value 中
尾 部 的 空 格 使
得 別 名 被 擴 展
時 , 下 一 個 詞
做 別 名 替 換 。
對 於 參 數 列 表
中 的 每 一 個
name, 如 果 value 沒
有 給 出 , 這 個
別 名 的 名 稱 和
值 會 被 打 印 出
來 。 Alias 返 回 true
除 非 name 沒 有 定
義 爲 別 名 。
bg [jobspec]
使 掛 起 的 程 序
jobspec 在 後 臺 繼 續
執 行 , 就 好 像
它 是 用 & 啓 動
的 一 樣 。 如 果
沒 有 指 定 jobspec,
shell 意 義 上 的 current job
當 前 作 業 將 被
使 用 。 bg jobspec 返
回 0, 除 非 當 前
禁 止 了 作 業 控
制 , 或 者 在 允
許 作 業 控 制 ,
但 是 沒 有 找 到
jobspec , 或 者 它 不
是 在 作 業 控 制
下 啓 動 的 時 候
。
bind [-m keymap] [-lpsvPSV]
bind [-m keymap] [-q
function] [-u function] [-r
keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x
keyseq:shell-command
bind [-m keymap]
keyseq:function-name
bind readline-command 顯 示 當
前 readline 鍵 和 功 能
的 , 將 一 個 按
鍵 序 列 和 一 個
readline 功 能 或 宏 進
行 關 聯 , 或 者
設 置 一 個 readline 變
量 。 每 一 個 在
非 選 項 的 參 數
都 是 一 個 命 令
, 好 像 它 是 在
.inputrc 中 出 現 的 一
樣 。 但 是 每 個
關 聯 或 者 命 令
必 須 作 爲 單 獨
的 參 數 傳 遞 ;
也 就 是 這 樣
’"\C-x\C-r":
re-read-init-file’。 如 果 有
參 數 , 它 們 有
如 下 的 意 義 :
-m keymap
使 用 keymap 作 爲 隨
後 的 關 聯 的 keymap。
可 選 的 keymap 名 稱
是 emacs, emacs-standard, emacs-meta, emacs-ctlx,
vi, vi-move, vi-command, 還 有
vi-insert。 vi 和
vi-command 等 價 ; emacs 和
emacs-standard 等 價 。
|
-l 列 出 所 有
的 |
readline 功 能 。
方 式 顯
示 readline 功 能 名 稱
和 關 聯
-P 列 出 當 前 readline
功 能 名 稱 和 關
聯 。
的 方 式
顯 示 readline 變 量 名
稱 和 值
-V 列 出 當 前 readline
變 量 和 值 。
的 方 式
顯 示 readline 鍵 序 列
和 對 應 的 宏
-S 顯 示 readline 宏 對
應 的 鍵 序 列 和
他 們 輸 出 的 字
符 串
-f filename
從 filename 中 讀 取 鍵
序 列
-q function 查 詢 那 些
鍵 將 執 行 function。
-u function 取 消 所 有
關 聯 到 function 的 鍵
。
-r keyseq 取 消 當 前
任 何 keyseq 的 關 聯
。
-x keyseq:shell-command 使
shell-command 在 keyseq 按
下 時 被 執 行 。
返 回 值 是 0, 除
非 給 出 了 一 個
不 能 識 別 的 選
項 或 是 產 生 了
一 個 錯 誤 。
break [n]
從 一 個 for, while,
until, 或 者 select 循
環 退 出 。 如 果
指 定 了 n , 就
跳 出 n 層 循 環
。 n 必 須 ≥ 1。 如
果 n 比 當 前 循
環 層 數 還 要 大
, 將 跳 出 所 有
循 環 。 返 回 值
是 0, 除 非 執 行
break 的 時 候 shell 不
是 在 執 行 一 個
循 環 。
builtin shell-builtin [arguments] 執
行 指 定 的 shell 內 建
命 令 , 傳 遞
arguments , 返 回 命
令 的 返 回 值 。
這 在 定 義 了 一
個 和 shell 內 建 命 令
同 名 的 函 數 時
很 有 用 , 在 那
個 函 數 中 使 用
它 來 執 行 相 應
的 功 能 。 cd 命
令 常 以 這 種 方
式 重 新 定 義 。
返 回 狀 態 是 false,
如 果 指 定 的
shell-builtin 並 不 是 一
個 shell 內 建 命 令 。
cd [-L|-P] [dir] 改 變
當 前 路 徑 到
dir。 這 個 變 量
的 默 認 值 是
HOME 目 錄 。
環 境 變 量
CDPATH 定 義 了
包 含 dir 的 搜 索
路 徑 。 在
CDPATH 中 可 選
的 路 徑 名 以 冒
號 (:) 分 隔 。
CDPATH 中 的 空
路 徑 名 與 當 前
路 徑 相 同 , 就
是 ’’.’’. 如
果 目 錄 名 以 斜
槓 (/,slash) 起 始 , 那
麼 CDPATH 不 會
被 使 用 。 -P 選
項 是 說 使 用 物
理 路 徑 結 構 而
不 是 跟 隨 符 號
鏈 接 , (參 見 set
命 令 中 的 -P 選
項 ); -L 選 項 強 制
跟 隨 符 號 鏈 接
。 另 外 , 選 項
- 與 $OLDPWD 是
相 同 的 。 返 回
值 是 true , 如 果 成
功 地 改 變 了 目
錄 ; 否 則 是 false。
command [-pVv] command [arg ...]
運 行 command , 使 用
args 作 爲 參 數 ,
禁 止 通 常 的 查
找 shell 函 數 的 過 程
。 只 有 內 建 命
令 或 者 PATH
中 包 含 的 命 令
可 以 執 行 。 如
果 給 出 -p 參 數
, command 的 查 找 是
以 PATH 的 默 認 值
進 行 的 。 這 樣
可 以 保 證 找 到
所 有 的 標 準 工
具 。 如 果 給 出
-V 或 者 -v 選 項
, 關 於 command 的 說
明 將 被 打 印 出
來 。 -v 選 項 使
得 表 述 這 個 命
令 的 詞 , 或 者
要 執 行 command 需 要
執 行 的 文 件 顯
示 出 來 ; -V 選
項 給 出 更 詳 細
的 描 述 。 如 果
給 出 -V 或 者 -v
選 項 , 退 出 狀
態 在 找 到 了 command
的 情 況 下 0, 沒
找 到 就 是 1。 如
果 沒 有 提 供 選
項 , 並 且 產 生
了 錯 誤 或 者 command
沒 有 找 到 , 退
出 狀 態 就 是 127。
否 則 , command 內 建
命 令 的 退 出 狀
態 是 command 的 退 出
狀 態 。
compgen [option] [word] 根 據
option 爲 word 產 生
可 能 的 補 全 。
option 是 內 建 命 令
complete 接 受 的 任 何
選 項 , 除 了 -p
和 -r, 將 匹 配
結 果 寫 到 標 準
輸 出 。 當 使 用
-F 或 -C 選 項 時
, 可 編 程 補 全
功 能 所 設 置 的
多 數 shell 變 量 如 果
存 在 , 其 值 將
不 再 有 用 。 產
生 的 匹 配 與 可
編 程 補 全 代 碼
根 據 補 全 規 則
加 上 相 同 的 標
誌 直 接 產 生 的
結 果 相 同 。 如
果 指 定 了 word,
只 有 匹 配 word 的
補 全 結 果 將 被
顯 示 出 來 。 返
回 值 爲 真 , 除
非 提 供 了 非 法
的 選 項 , 或 者
沒 有 產 生 匹 配
。
complete [-abcdefgjksuv] [-o
comp-option] [-A action] [-G
globpat] [-W
wordlist] [-P prefix] [-S
suffix]
[-X filterpat]
[-F function] [-C command]
name [name ...]
complete -pr
[name ...] 指 定 每 個
name 的 參 數 應 當
如 何 被 補 全 。
如 果 給 出 了 -p
選 項 , 或 者 沒
有 選 項 給 出 ,
現 有 的 補 全 規
則 將 被 顯 示 出
來 , 以 一 種 可
以 重 用 爲 輸 入
的 格 式 顯 示 。
-r 選 項 將 一 個
針 對 每 個 name 的
補 全 規 則 刪 除
。 或 者 , 如 果
沒 有 給 出 name,
將 刪 除 所 有 補
全 規 則 。 嘗 試
詞 的 補 全 時 ,
應 用 這 些 補 全
規 則 的 過 程 在
上 面 Programmable Completion(可
編 程 補 全 ) 中 詳
述 。 其 他 選 項
, 如 果 給 出 的
話 , 具 有 下 列
意 義 。 -G, -W, 和
-X 選 項 的 參 數
(如 果 需 要 的 話
, 還 包 括 -P 和
-S 選 項 ) 應 當 被
引 用 , 避 免 在
執 行 內 建 命 令
complete 之 前 被 擴 展
。
-o
comp-option
comp-option 控
制 着 compspec 除 了 簡
單 地 產 生 補 全
之 外 的 多 種 行
爲 。 comp-option 可 以
是 如 下 之 一 :
|
default 使 用 |
|
readline 的 默 認 文 件
名 補 全 , 如 果
compspec 沒 |
有 得 到
匹 配 。
dirnames 進
行 目 錄 名 補 全
, 如 果 compspec 沒 有
得 到 匹 配 。
filenames 告 訴 readline, compspec
產 生 了 文 件 名
, 使 它 可 以 進
行 任 何 文 件 名
專 用 的 處 理 (例
如 , 給 目 錄 名
加 上 斜 槓 或 消
除 尾 部 空 白 )。
主 要 用 於 shell 函 數
。
|
nospace 告 訴 |
|
readline 不 要 向 補 全
的 詞 在 行 的 最
後 添 加 一 個 空 |
格 (這 是
默 認 行 爲 )。
-A action
action 可 以
是 下 列 之 一 ,
來 產 生 一 系 列
可 能 的 補 全 結
果 :
|
alias 起 別 名 。
也 可 以 用 |
|
-a 指 定 。 |
|
arrayvar 數
組 變 量 名 。
|
binding |
|
Readline 按 鍵 關 聯
。 |
|
builtin |
|
shell 內 建 命 令 的
名 稱 。 也 可 以
用 -b 指 定 。
命 令 名
。 也 可 以 用 -c
指 定 。
directory 目
錄 名 。 也 可 以
用 -d 指 定 。
disabled 被 禁 用 的 內
建 命 令 名 稱 。
|
enabled 啓 用 的 內
建 命 令 名 稱 。 |
|
|
export 被 導 出 的 |
|
shell 變 量
名 稱 。 也 可 以
用 -e 指 定 。
|
file 文 件
名 。 也 可 以 用 |
|
-f 指 定
。 |
|
function
shell 函 數
的 名 稱 。
|
group 組 名 。 也
可 以 用 |
|
-g 指 定 。 |
|
helptopic 內
建 命 令 help 接 受
的 幫 助 主 題 。
hostname 主 機 名 , 從
環 境 變 量
HOSTFILE 指 定 的
文 件 中 得 到 。
|
job 作 業 名 , 如
果 作 業 控 制 被
激 活 的 話 。 也
可 以 用
-j 指 |
定 。
|
keyword |
|
shell 保 留 字
。 也 可 以 用 -k
指 定 。 |
|
|
running |
|
|
|
正 在 運
行 的 作 業 名 ,
如 果 作 業 控 制
被 激 活 的 話 。
|
|
|
|
|
|
service 服 務 名 。
也 可 以 用 |
|
-s 指 定 。 |
|
|
setopt 內 建 命 令 |
|
|
|
set 的 -o
選 項 的 有 效 參
數 。
|
shopt 內 建
命 令 |
shopt 接 受
的 shell 選 項 名 。 |
|
signal 信 號 名 。 |
|
|
stopped 停 止 的 作
業 |
|
名 , 如
果 作 業 控 制 被
激 活 的 話 。
|
|
|
|
|
|
user 用 戶 名 。 也
可 以 用 |
|
-u 指 定 。 |
|
variable
shell 變 量
的 名 稱 。 也 可
以 用 -v 指 定 。
-G globpat
文 件 名 擴 展 模
式 globpat 被 擴 展 ,
產 生 可 能 的 補
全 。
-W wordlist
wordlist
被 使 用 IFS
特 殊 變 量 中 的
字 符 作 爲 定 界
符 來 拆 分 , 每
個 結 果 的 詞 被
擴 展 。 可 能 的
補 全 是 結 果 列
表 中 匹 配 要 補
全 的 詞 的 那 一
些 。
-C command
command 將
在 一 個 子 shell 環 境
中 執 行 , 它 的
結 果 用 作 可 能
的 補 全 。
-F function
shell 函 數
function 將 在 當 前 shell
環 境 中 執 行 。
當 它 結 束 時 ,
可 能 的 補 全 可
以 從 數 組 元 素
COMPREPLY 中 得 到
。
-X filterpat
filterpat 是
一 個 模 式 , 用
於 文 件 名 擴 展
。 所 有 前 面 的
選 項 和 參 數 產
生 的 可 能 的 補
全 都 要 經 過 這
一 步 處 理 , 每
一 個 匹 配 filterpat
的 補 全 都 被 從
列 表 中 刪 除 。
爲 filterpat 加 上 前
導 ! 使 模 式 意
義 相 反 ; 這 種
情 況 下 , 所 有
不 匹 配 filterpat 的
模 式 被 刪 除 。
-P prefix
在 所 有 其 他 選
項 都 處 理 過 之
後 , prefix 被 加 到
每 個 可 能 的 補
全 前 面 。
-S suffix 在 所 有 其
他 選 項 都 處 理
過 之 後 , suffix 被
加 到 每 個 可 能
的 補 全 後 面 。
返 回 值 爲 真 ,
除 非 給 出 了 非
法 的 選 項 , 給
出 除 -p 和 -r 之
外 的 某 個 選 項
時 沒 有 給 出 name
參 數 , 試 圖 刪
除 一 條 name 的 補
全 規 則 但 是 規
則 不 存 在 , 或
者 添 加 補 全 規
則 時 出 錯 。
continue [n]
復 位 到 外 層 for,
while, until, 或 select 循
環 的 下 一 次 開
始 。 如 果 指 定
了 n, 復 位 到
向 外 第 n 層 循
環 的 開 始 。 n
必 須 ≥ 1。 如 果 n
比 外 部 循 環 的
層 數 要 多 , 將
復 位 到 最 外 層
的 循 環
(’’top-level’’ loop, 頂
層 循 環 )。 返 回
值 是 0, 除 非 執
行 continue 時 , shell 不
是 在 循 環 之 中
。
declare [-afFirtx] [-p]
[name[=value]]
typeset [-afFirtx] [-p]
[name[=value]] 聲 明 變
量 且 /或 設 置 它
們 的 屬 性 。 如
果 沒 有 給 出 name
則 顯 示 變 量 的
值 。 選 項 -p 將
顯 示 每 個 名 稱
name 的 屬 性 和 值
。 當 使 用 -p 時
, 其 他 選 項 被
忽 略 。 選 項 -F
禁 止 顯 示 函 數
定 義 ; 只 有 函
數 名 和 屬 性 會
被 顯 示 。 -F 選
項 暗 含 -f. 下 列
選 項 可 用 來 限
制 只 輸 出 具 有
指 定 屬 性 的 變
量 , 或 者 爲 變
量 設 置 屬 性 :
|
-a 每 個 |
name 都 是 數 組 變
量 (參 見 上 面 的
Arrays 段 落 )。 |
|
-f 只 使 用 |
|
函 數 名
。
|
-i 變 量 被 當 作
一 個 整 數 ; 當
變 量 被 賦 值 時
將 進 行 算 術 運
算
(參 見 算 |
術 求
值 (ARITHMETIC EVALUATION) 章
節 )。
|
-r 使 得 |
|
name 只 讀
。 這 些 名 稱 不
能 再 被 後 續 的
賦 值 語 句 賦 值
或 取 消 |
定 義 。
|
-t 設 置
每 個 |
|
name 的
trace(跟 蹤 ) 屬 性 。
被 跟 蹤 的 函 數
繼 承 了 調 |
用 者 shell
的 DEBUG 陷 阱 。 trace
屬 性 對 變 量 沒
有 特 殊 意 義 。
|
-x 標 記 |
|
name 爲 可
以 通 過 環 境 導
出 給 後 續 命 令
。 |
|
使 用
’+’ 代 替 ’-’ 將
關 閉 屬 性 , 特
殊 情 況 是 +a 不
能 用 於 銷 燬 一
個 數 組 變 量 。
當 用 於 函 數 中
時 , 它 使 得 每
個 name 成 爲 局 部
的 , 就 像 使 用
了 local 命 令 。 返
回 值 是 0, 除 非
遇 到 了 非 法 的
選 項 , 試 圖 使
用 ’’-f foo=bar’’ 定
義 函 數 , 試 圖
向 只 讀 變 量 賦
值 , 試 圖 向 數
組 變 量 賦 值 但
沒 有 使 用 複 合
的 賦 值 語 法 (參
見 上 面 的 Arrays 段
落 ), name 之 一 不
是 有 效 的 shell 變 量
名 , 試 圖 將 數
組 變 量 的 數 組
狀 態 關 閉 , 或
者 是 試 圖 使 用
-f 顯 示 一 個 不
存 在 的 函 數 。
dirs [-clpv]
[+n] [-n] 沒 有
選 項 時 顯 示 當
前 保 存 的 目 錄
。 默 認 輸 出 爲
一 行 , 目 錄 名
用 空 格 分 開 。
可 以 使 用 pushd 命
令 將 目 錄 添 加
到 列 表 , popd 命
令 將 列 表 中 的
條 目 刪 除 。
|
+n 顯 示 |
|
dirs 在 不 帶 選 項
執 行 時 顯 示 的
列 表 的 第 n 個
條 目 , 從 0 |
開 始 自
左 算 起 。
|
-n 顯
示 |
|
dirs 在 不
帶 選 項 執 行 時
顯 示 的 列 表 的
第 n 個 條 目 ,
從 0 |
開 始 自
右 算 起 。
|
-c 刪 除
所 有 條 目 , 清
空 目 錄 棧 。 |
|
-l 產 生 長 列 表
; 默 認 列 表 格
式 使 用 波 浪 線
來 表 示 個 人 目
錄 。 |
|
-p 輸 出 目 錄 棧
, 一 行 一 個 。 |
|
-v 輸 出 目 錄 棧
, 一 行 一 個 ,
每 個 條 目 前 面
加 上 它 在 棧 中
的 位 置 索 引 。
返 回 值 是 |
0, 除 非
給 出 了 非 法 的
參 數 , 或 者 n
索 引 超 出 了 目
錄 棧 的 範 圍 。
disown [-ar]
[-h] [jobspec ...] 沒 有 選
項 時 , 每 個 jobspec
被 從 正 在 運 行
的 作 業 表 中 刪
除 。 如 果 給 出
了 - 選 項 , 每
個 jobspec 並 不 從 表
中 刪 除 , 而 是
被 標 記 , 使 得
在 shell 接 到
SIGHUP 信 號 時
, 不 會 向 作 業
發 出 SIGHUP 信
號 。 如 果 沒 有
給 出 jobspec, 也 沒
有 給 出 -a 或 者
-r 選 項 , 將 使
用 當 前 作 業 (current
job)。 如 果 沒 有
給 出 jobspec, 選 項
-a 意 味 着 刪 除
或 標 記 所 有 作
業 ; 選 項 -r 不
帶 jobspec 參 數 時 限
制 操 作 只 對 正
在 運 行 的 作 業
進 行 。 返 回 值
是 0, 除 非 jobspec 不
指 定 有 效 的 作
業 。
echo [-neE] [arg ...] 輸 出
arg, 以 空 格 分
開 , 最 後 加 一
個 新 行 符 。 返
回 值 總 是 0。 如
果 指 定 了 -n,
將 不 在 尾 部 添
加 新 行 符 。 如
果 給 出 了 -e 選
項 , 將 允 許 解
釋 下 列 反 斜 槓
轉 義 的 字 符 。
-E 選 項 禁 止 這
些 轉 義 字 符 的
解 釋 , 即 使 在
默 認 解 釋 它 們
的 系 統 中 也 是
如 此 。 shell 選 項
xpg_echo 可 以 用 來 在
運 行 時 判 斷 echo
是 否 默 認 展 開
這 些 轉 義 字 符
。 echo 不 將 -- 作
爲 選 項 的 結 束
。 echo 解 釋 下 列
轉 義 序 列 :
|
\a |
|
alert (bell) 響 鈴 |
|
|
\b |
|
backspace 回 退 |
|
|
\c |
|
suppress trailing newline 刪 除 尾
部 新 行 符 |
|
|
\e |
|
an escape character 字 符 Esc |
|
|
\f |
|
form feed 進 紙 |
|
|
\n |
|
new line 新 行 符 |
|
|
\r |
|
carriage return 回 車 |
|
|
\t |
|
horizontal tab 水 平 跳 格 |
|
|
\v |
|
vertical tab 豎 直 跳 格 |
|
|
\\ |
|
backslash 反 斜 槓
一 個 八
比 特 字 符 , 它
的 值 是 八 進 制
值 nnn (零 到 三 個
八 進 制 數 字 )。
一 個 八
比 特 字 符 , 它
的 值 是 八 進 制
值 nnn (一 到 三 個
八 進 制 數 字 )。
一 個 八
比 特 字 符 , 它
的 值 是 十 六 進
制 值 HH (一 到 兩
個 十 六 進 制 數
字 )。
enable [-adnps]
[-f filename] [name ...] 允
許 或 禁 止 shell 內 建
命 令 。 禁 止 一
個 內 建 命 令 使
得 磁 盤 上 的 與
內 建 命 令 同 名
的 文 件 得 以 運
行 , 不 必 使 用
它 的 全 路 徑 ,
即 使 shell 一 般 在 搜
索 磁 盤 上 的 命
令 之 前 搜 索 內
建 命 令 。 如 果
使 用 了 -n 選 項
, 每 個 name 都 被
禁 止 ; 否 則 ,
name 被 允 許 。 例
如 , 要 使 用
PATH 中 搜 索
到 的 test 命 令 而
不 是 shell 內 建 的 那
一 個 , 可 以 運
行 ’’enable -n test’’.
選 項 -f 意 味 着
從 共 享 庫 filename 中
加 載 新 的 內 建
命 令 name, 如 果
系 統 支 持 動 態
加 載 的 話 。 選
項 -d 將 刪 除 曾
經 用 -f 加 載 的
內 建 命 令 。 如
果 沒 有 給 出 name
參 數 , 或 者 給
出 了 -p 選 項 ,
將 顯 示 shell 內 建 命
令 的 列 表 。 如
果 沒 有 其 他 選
項 參 數 , 這 個
列 表 只 包 含 所
有 被 允 許 的 shell 內
建 命 令 ; 如 果
給 出 了 -n, 將
只 顯 示 被 禁 止
的 內 建 命 令 ;
如 果 給 出 了
-a, 顯 示 的 列
表 中 包 含 所 有
內 建 命 令 , 還
有 命 令 是 否 被
允 許 的 指 示 ;
如 果 給 出 了
-s, 輸 出 被 限
制 爲 POSIX special 內 建
命 令 。 返 回 值
是 0, 除 非 name 不
是 shell 內 建 命 令 ,
或 者 從 共 享 庫
中 加 載 新 的 內
建 命 令 時 出 錯
。
eval [arg ...]
arg 被 讀
取 並 連 結 爲 單
一 的 命 令 。 這
個 命 令 然 後 被 shell
讀 取 並 執 行 ,
它 的 退 出 狀 態
被 作 爲 eval 的 值
返 回 。 如 果 沒
有 args, 或 僅 僅
包 含 空 參 數 ,
eval 返 回 0。
exec [-cl]
[-a name] [command [arguments]]
如 果 指 定 了
command, 它 將 替 換
shell。 不 會 產 生 新
的 進 程 。 arguments
成 爲 command 的 參 數
。 如 果 給 出 了
-l 選 項 , shell 將 在
傳 遞 給 command 的 第
0 個 參 數 前 面 加
上 一 個 連 字 符
(dash,’-’)。 這 樣 做
和 login(1) 相 同 。 選
項 -c 使 得 命 令
command 在 一 個 空 環
境 中 執 行 。 如
果 給 出 了 -a, shell
會 將 name 作 爲 第 0
個 參 數 傳 遞 給
要 執 行 的 命 令
。 如 果 由 於 某
種 原 因 as the zeroth argument to the
executed command. If command 不 能
被 執 行 , 非 交
互 的 shell 將 退 出 ,
除 非 shell 選 項 execfail
被 設 置 爲 允 許
, 這 種 情 況 下
它 返 回 失 敗 。
如 果 命 令 不 能
執 行 , 交 互 的 shell
返 回 失 敗 。 如
果 沒 有 指 定 command
任 何 重 定 向 對
當 前 shell 發 生 作 用
, 返 回 值 是 0。
如 果 發 生 重 定
向 錯 誤 , 返 回
狀 態 是 1。
exit [n] 使 得 shell 以
狀 態 值 n 退 出
。 如 果 忽 略 了
n, 退 出 狀 態
是 最 後 執 行 的
命 令 的 退 出 狀
態 。 在 shell 終 止 前
, 對 EXIT 的
陷 阱 將 被 執 行
。
export [-fn] [name[=word]] ...
export -p 給 出 的 名 稱
names 被 標 記 爲 自
動 地 導 出 到 後
續 執 行 的 命 令
的 環 境 中 。 如
果 給 出 了 -f 選
項 , 名 稱 names 指
的 是 函 數 。 如
果 沒 有 給 出
names, 或 者 如 果
給 出 了 -p 選 項
, 將 打 印 在 這
個 shell 中 被 導 出 的
所 有 名 字 的 列
表 。 選 項 -n 使
得 以 此 爲 名 的
變 量 的 導 出 屬
性 被 刪 除 。 export
返 回 0, 除 非 遇
到 了 非 法 的 選
項 , name 之 一 不
是 有 效 的 shell 變 量
名 , 或 者 給 出
了 -f 選 項 , 而
name 不 是 一 個 函
數 。
fc [-e ename] [-nlr] [first]
[last]
fc -s [pat=rep] [cmd] 命
令 修 復 。 第 一
種 形 式 中 , 歷
史 列 表 中 從 first
到 last 範 圍 內 的
命 令 都 被 選 取
。 First 和 last 可 以
指 定 爲 字 符 串
(可 以 定 位 最 後
一 個 以 此 字 符
串 開 始 的 命 令 )
或 者 數 字 (歷 史
列 表 中 的 索 引
, 負 數 被 當 作
相 對 當 前 命 令
號 的 偏 移 )。 如
果 沒 有 指 定
last, 它 在 列 舉
時 被 設 爲 當 前
命 令 (因 此 ’’fc -l
-10’’ 將 輸 出 最
後 10 條 命 令 ), 其
他 情 況 下 被 設
爲 first。 如 果 沒
有 指 定 first, 它
在 編 輯 時 被 設
爲 前 一 個 命 令
, 列 舉 是 設 爲
-16。 選 項 -n 使 得
列 舉 時 不 顯 示
命 令 號 碼 。 選
項 -r 將 命 令 順
序 進 行 掉 換 。
如 果 給 出 了 -l
選 項 , 命 令 將
列 舉 在 標 準 輸
出 上 。 否 則 ,
將 啓 動 ename 給 出
的 編 輯 器 , 編
輯 包 含 這 些 命
令 的 文 件 。 如
果 沒 有 給 出
ename, 將 使 用 變
量 FCEDIT 的 值
, 如 果 FCEDIT
沒 有 定 義 就 使
用 EDITOR 的 值
。 如 果 仍 然 沒
有 定 義 , 將 使
用 vi。 編 輯 結
束 後 , 被 編 輯
的 命 令 將 回 顯
並 執 行 。 第 二
種 形 式 中 , command
在 每 個 pat 的 實
例 被 rep 替 換 後
都 被 重 新 執 行
。 使 用 這 種 特
性 時 可 以 起 一
個 有 用 的 別 名
: ’’r=fc -s’’, 這
樣 輸 入 ’’r cc’’
將 運 行 最 後 的
以 ’’cc’’ 開 頭
的 命 令 , 輸 入
’’r’’ 將 重 新
執 行 上 一 個 命
令 。 如 果 使 用
第 一 種 形 式 ,
返 回 值 是 0, 除
非 遇 到 了 非 法
的 選 項 , 或 first
或 last 指 定 的 歷
史 行 數 超 出 了
範 圍 。 如 果 給
出 了 -e 選 項 ,
返 回 值 是 最 後
執 行 的 命 令 的
返 回 值 , 或 着
是 失 敗 , 如 果
臨 時 文 件 中 的
命 令 執 行 出 錯
。 如 果 使 用 第
二 種 形 式 , 返
回 狀 態 是 重 新
執 行 的 命 令 ,
除 非 cmd 沒 有 指
定 一 個 有 效 的
歷 史 行 , 這 種
情 況 下 fc 返 回
失 敗 。
fg [jobspec] 將 jobspec 恢
復 至 前 臺 , 使
它 成 爲 當 前 作
業 。 如 果 jobspec 不
存 在 , 將 使 用 shell
意 義 上 的 當 前
作 業 current job。 返
回 值 是 被 放 到
前 臺 的 命 令 的
狀 態 , 或 者 是
失 敗 , 如 果 在
禁 用 作 業 控 制
時 運 行 , 或 者
在 啓 用 作 業 控
制 時 運 行 , 但
jobspec 沒 有 指 定 有
效 的 作 業 , 或
jobspec 指 定 了 沒 有
使 用 作 業 控 制
的 作 業 。
getopts optstring name [args]
getopts 由 shell
程 序 用 來 處 理
位 置 參 數 。
optstring 包 含 要 識
別 的 選 項 字 符
; 如 果 某 個 字
符 跟 隨 着 冒 號
, 那 麼 這 個 選
項 需 要 一 個 參
數 , 需 要 用 空
白 和 它 隔 離 開
。 冒 號 和 問 號
字 符 不 能 用 作
選 項 字 符 。 每
次 它 執 行 時 ,
getopts 將 下 一 個 選
項 放 在 shell 變 量
name 中 , 如 果 name
不 存 在 就 初 始
化 它 ; 下 一 個
要 處 理 的 參 數
的 索 引 放 在 變
量 OPTIND 中 。
每 次 shell 或 shell 腳 本
被 執 行 的 時 候
OPTIND 被 初 始
化 爲 1。 當 某 個
選 項 需 要 參 數
時 , getopts 將 那 個
參 數 放 到 變 量
OPTARG 中 。 shell
不 會 自 動 重 置
OPTIND; 在 相
同 的 shell 中 , 如 果
要 使 用 新 的 參
數 集 合 而 需 要
多 次 調 用 getopts 時
, 必 須 手 動 重
置 它 。 當 遇 到
選 項 結 束 的 時
候 , getopts 以 大 於
0 的 值 退 出 。 OPTIND
被 設 置 爲 第 一
個 非 選 項 的 參
數 的 索 引 , name
被 設 置 爲 ?。
getopts
通 常 解 釋 位 置
參 數 , 但 是 如
果 args 中 給 出 了
更 多 參 數 , getopts
將 解 釋 它 們 。
getopts
能 以 兩 種 方 式
報 告 錯 誤 。 如
果 optstring 的 第 一
個 字 符 是 冒 號
, 將 使 用 silent 安
靜 的 錯 誤 報 告
。 通 常 的 操 作
中 , 遇 到 非 法
選 項 或 缺 少 選
項 的 參 數 時 將
打 印 出 診 斷 信
息 。 如 果 變 量
OPTERR 被 設 置
爲 0, 不 會 顯 示
錯 誤 消 息 , 即
使 optstring 的 第 一
個 字 符 不 是 冒
號 。 如 果 發 現
了 一 個 非 法 的
選 項 , getopts 向
name 中 置 入 ?, 並
且 如 果 不 是 安
靜 模 式 的 話 ,
打 印 錯 誤 消 息
並 取 消 OPTARG
的 定 義 。 如 果
getopts 是 安 靜 模 式
, 找 到 的 選 項
字 符 將 置 入
OPTARG, 不 會
打 印 診 斷 消 息
。 如 果 沒 有 找
到 需 要 的 參 數
, 並 且 getopts 不 是
安 靜 模 式 , 將
向 name 置 入 一 個
問 號 (?), 取 消
OPTARG 的 定 義
, 打 印 出 診 斷
消 息 。 如 果 getopts
是 安 靜 模 式 ,
那 麼 將 向 name 置
入 一 個 冒 號 (:)
並 且 OPTARG 將
設 置 爲 找 到 的
選 項 字 符 。
getopts
返 回 真 , 如 果
找 到 了 指 定 的
/未 被 指 定 的 選
項 。 它 返 回 假
, 如 果 遇 到 了
選 項 結 束 或 者
發 生 了 錯 誤 。
hash [-lr]
[-p filename] [-dt] [name]
對 於 每 個 name, 通
過 搜 索 $PATH 中 的
目 錄 , 找 到 命
令 的 全 路 徑 名
並 記 錄 它 。 如
果 給 出 了 -p 選
項 , 不 會 進 行
路 徑 搜 索 , 直
接 將 filename 作 爲 命
令 的 全 路 徑 名
。 選 項 -r 使 得 shell
忘 記 所 有 已 記
錄 的 位 置 。 選
項 -d 使 得 shell 忘 記
已 記 錄 的 name 的
位 置 。 如 果 給
出 了 -t 選 項 ,
每 個 name 對 應 的
全 路 徑 名 被 打
印 出 來 。 如 果
給 出 多 個 name 作
爲 -t 的 參 數 ,
name 將 在 已 記 錄
的 全 路 徑 名 之
前 被 打 印 出 來
。 選 項 -l 使 得
輸 出 以 一 種 可
以 重 用 爲 輸 入
的 格 式 顯 示 。
如 果 沒 有 給 出
參 數 , 或 者 只
給 出 了 -l 選 項
, 已 記 錄 的 命
令 的 信 息 將 被
打 印 出 來 。 返
回 真 , 除 非 name
沒 有 找 到 或 給
出 了 非 法 的 選
項 。
help [-s] [pattern] 顯 示
關 於 內 建 命 令
的 有 用 的 信 息
。 如 果 指 定 了
pattern (模 式 ), help
給 出 關 於 所 有
匹 配 pattern 的 命 令
的 詳 細 幫 助 ;
否 則 所 有 內 建
命 令 的 幫 助 和 shell
控 制 結 構 將 被
打 印 出 來 。 選
項 -s 限 制 信 息
顯 示 爲 簡 短 的
用 法 概 要 。 返
回 0, 除 非 沒 有
匹 配 pattern 的 命 令
。
history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...] 不 帶
選 項 的 話 , 顯
示 帶 行 號 的 命
令 歷 史 列 表 。
列 出 的 行 中 含
有 * 的 已 經 被
修 改 過 。 參 數
n 使 得 只 顯 示
最 後 n 行 。 如
果 給 出 了 filename,
它 被 用 做 歷 史
文 件 名 ; 沒 有
的 話 , 將 使 用
HISTFILE 的 值 作
爲 歷 史 文 件 名
。 選 項 如 果 給
出 , 則 具 有 下
列 意 義 :
|
-c 清 空 歷 史 列
表 , 刪 除 所 有
條 目 。 |
|
-d offset
刪 除 offset 位 置 的
歷 史 條 目 。
|
-a 將 |
|
’’新 ’’ 的 歷
史 條 目 (自 當 前
bash 會 話 開 始 輸
入 的 歷 史 命 令 ) |
追 加 到
歷 史 文 件 中 。
|
-n 將 尚
未 從 歷 史 文 件
中 讀 取 的 歷 史
條 目 讀 入 當 前
歷 史 列 表 。 這
些 行 是 當 前 |
bash 會 話
開 始 之 後 , 才
追 加 到 歷 史 文
件 中 的 行 。
|
-r 讀 取
歷 史 文 件 的 內
容 , 使 用 它 們
作 爲 當 前 歷 史
。 |
|
-w 將 當 前 歷 史
列 表 寫 入 歷 史
文 件 , 覆 蓋 歷
史 文 件 的 原 有
內 容 。 |
|
-p 對 後 續 的 |
args 進 行
歷 史 替 換 , 在
標 準 輸 出 上 顯
示 結 果 。 不 會
將 結 果 存 入 歷
史 列 表 。 每 個
args 都 必 須 被 引
用 , 來 禁 止 普
通 的 命 令 擴 展
。
|
-s 將 |
|
args 保 存
到 歷 史 列 表 中
, 作 爲 單 獨 的
條 目 。 歷 史 列
表 中 的 最 |
後 一 個
命 令 在 添 加 args
之 前 被 刪 除 。
返 回 0, 除 非 遇
到 了 非 法 的 選
項 , 讀 /寫 歷 史
文 件 發 生 錯 誤
, 在 -d 的 參 數
中 給 出 了 無 效
的 offset, 或 者 對
-p 的 後 續 參 數
進 行 歷 史 擴 展
失 敗 。
jobs [-lnprs] [
jobspec ... ]
jobs -x command [ args ... ] 第
一 種 形 式 列 出
正 在 運 行 的 作
業 。 選 項 具 有
下 列 意 義 :
|
-l 普 通 信 息 之
外 , 列 出 進 程 |
|
ID。 |
|
|
-p 只 列 出 作 業
的 進 程 組 |
|
|
|
leader 的 進
程 ID。
|
-n 只 顯
示 從 上 次 用 戶
得 知 它 們 的 狀
態 之 後 , 狀 態
發 生 改 變 的 作
業 的 信 息 。 |
|
-r 限 制 只 輸 出
正 在 運 行 的 作
業 。 |
|
-s 限 制 只 輸 出
停 止 的 作 業 。
如 果 給 出 了 |
jobspec 輸
出 被 限 制 爲 僅
此 作 業 的 信 息
。 返 回 0, 除 非
遇 到 了 非 法 的
選 項 或 給 出 了
非 法 的 jobspec。 如
果 給 出 了 -x 選
項 , 作 業 jobs 將
command 或 args 中 的
任 何 jobspec 替 換 爲
相 應 的 進 程 組
ID, 執 行 command, 傳
遞 參 數 args 給 它
並 返 回 它 的 退
出 狀 態 。
kill [-s
sigspec | -n signum |
-sigspec] [pid | jobspec] ...
kill -l [sigspec | exit_status] 向
以 pid 或 jobspec 爲
名 的 進 程 發 送
名 爲 sigspec 或 signum
的 信 號 。 sigspec 可
以 是 一 個 信 號
名 稱 , 類 似
SIGKILL 或 信 號
編 號 ; signum 是 一
個 信 號 編 號 。
如 果 sigspec 是 一 個
信 號 名 稱 , 那
麼 可 以 有 , 也
可 以 沒 有
SIG 前 綴 。
如 果 沒 有 給 出
sigspec, 那 麼 假 設
是 SIGTERM。 參
數 -l 將 列 出 所
有 信 號 的 名 稱
。 如 果 給 出 -l
時 還 有 任 何 參
數 , 將 列 出 參
數 對 應 的 信 號
名 稱 , 返 回 狀
態 0。 -l 的 exit_status
參 數 是 一 個 數
字 , 指 定 了 一
個 信 號 編 號 或
被 信 號 終 止 的
進 程 的 退 出 狀
態 值 。 kill 返 回
真 , 如 果 至 少
成 功 發 送 了 一
個 信 號 , 或 者
返 回 假 , 如 果
發 生 了 錯 誤 或
遇 到 了 非 法 的
選 項 。
let arg [arg ...] 每 個
arg 都 是 要 求 值
的 算 術 表 達 式
(參 見 算 術 求
值 (ARITHMETIC EVALUATION) 章
節 )。 如 果 最 後
一 個 參 數 arg 求
值 結 果 是 0, let
返 回 1; 否 則 返
回 0。
local [option] [name[=value] ...]
對 每 個 參 數 將
創 建 一 個 名 爲
name 的 局 部 變 量
並 賦 予 值 value。
option 可 以 是 任 何
declare 接 受 的 值 。
當 local 用 於 函 數
內 部 時 , 它 使
得 變 量 name 作 用
域 侷 限 於 函 數
和 它 的 子 進 程
。 沒 有 操 作 數
時 , local 將 局 部
變 量 的 列 表 寫
到 標 準 輸 出 。
不 在 函 數 內 部
使 用 local 會 導 致
出 錯 。 返 回 0,
除 非 在 函 數 之
外 使 用 了 local,
給 出 了 非 法 的
name, 或 者 name 是
一 個 只 讀 的 變
量 。
popd [-n]
[+n] [-n] 從 目 錄 棧
中 刪 除 條 目 。
沒 有 參 數 的 話
, 從 棧 中 刪 除
頂 層 目 錄 , 執
行 cd 切 換 到 新
的 頂 層 目 錄 。
如 果 給 出 了 參
數 , 有 下 列 的
含 義 :
|
+n 刪 除 |
|
dirs 給 出 的 列 表
中 從 左 數 第 n
個 條 目 (從 0 算 起
)。 例 |
如 :
’’popd +0’’ 刪 除
第 一 個 目 錄 ,
’’popd +1’’ 第 二
個 。
|
-n 刪
除 |
|
dirs 給 出
的 列 表 中 從 右
數 第 n 個 條 目
(從 0 算 起 )。 例 |
如 :
’’popd -0’’ 刪 除
最 後 一 個 目 錄
, ’’popd -1’’ 刪
除 倒 數 第 二 個
。
|
-n 阻 止
從 棧 中 刪 除 目
錄 之 後 改 變 目
錄 , 這 時 只 對
棧 進 行 操 作 。
如 果 命 令 |
popd 成 功
, 還 要 執 行 一
個 dirs, 返 回 0。
popd 返 回 假 , 如
果 遇 到 了 非 法
的 選 項 , 目 錄
棧 爲 空 , 指 定
了 目 錄 棧 中 不
存 在 的 條 目 ,
或 者 改 變 目 錄
失 敗 。
printf format
[arguments] 在 format 控 制
下 將 格 式 化 的
arguments 寫 到 標 準
輸 出 。 format 是 一
個 字 符 串 , 包
含 三 種 類 型 的
對 象 : 普 通 字
符 , 被 簡 單 地
複 製 到 標 準 輸
出 , 轉 義 字 符
, 被 轉 換 並 複
製 到 標 準 輸 出
, 格 式 說 明 ,
每 一 個 都 使 得
相 鄰 的 下 一 個
argument 被 打 印 出 來
。 在 標 準 的
printf(1) 格 式 之 外
, %b 使 得 printf 展
開 相 應 arguments 中
的 反 斜 槓 轉 義
序 列 , %q 使 得
printf 將 相 應 的
argument 以 一 種 可 以
重 用 爲 shell 輸 入 的
格 式 輸 出 。
format
在 需 要 時 被 重
用 , 以 處 理 所
有 的 arguments。 如 果
format 需 要 比 所 提
供 的 更 多 的
arguments, 多 出 的 格
式 說 明 視 爲 已
經 提 供 了 相 應
的 0 值 或 空 字 符
串 。 成 功 的 話
返 回 值 是 0, 失
敗 則 是 非 0 值 。
pushd [-n]
[dir]
pushd [-n] [+n] [-n] 將
目 錄 推 入 目 錄
棧 , 或 者 輪 換
棧 中 的 內 容 ,
使 棧 的 頂 部 成
爲 當 前 工 作 目
錄 。 沒 有 參 數
時 , 交 換 頂 部
兩 個 目 錄 , 返
回 0, 除 非 目 錄
棧 爲 空 。 如 果
給 出 了 參 數 ,
它 們 有 如 下 含
義 :
|
+n 輪 換 棧 中
內 容 , 使 得 |
|
dirs 給 出 的 列 表
中 從 左 數 第 n
個 目 錄 (從 |
0 數 起 ) 成
爲 目 錄 棧 的 頂
部 。
|
-n 輪
換 棧 中 內 容 ,
使 得 |
|
dirs 給 出
的 列 表 中 從 右
數 第 n 個 目 錄
(從 |
0 數 起 ) 成
爲 目 錄 棧 的 頂
部 。
|
-n 阻 止
向 棧 中 添 加 目
錄 之 後 改 變 目
錄 , 這 時 只 對
棧 進 行 操 作 。 |
|
dir 添 加 |
dir 到 棧
頂 , 使 得 它 成
爲 新 的 當 前 工
作 目 錄 。 如 果
命 令 pushd 成 功 ,
還 要 執 行 一 個
dirs。 如 果 使 用
第 一 種 形 式 ,
pushd 返 回 0, 除 非
cd 切 換 到 目 錄 dir
失 敗 。 使 用 第
二 中 形 式 時 ,
pushd 返 回 0, 除 非
目 錄 棧 爲 空 ,
指 定 了 目 錄 棧
中 不 存 在 的 元
素 , 或 者 切 換
到 指 定 的 新 的
當 前 目 錄 失 敗
。
pwd [-LP]
打 印 當 前 工 作
目 錄 的 絕 對 路
徑 名 。 如 果 給
出 了 -P 選 項 ,
或 者 設 置 了 內
建 命 令 set 的 -o
physical 選 項 , 打 印
出 的 路 徑 名 中
不 會 包 含 符 號
鏈 接 。 如 果 使
用 了 -L 選 項 ,
打 印 出 的 路 徑
中 可 能 包 含 符
號 鏈 接 。 返 回
0, 除 非 在 讀 取
當 前 目 錄 名 時
出 錯 或 給 出 了
非 法 的 選 項 。
read [-ers] [-u fd] [-t
timeout] [-a aname] [-p
prompt] [-n nchars] [-d
delim] [name ...] 從 標 準
輸 入 讀 入 一 行
, 或 從 -u 選 項
的 參 數 中 給 出
的 文 件 描 述 符
fd 中 讀 取 , 第
一 個 詞 被 賦 予
第 一 個 name, 第 二
個 詞 被 賦 予 第
二 個 name, 以 此 類
推 , 多 餘 的 詞
和 其 間 的 分 隔
符 被 賦 予 最 後
一 個 name. 如 果 從
輸 入 流 讀 入 的
詞 數 比 名 稱 數
少 , 剩 餘 的 名
稱 被 賦 予 空 值
。 IFS 中 的
字 符 被 用 來 將
行 拆 分 成 詞 。
反 斜 槓 字 符 (\)
被 用 於 刪 除 讀
取 的 下 一 字 符
的 特 殊 含 義 ,
以 及 續 行 。 如
果 給 出 了 選 項
, 將 包 含 下 列
含 義 :
-a aname 詞
被 賦 以 數 組 變
量 aname 的 連 續 的
下 標 , 從 0 開 始
。 在 賦 新 值 之
前 , aname 被 取 消
定 義 。 其 他 name
參 數 被 忽 略 。
-d delim
delim 的 第
一 個 字 符 被 用
於 結 束 輸 入 行
, 而 不 是 新 行
符 。
|
-e 如 果 標 準 輸
入 來 自 終 端 ,
將 使 用 |
|
readline (參 見 上 面
的 |
READLINE
章 節 ) 來 獲 得 輸
入 行 。
-n nchars
read 讀 入
nchars 個 字 符 後 返
回 , 而 不 是 等
待 一 整 行 輸 入
。
-p prompt
讀 取 任 何 輸 入
之 前 , 在 標 準
錯 誤 顯 示 提 示
prompt, 末 尾 沒 有
新 行 符 。 提 示
只 有 在 輸 入 來
自 終 端 時 纔 會
顯 示 。
|
-r 反 斜 槓 不 作
爲 轉 義 字 符 。
反 斜 槓 被 認 爲
行 的 一 部 分 。
特 殊 地 , 一 對
反 斜 槓 |
-新 行 符
不 作 爲 續 行 。
|
-s 安 靜
模 式 。 如 果 輸
入 來 自 終 端 ,
字 符 將 不 會 回
顯 。 |
|
-t timeout
使 得 read 超 時 並
返 回 失 敗 , 如
果 在 timeout 秒 內 沒
有 讀 入 完 整 的
一 行 輸 入 。 如
果 read 不 是 從 終
端 或 管 道 讀 取
輸 入 , 那 麼 這
個 選 項 無 效 。
|
-u fd 從 文 件 描
述 符 |
|
fd 中 讀 取 輸 入
。 |
|
如 果 沒
有 給 出 names, 讀
取 的 一 行 將 賦
予 變 量
REPLY。 返
回 值 是 0, 除 非
遇 到 了 EOF, readP 超
時 , 或 給 出 了
非 法 的 文 件 描
述 符 作 爲 -u 的 參
數 。
readonly [-apf]
[name ...] 給 出 的
name 將 被 標 記 爲
只 讀 的 ; names 的
值 不 能 被 後 來
的 賦 值 語 句 改
變 。 如 果 給 出
了 -f 選 項 , names
對 應 的 函 數 也
被 標 記 。 選 項
-a 限 制 變 量 只
能 是 數 組 類 型
。 如 果 沒 有 給
出 name 參 數 , 或
者 如 果 給 出 了
-p 選 項 , 將 打
印 所 有 隻 讀 的
名 稱 。 選 項 -p
使 得 輸 出 以 一
種 可 以 被 重 新
用 作 輸 入 的 格
式 顯 示 。 返 回
值 是 0, 除 非 遇
到 了 非 法 的 選
項 , names 之 一 不
是 有 效 的 shell 變 量
名 , 或 選 項 -f
中 給 出 的 name 不
是 一 個 函 數 。
return [n] 使 得 一 個
函 數 以 指 定 值
n 退 出 。 如 果
忽 略 了 n, 返
回 狀 態 是 函 數
體 中 執 行 的 最
後 一 個 命 令 的
退 出 狀 態 。 如
果 在 函 數 外 使
用 , 但 是 是 在
一 個 以 . (source) 命
令 執 行 的 腳 本
內 , 它 使 得 shell 中
止 執 行 腳 本 ,
返 回 n 或 腳 本
中 執 行 的 最 後
一 個 命 令 的 退
出 狀 態 。 如 果
在 函 數 外 使 用
, 並 且 不 是 在
以 . 執 行 的 腳
本 內 , 返 回 狀
態 是 假 。
set [--abefhkmnptuvxBCHP] [-o
option] [arg ...] 不 帶 選
項 時 , shell 變 量 的
名 稱 和 值 將 以
一 種 可 以 重 用
爲 輸 入 的 格 式
顯 示 。 輸 出 根
據 當 前 語 言 環
境 進 行 排 序 。
指 定 了 選 項 的
時 候 , 它 們 設
置 或 取 消 了 shell 的
屬 性 。 處 理 完
選 項 之 後 剩 餘
的 任 何 參 數 都
被 作 爲 位 置 參
數 的 值 被 賦 值
, 分 別 賦 予 $1,
$2, ... $n. 如 果 給
出 了 選 項 , 那
麼 具 有 以 下 含
義 :
|
-a 自 動 將 被 修
改 或 創 建 的 變
量 和 函 數 標 誌
爲 導 出 至 後 續
命 令 的 環 境 中
。 |
|
-b 後 臺 作 業 結
束 時 立 即 報 告
狀 態 , 而 不 是
在 下 次 顯 示 主
提 示 符 前 報 告
。 只 有 在 啓 用
作 業 控 制 時 纔
有 效 。 |
|
-e 立 即 退 出 ,
如 果 |
simple command (簡
單 命 令 , 參 見
上 面 的 SHELL GRAMMAR 語
法 ) 以 非 零 值
退 出 。 shell 不 會 退
出 , 如 果 失 敗
的 命 令 是 until 或
while 循 環 的 一 部
分 , if 語 句 的
一 部 分 , &&
或 ⎪⎪ 序 列 的
一 部 分 , 或 者
命 令 的 返 回 值
是 由 ! 翻 轉 得
到 。 針 對 ERR 的
陷 阱 , 如 果 設
置 的 話 , 將 在 shell
退 出 前 執 行 。
|
-f 禁 止
路 徑 擴 展 。 |
|
-h 在 查 找 並 執
行 命 令 時 , 記
住 它 們 的 位 置
。 這 是 默 認 啓
用 的 。 |
|
-k 所 有 以 賦 值
語 句 形 式 出 現
的 參 數 都 被 加
入 到 命 令 執 行
的 環 境 中 , 不
僅 是 命 令 名 前
面 那 些 。 |
|
-m 監 視 模 式 。
作 業 控 制 被 啓
用 。 在 支 持 這
個 選 項 的 系 統
中 , 它 在 交 互 |
shell 中 是
默 認 啓 用 的 (參
見 上 面 的 JOB CONTROL
作 業 控 制 )。
後 臺 進 程 在 單
獨 的 進 程 組 中
運 行 , 結 束 時
將 打 印 出 包 含
它 們 退 出 狀 態
的 一 行 信 息 。
|
-n 讀 取
命 令 , 但 不 執
行 。 這 可 以 用
在 檢 查 |
|
shell 腳 本 中
的 語 法 錯 |
誤 。 交
互 shell 中 它 被 忽 略
。
-o
option-name
option-name 可
以 是 如 下 之 一
:
allexport 與 -a 相 同 。
braceexpand 與 -B 相 同
。
|
emacs 使 用 |
|
emacs 樣 式 的 命 令
行 編 輯 界 面 。
這 個 選 項 在 交
互 |
shell 中 默
認 啓 用 , 除 非 shell
以 --noediting 選 項 啓
動 。
|
errexit 與 |
|
-e 相 同
。 |
|
|
hashall 與 |
|
-h 相 同 。 |
|
histexpand 與
-H 相 同 。
|
history 允 許 記 錄
命 令 歷 史 , 如
上 述 |
|
HISTORY 中 的 描
述 。 這 個 |
選 項 在
交 互 shell 中 默 認 啓
用 。
ignoreeof 它
的 效 果 是 好 像
已 經 執 行 了 shell 命
令 ’’IGNOREEOF=10’’ 一
樣 (參 見 上 面 的
Shell Variables 變 量 )。
|
keyword 與 |
|
-k 相 同 。 |
|
|
monitor 與 |
|
-m 相 同 。 |
|
noclobber 與
-C 相 同 。
|
noexec 與 |
|
-n 相 同 。 |
|
|
noglob 與 |
|
-f 相 同 。 nolog
當 前 被 忽 略 。 |
|
|
notify 與 |
|
-b 相 同 。 |
|
|
nounset 與 |
|
-u 相 同 。 |
|
|
onecmd 與 |
|
-t 相 同 。 |
|
physical 與
-P 相 同 。
|
posix 如 果 默 認
操 作 與 |
|
POSIX 1003.2 不 同 的 話
, 改 變 bash |
的 行 爲
, 來 滿 足 標 準
(posix mode)。
privileged 與
-p 相 同 。
|
verbose 與 |
-v 相 同 。 |
|
|
vi 使 用 |
vi 樣 式 的 命 令 行
編 輯 界 面 。 |
|
|
xtrace 與 |
-x 相 同 。 |
|
如 果 給
出 了 不 帶 option-name
的 -o 選 項 , 當
前 選 項 的 值 將
被 打 印 出 來 。
如 果 給 出 了 不
帶 option-name 的 +o 選
項 , 將 在 標 準
輸 出 顯 示 一 系
列 可 以 重 建 當
前 選 項 設 定 的
set 命 令 。
|
-p 打 開 |
|
privileged mode (特
權 模 式 )。 在 這
個 模 式 中 , 不
會 處 理 |
$ENV
和 $BASH_ENV 文 件
, shell 函 數 不 會 從
環 境 中 繼 承 ,
環 境 中 如 果 有
變 量 SHELLOPTS,
也 將 被 忽 略 。
如 果 shell 啓 動 時 的
有 效 用 戶 (組 ) ID 與
真 實 用 戶 (組 ) ID 不
同 , 並 且 沒 有
給 出 -p 選 項 ,
將 執 行 這 些 操
作 , 有 效 用 戶 ID
將 設 置 爲 真 實
用 戶 ID。 如 果 啓
動 是 給 出 了 -p
選 項 , 有 效 用
戶 ID 不 會 被 重 置
。 將 這 個 選 項
關 閉 使 得 有 效
用 戶 和 組 ID 被 設
置 爲 真 實 用 戶
和 組 ID。
|
-t 讀 取
並 執 行 一 個 命
令 之 後 退 出 。 |
|
-u 在 進 行 參 數
擴 展 時 , 將 未
定 義 的 變 量 作
爲 錯 誤 。 如 果
試 圖 擴 展 未 定
義 的 變 量 , |
shell 將 輸
出 一 條 錯 誤 消
息 ; 如 果 是 非 交
互 的 shell, shell 將 以
非 零 值 退 出 。
|
-v 在 讀
取 輸 入 的 同 時
打 印 出 來 。 |
|
|
|
-x 擴 展 每 個 簡
單 命 令 之 後 ,
顯 示 |
|
PS4 的 值 ,
接 着 顯 示 命 令
和 它 擴 |
展 後 的
參 數 。
|
-B |
|
shell 執 行 花
括 號 擴 展 (參 見
上 面 的 Brace Expansion)。
這 是 默 認 允 許
的 。
如 果 設
置 的 話 , bash 使
用 重 定 向 操 作
符 >, >&, 和
<> 時 , 不 會 覆
蓋 已 存 在 的 文
件 。 可 以 使 用
重 定 向 操 作 符
>| 代 替 > 來 創
建 輸 出 文 件 ,
從 而 繞 過 這 個
限 制 。
允 許 Enable
! 樣 式 的 歷 史
替 換 。 在 交 互 shell
中 這 個 選 項 是
默 認 啓 用 的 。
如 果 設
置 的 話 , shell 在 執
行 類 似 cd 的 ,
改 變 當 前 工 作
目 錄 的 命 令 時
, 不 會 跟 隨 符
號 連 接 。 它 將
使 用 物 理 的 目
錄 結 構 來 代 替
。 默 認 情 況 下
, bash 在 執 行 改
變 當 前 目 錄 的
命 令 時 跟 隨 路
徑 的 邏 輯 鏈 。
如 果 這
個 選 項 沒 有 參
數 , 將 取 消 位
置 參 數 的 定 義
。 否 則 , 位 置
參 數 將 設 置 爲
arg, 即 使 它 們
以 - 開 始 。
束 , 使
得 所 有 剩 餘 的
arg 被 賦 予 位 置
參 數 。 -x 和 -v
選 項 被 關 閉 。
如 果 沒 有 arg,
位 置 參 數 將 不
會 改 變 。 這 個
選 項 默 認 是 關
閉 的 , 除 非 另
外 說 明 。 使 用 +
而 不 是 - 使 得 這
些 選 項 被 關 閉
。 選 項 都 可 以
作 爲 參 數 , 在 shell
啓 動 時 指 定 。
當 前 的 選 項 集
合 可 以 從 $- 找
到 。 返 回 值 總
是 真 , 除 非 遇
到 了 非 法 的 選
項 。
shift [n]
從 n+1 ... 開 始 的 選
項 被 重 命 名 爲 $1
.... 從 $# 向 下 直
到 $#-n+1 的 選 項
被 取 消 定 義 。
n 必 須 是 非 負
整 數 , 小 於 或
等 於 $#。 如 果
n 是 0, 不 會 改
變 參 數 。 如 果
沒 有 給 出 n,
就 假 定 它 是 1。
如 果 n 比 $# 大
, 位 置 參 數 不
會 改 變 。 返 回
值 大 於 0, 如 果
n 比 $# 大 或 小
於 0; 否 則 返 回
0。
shopt [-pqsu] [-o] [optname ...]
對 於 控 制 可 選
的 shell 行 爲 的 變 量
, 改 變 它 們 的
值 。 沒 有 選 項
或 者 有 -p 選 項
時 , 將 顯 示 所
有 可 設 置 的 選
項 列 表 , 以 及
它 們 是 否 已 經
設 置 的 指 示 。
-p 使 得 輸 出 以
一 種 可 以 被 重
用 爲 輸 入 的 形
式 顯 示 。 其 他
選 項 有 如 下 含
義 :
|
-s 允 許 |
|
(設 置 ) 每 個
optname。 |
|
|
-u 禁 止 |
|
(取 消 ) 每 個
optname。
通 常 的
輸 出 (安 靜 模 式
); 返 回 狀 態 指
示 了 optname 是 否 被
設 置 。 如 果 對
-q 給 出 了 多 個
optname 參 數 , 如 果
所 有 optname 都 被 允
許 , 返 回 值 就
是 0; 否 則 返 回
非 零 值 。
限 制
optname 的 值 爲 內 建
命 令 set 的 -o 選
項 定 義 的 值 。
如 果 使 用 -s 或
-u 時 沒 有 給 出
optname 參 數 , 顯 示
將 分 別 限 於 被
設 置 或 被 取 消
的 選 項 。 除 非
另 外 說 明 , shopt
選 項 默 認 被 禁
止 (取 消 )。 返 回
值 在 列 出 選 項
時 是 0, 如 果 所
有 optname 都 被 允 許
的 話 , 否 則 是
非 零 值 。 當 設
置 或 取 消 選 項
時 , 返 回 值 是
0, 除 非 optname 是 非
法 的 shell 選 項 。
shopt
選 項 的 列 表 是
:
cdable_vars 如 果 設 置 的
話 , 內 建 命 令
cd 的 參 數 如 果
不 是 目 錄 , 就
假 定 是 一 個 變
量 , 它 的 值 是
要 切 換 到 的 目
錄 名 。
|
cdspell 如 果 設 置
的 話 , |
|
cd 命 令 中 目 錄
的 細 微 拼 寫 錯
誤 能 夠 得 以 糾 |
正 。 檢
查 的 錯 誤 包 括
字 符 錯 位 , 缺
字 符 , 重 複 輸
入 同 一 字 符 。
如 果 找 到 了 正
確 的 值 , 將 打
印 正 確 的 文 件
名 , 命 令 將 繼
續 。 這 個 選 項
只 能 在 交 互 shell 中
使 用 。
checkhash 如
果 設 置 的 話 ,
bash 在 執 行 命 令
前 檢 測 散 列 表
中 的 命 令 是 否
存 在 。 如 果 一
個 被 散 列 的 命
令 不 再 存 在 ,
將 進 行 正 常 的
路 徑 搜 索 。
checkwinsize 如 果 設 置
的 話 , bash 在 每
條 命 令 執 行 後
檢 測 窗 口 大 小
, 如 果 需 要 的
話 就 更 新
LINES 和
COLUMNS 的 值 。
|
cmdhist 如 果 設 置
的 話 , |
|
bash 試 着 將 一 個
多 行 命 令 的 所
有 行 放 到 同 一
個 |
歷 史 條
目 中 。 這 樣 使
得 多 行 命 令 可
以 容 易 地 重 新
修 改 。
|
dotglob 如 果
設 置 的 話 , |
|
bash 會 把
以 ’.’ 開 始 的 文
件 名 包 含 在 路
徑 名 |
擴 展 的
結 果 中 。
execfail 如
果 設 置 的 話 ,
非 交 互 的 shell 如 果
不 能 執 行 作 爲
參 數 提 供 給 內
建 命 令 exec 的 文
件 時 將 不 會 退
出 。 交 互 的 shell 在
exec 失 敗 時 不 會
退 出 。
expand_aliases 如 果 設 置
的 話 , 別 名 被
擴 展 , 就 像 上
面 ALIASES 中 講
到 的 一 樣 。 這
個 選 項 在 交 互 shell
中 是 默 認 啓 用
的 。
|
extglob 如 果 設 置
的 話 , 將 允 許
上 面 |
|
Pathname Expansion 中 提 到
的 擴 展 |
模 式 匹
配 特 性 。
histappend 如
果 設 置 的 話 ,
在 shell 退 出 時 , 歷
史 列 表 將 追 加
到 以 HISTFILE 的 值 爲
名 的 文 件 之 後
, 而 不 是 覆 蓋
文 件 。
histreedit 如 果 設 置 的
話 , 並 且 正 在
使 用 readline, 用 戶
可 以 重 新 修 改
失 敗 的 歷 史 替
換 。
histverify 如 果 設 置 的
話 , 並 且 正 在
使 用 readline, 歷 史
替 換 的 結 果 不
會 立 即 傳 給 shell 解
釋 器 。 結 果 行
被 加 載 到 readline 編
輯 緩 衝 區 , 允
許 進 行 進 一 步
的 修 改 。
hostcomplete 如 果 設 置
的 話 , 並 且 正
在 使 用 readline, bash
將 試 着 對 正 在
進 行 補 全 的 包
含 的 詞 進 行 主
機 名 補 全 (參 見
上 面 的 READLINE
中 的 Completing 段 落
)。 這 是 默 認 允
許 的 。
huponexit 如 果 設 置 的
話 , 在 交 互 的
登 錄 shell 退 出 時
bash 將 向 所 有 作
業 發 出 SIGHUP
信 號 。
interactive_comments 如 果 設 置
的 話 , 將 允 許
在 交 互 shell 中 遇 到
以 # 開 頭 的 詞
時 忽 略 這 個 詞
和 一 行 中 所 有
剩 餘 的 字 符 (參
見 上 面 的 COMMENTS
註 釋 )。 這 個
選 項 是 默 認 允
許 的 。
|
lithist 如 果 設 置
的 話 , 並 且 允
許 了 |
|
cmdhist 選 項 , 多
行 的 命 令 在 保
存 |
到 歷 史
中 時 將 包 含 新
行 符 , 而 不 是
在 可 能 的 地 方
使 用 分 號 。
login_shell 如
果 shell 作 爲 登 錄 shell
啓 動 , 將 設 置
這 個 選 項 (參 見
上 面 的 啓 動
(INVOCATION) )。 這 個
值 不 可 修 改 。
mailwarn 如 果 設 置 的
話 , 並 且 bash 正
在 檢 測 上 次 檢
測 以 來 被 存 取
過 的 郵 件 , 將
顯 示 ’’The mail in mailfile
has been read’’(mailfile 中
的 郵 件 已 被 讀
取 )。
no_empty_cmd_completion 如 果 設
置 的 話 , 並 且
正 在 使 用 readline,
試 圖 在 空 行 上
執 行 補 全 時 ,
bash 不 會 搜 索 PATH
來 查 找 可 能 的
補 全 。
nocaseglob 如 果 設 置 的
話 , bash 進 行 路
徑 擴 展 時 使 用
大 小 寫 不 敏 感
方 式 匹 配 文 件
名 (參 見 上 面 的
Pathname Expansion 路 徑 擴 展
)。
nullglob 如 果 設 置 的
話 , bash 將 允 許
不 匹 配 任 何 文
件 的 模 式 擴 展
爲 空 字 符 串 而
不 是 它 們 自 身
(參 見 上 面 的 Pathname
Expansion 路 徑 擴 展 )。
progcomp 如 果 設 置 的
話 , 將 啓 用 可
編 程 補 全 功 能
(參 見 上 面 的
Programmable Completion)。 這 個
選 項 是 默 認 啓
用 的 。
promptvars 如 果 設 置 的
話 , 提 示 字 符
串 要 經 過 上 面
PROMPTING 中 描 述
的 擴 展 , 然 後
還 要 經 過 變 量
和 參 數 擴 展 。
這 個 選 項 是 默
認 啓 用 的 。
restricted_shell
shell 設 置
這 個 選 項 , 如
果 它 是 以 受 限
模 式 啓 用 的 (參
見 下 面 的 受
限 的 shell(RESTRICTED SHELL)
章 節 )。 這 個 值
不 能 修 改 。 在
執 行 啓 動 文 件
時 , 它 不 會 被
重 置 , 使 得 啓
動 文 件 可 以 得
知 shell 是 否 是 受 限
的 。
shift_verbose 如
果 設 置 的 話 ,
內 建 命 令 shift 在
偏 移 量 超 過 位
置 參 數 的 個 數
時 打 印 一 條 錯
誤 消 息 。
sourcepath 如 果 設 置 的
話 , 內 建 命 令
source (.) 使 用
PATH 中 的 值
來 查 找 包 含 作
爲 參 數 給 出 的
文 件 。 這 個 選
項 默 認 是 啓 用
的 。
xpg_echo 如 果 設 置 的
話 , 內 建 命 令
echo 默 認 擴 展 反
斜 槓 轉 義 序 列
。
suspend [-f]
掛 起 shell 的 執 行 ,
直 到 收 到 一 個
SIGCONT 信 號 。
選 項 -f 表 示 如
果 這 是 一 個 登
錄 shell, 那 麼 不 要
提 示 , 直 接 掛
起 。 返 回 值 是
0, 除 非 shell 是 登 錄
shell 並 且 沒 有 指 定
-f, 或 者 沒 有
啓 用 作 業 控 制
。
test expr
[ expr ] 返 回 狀
態 值 0 或 1, 根 據
條 件 表 達 式 expr
的 求 值 而 定 。
每 個 操 作 符 和
操 作 數 都 必 須
是 一 個 單 獨 的
參 數 。 表 達 式
使 用 上 面 條
件 表 達 式 (CONDITIONAL
EXPRESSIONS) 中 的 操 作
構 造 。 表 達 式
可 以 用 下 列 操
作 符 結 合 , 以
優 先 級 的 降 序
列 出 。
|
! expr 值 爲 真 ,
如 果 |
|
expr 爲 假 。 |
|
( expr )
返 回 expr 的 值 。
括 號 可 以 用 來
超 越 操 作 符 的
一 般 優 先 級 。
expr1 -a expr2 值 爲 真
, 如 果 expr1 和
expr2 都 爲 真 。
expr1 -o expr2 值 爲 真
, 如 果 expr1 或
expr2 爲 真 。
test
和 [ 使 用 基 於
參 數 個 數 的 一
系 列 規 則 , 對
條 件 表 達 式 進
行 求 值 。
0 arguments 表 達 式 爲 假
。
1 argument 表 達 式 爲 真
, 當 且 僅 當 參
數 非 空 。
2 arguments 如 果 第 一 個
參 數 是 !, 表
達 式 爲 真 , 當
且 僅 當 第 二 個
參 數 爲 空 。 如
果 第 一 個 參 數
是 上 面 條 件
表 達 式 (CONDITIONAL
EXPRESSIONS) 中 列 出 的
單 目 條 件 運 算
符 之 一 , 表 達
式 爲 真 , 當 且
僅 當 單 目 測 試
爲 真 。 如 果 第
一 個 參 數 不 是
合 法 的 單 目 條
件 運 算 符 , 表
達 式 爲 假 。
3 arguments 如 果 第 二 個
參 數 是 上 面
條 件 表 達 式
(CONDITIONAL EXPRESSIONS) 中 列
出 的 二 進 制 條
件 操 作 符 之 一
, 表 達 式 的 結
果 是 使 用 第 一
和 第 三 個 參 數
作 爲 操 作 數 的
二 進 制 測 試 的
結 果 。 如 果 第
一 個 參 數 是
!, 表 達 式 值
是 使 用 第 二 和
第 三 個 參 數 進
行 雙 參 數 測 試
的 結 果 取 反 。
如 果 第 一 個 參
數 是 (, 第 三
個 參 數 是 ),
結 果 是 對 第 二
個 參 數 進 行 單
參 數 測 試 的 結
果 。 否 則 , 表
達 式 爲 假 。 這
種 情 況 下 -a 和
-o 操 作 符 被 認
爲 二 進 制 操 作
符 。
4 arguments 如 果 第 一 個
參 數 是 !, 結
果 是 由 剩 餘 參
數 組 成 的 三 參
數 表 達 式 結 果
取 反 。 否 則 ,
表 達 式 被 根 據
上 面 列 出 的 優
先 級 規 則 解 釋
並 執 行 。
5 或 更 多 arguments 表 達
式 被 根 據 上 面
列 出 的 優 先 級
規 則 解 釋 並 執
行 。
|
times 對 |
|
shell 以 及 shell 運 行 的
進 程 , 打 印 累
計 的 用 戶 和 系
統 時 間 。 返 回 |
狀 態 是
0。
trap [-lp]
[arg] [sigspec ...] 當 shell 收
到 信 號 sigspec 時 ,
命 令 arg 將 被 讀
取 並 執 行 。 如
果 沒 有 給 出 arg
或 者 給 出 的 是
-, 所 有 指 定 的
信 號 被 設 置 爲
它 們 的 初 始 值
(進 入 shell 時 它 們 的
值 )。 如 果 arg 是
空 字 符 串 , sigspec
指 定 的 信 號 被 shell
和 它 啓 動 的 命
令 忽 略 。 如 果
arg 不 存 在 , 並
且 給 出 了 -p 那
麼 與 每 個 sigspec 相
關 聯 的 陷 阱 命
令 將 被 顯 示 出
來 。 如 果 沒 有
給 出 任 何 參 數
, 或 只 給 出 了
-p, trap 將 打 印 出
與 每 個 信 號 編
號 相 關 的 命 令
列 表 。 每 個 sigspec
可 以 是 <signal.h> 定
義 的 信 號 名 ,
或 是 一 個 信 號
編 號 。 如 果 sigspec
是 EXIT (0), 命
令 arg 將 在 shell 退
出 時 執 行 。 如
果 sigspec 是
DEBUG, 命
令 arg 將 在 每 個
簡 單 命 令 (simple
command, 參 見 上 面
的 SHELL GRAMMAR) 之
後 執 行 。 如 果
sigspec 是
ERR, 命 令
arg 將 在 任 何 命
令 以 非 零 值 退
出 時 執 行 。 如
果 失 敗 的 命 令
是 until 或 while 循
環 的 一 部 分 ,
if 語 句 的 一 部
分 , && 或
⎪⎪ 序 列 的 一
部 分 , 或 者 命
令 的 返 回 值 是
通 過 ! 轉 化 而
來 , ERR 陷
阱 將 不 會 執 行
。 選 項 -l 使 得 shell
打 印 信 號 名 和
對 應 編 號 的 列
表 。 shell 忽 略 的 信
號 不 能 被 捕 捉
或 重 置 。 在 子
進 程 中 , 被 捕
捉 的 信 號 在 進
程 創 建 時 被 重
置 爲 初 始 值 。
返 回 值 爲 假 ,
如 果 sigspec 非 法 ;
否 則 trap 返 回 真
。
type [-aftpP] name [name ...]
沒 有 選 項 時 ,
指 示 每 個 name 將
如 何 被 解 釋 ,
如 果 用 作 一 個
命 令 名 。 如 果
使 用 了 -t 選 項
, type 打 印 一 個
字 符 串 , 內 容
是 如 下 之 一 :
alias, keyword, function,
builtin, 或 file , 如
果 name 分 別 是 一
個 別 名 , shell 保 留
字 , 函 數 , 內
建 命 令 或 磁 盤
文 件 。 如 果 沒
有 找 到 name, 那
麼 不 會 打 印 任
何 東 西 , 返 回
退 出 狀 態 假 。
如 果 使 用 了 -p
選 項 , type 返 回
如 果 name 作 爲 命
令 名 , 將 被 執
行 的 磁 盤 文 件
名 ; 或 者 返 回
空 , 如 果 ’’type -t
name’’ 不 會 返 回
file. 選 項 -P 選 項
強 制 對 每 個 name
搜 索 PATH,
即 使 ’’type -t name’’
不 會 返 回 file. 如
果 命 令 在 散 列
中 , -p 和 -P 將
打 印 散 列 的 值
, 而 不 是
PATH 中 首 先
出 現 的 那 一 個
文 件 。 如 果 使
用 了 -a 選 項 ,
type 打 印 所 有 包
含 可 執 行 的 名
稱 name 的 場 合 。
結 果 包 括 別 名
和 函 數 , 當 且
僅 當 沒 有 同 時
使 用 -p 選 項 。
使 用 -a 時 不 會
查 找 散 列 中 的
命 令 表 。 選 項
-f 阻 止 shell 進 行 查
找 , 就 像 在 內
建 命 令 command 中 一
樣 。 type 返 回 真
, 如 果 找 到 了
任 何 參 數 。 什
麼 都 沒 找 到 則
返 回 假 。
ulimit [-SHacdflmnpstuv [limit]] 在
支 持 它 的 系 統
上 , 對 shell 和 它 啓
動 的 進 程 , 提
供 對 可 用 資 源
的 控 制 。 選 項
-H 和 -S 指 定 爲
所 給 資 源 設 定
的 硬 性 和 柔 性
限 額 。 硬 性 限
額 在 設 置 後 不
能 增 加 ; 柔 性
限 額 可 以 增 加
, 直 到 與 硬 性
限 額 相 等 。 如
果 沒 有 給 出 -H
或 -S 選 項 , 將
同 時 設 置 硬 性
和 柔 性 限 額 。
limit 的 值 可 以 是
一 個 數 字 , 單
位 是 指 定 資 源
的 單 元 值 , 或
者 是 特 殊 值 hard,
soft, 或 unlimited 之 一
, 意 思 分 別 是
當 前 硬 性 限 額
, 當 前 柔 性 限
額 和 沒 有 限 額
。 如 果 忽 略 了
limit, 將 打 印 出
當 前 對 資 源 的
柔 性 限 額 值 ,
除 非 給 出 了 -H
選 項 。 當 指 定
多 於 一 個 資 源
時 , 限 額 名 稱
和 單 位 將 在 值
之 前 打 印 出 來
。 其 他 選 項 按
照 如 下 意 義 解
釋 :
core 文
件 的 最 大 值
shell 創
建 的 文 件 的 最
大 值
|
-l 內 存
中 可 以 鎖 定 的
最 大 值 |
|
|
|
-m 常 駐 內 存 的
最 大 值 |
|
|
|
-n 打 開 的 文 件
描 述 符 最 大 個
數 |
|
(大 多 數 系 統 不
允 許 設 置 這 個
值 ) |
|
-p 管 道 大 小 ,
以 |
|
|
512 字 節 的
塊 爲 單 位 (這 個
值 可 能 不 能 設
置 )
cpu 時
間 總 數 的 最 大
值 , 以 秒 計
|
-u 用 戶
可 以 運 行 的 最
大 進 程 數 |
|
|
-v |
|
shell 可
用 的 虛 擬 內 存
總 量 的 最 大 值
如 果 給 出 了
limit, 它 將 是 指
定 資 源 的 新 限
額 (選 項 -a 只 顯
示 它 們 )。 如 果
沒 有 給 出 選 項
, 則 假 設 有
-f。 值 的 遞 增
間 隔 是 1024 字 節 ,
除 了 -t 單 位 是
秒 , -p 單 位 是 512
字 節 的 塊 個 數
, -n 和 -u 是 不
可 調 節 的 值 。
返 回 0, 除 非 給
出 了 非 法 的 選
項 或 參 數 , 或
者 在 設 置 新 的
限 額 時 發 生 了
錯 誤 。
umask [-p]
[-S] [mode] 用 戶 創
建 文 件 的 掩 碼
被 設 置 爲 mode. 如
果 mode 以 數 字 開
始 , 它 被 解 釋
爲 一 個 八 進 制
數 ; 否 則 被 解
釋 爲 類 似 於 chmod(1)
接 受 的 符 號 形
式 的 模 式 掩 碼
。 如 果 忽 略 了
mode, 將 打 印 當
前 掩 碼 值 。 選
項 -S 使 得 掩 碼
以 符 號 形 式 打
印 ; 默 認 輸 出
是 八 進 制 數 。
如 果 給 出 了 -p
選 項 , 並 且 忽
略 了 mode, 輸 出
將 是 一 種 可 以
重 用 爲 輸 入 的
形 式 。 返 回 值
是 0, 如 果 成 功
改 變 了 模 式 ,
或 者 沒 有 給 出
mode。 其 他 情 況
返 回 假 。
unalias [-a] [name ...] 從 已
定 義 的 別 名 列
表 中 刪 除 name。
如 果 給 出 了 -a
將 刪 除 所 有 別
名 定 義 。 返 回
值 是 真 , 除 非
給 出 的 name 不 是
已 定 義 的 別 名
。
unset [-fv] [name ...] 將 每
個 name 對 應 的 變
量 或 函 數 刪 除
。 如 果 沒 有 給
出 選 項 , 或 者
給 出 了 -v 選 項
, name 僅 包 括 shell
變 量 。 只 讀 的
變 量 不 能 被 取
消 定 義 。 如 果
給 出 了 -f 選 項
, name 僅 包 括 shell
函 數 , 函 數 的
定 義 將 被 刪 除
。 每 個 被 取 消
定 義 的 變 量 或
函 數 都 被 從 後
續 命 令 的 環 境
中 刪 除 。 如 果
RANDOM, SECONDS,
LINENO, HISTCMD, FUNCNAME,
GROUPS, 或 者
DIRSTACK 中 的 任
何 一 個 被 取 消
定 義 , 它 們 將
喪 失 特 殊 的 屬
性 , 即 使 它 們
後 來 被 重 新 定
義 。 退 出 狀 態
是 真 , 除 非 name
不 存 在 或 是 隻
讀 的 。
wait [n] 等 待 指 定
的 進 程 , 返 回
它 的 終 止 狀 態
。 n 可 以 是 進
程 ID 或 一 個 作 業
號 ; 如 果 給 出
的 是 作 業 號 ,
將 等 待 作 業 的
管 道 中 所 有 進
程 。 如 果 沒 有
給 出 n, 將 等
待 所 有 當 前 處
於 激 活 狀 態 的
子 進 程 , 返 回
狀 態 是 0。 如 果
n 指 定 了 不 存
在 的 進 程 或 作
業 , 返 回 狀 態
是 127。 否 則 , 返
回 狀 態 是 所 等
待 的 最 後 一 個
進 程 或 作 業 的
退 出 狀 態 。
如 果 bash
以 rbash 名 稱 啓 動
, 或 者 啓 動 時
使 用 了 -r 選 項
, 那 麼 它 成 爲
受 限 的 shell。 受 限
的 shell 一 般 用 來 建
立 一 個 比 標 準
的 shell 受 到 更 多 控
制 的 環 境 。 它
的 行 爲 與 bash 一
致 , 除 了 下 列
行 爲 是 不 允 許
的 (disallowed) 或 不 會 運
行 的 (not performed)。
|
• 使 用 |
cd 來 改 變 路 徑
;
取 消 SHELL,
PATH, ENV, 或 BASH_ENV 變
量 的 值 ;
中 包 含
/ ;
• 指 定 包 含 / 的
文 件 名 作 爲 傳
遞 給 內 建 命 令
. 的 參 數 ;
槓 (slash) 的
文 件 名 作 爲 -p
選 項 的 參 數 ,
傳 遞 給 hash 內 建
命 令 ;
啓 動 時
從 shell 環 境 中 導 入
(import) 函 數 定 義 ;
• 啓 動 時 解 釋 shell
環 境 中 SHELLOPTS 的
值 ;
• 使 用 >, >|, <>, >&,
&>, 和 >> 等 重 定
向 操 作 符 重 定
向 輸 出 ;
• 使 用
exec 內 建
命 令 來 以 另 一
個 命 令 替 換
shell;
|
• 使 用 |
|
enable 內 建
命 令 的 -f 和 -d
選 項 來 增 加 和
刪 除 內 建 命 令
; |
|
• 使 用 |
|
enable 內 建 命 令
來 允 許 和 禁 止 shell
內 建 命 令 ; |
|
• 指 定 |
|
command 內 建 命 令
的 -p 選 項 ; |
|
• 使 用 |
|
set +r 或 set +o restricted 來
關 閉 受 限 模 式
。 |
這 些 限
制 在 所 有 啓 動
文 件 讀 取 之 後
纔 會 生 效 。 當
一 個 shell 腳 本 作 爲
一 個 命 令 執 行
時 (參 見 上 面 的
命 令 執 行 (COMMAND
EXECUTION) 章 節 ),
rbash 關 閉 爲 執 行
腳 本 而 孵 化 (spawn)
的 shell 的 所 有 限 制
。
Bash
Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell
and
Utilities, IEEE
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)
/bin/bash
bash 可 執
行 文 件
/etc/profile 系
統 範 圍 的 初 始
化 文 件 , 登 錄 shell
會 執 行 它
~/.bash_profile 個 人 初 始
化 文 件 , 登 錄 shell
會 執 行 它
~/.bashrc 個 人 的 每 個
交 互 式 shell 啓 動 時
執 行 的 文 件
~/.bash_logout 個 人 的 登
錄 shell 清 理 文 件 ,
當 一 個 登 錄 shell 退
出 時 會 執 行 它
~/.inputrc 個 人 的 readline
初 始 化 文 件
Brian Fox, Free
Software Foundation
bfox [AT] gnu.org
Chet Ramey,
Case Western Reserve University
chet [AT] ins.Edu
如 果 你
發 現 一 個 bash 中
的 bug, 你 應 當 報
告 它 。 但 是 首
先 , 你 應 當 確
定 它 真 的 是 一
個 bug, 並 且 它 在
你 使 用 的 最 新
版 本 的 bash 中 存
在 。 一 旦 你 認
定 存 在 那 樣 一
個 bug, 使 用 bashbug
命 令 來 提 交 一
個 錯 誤 報 告 。
如 果 你 有 固 定
住 址 , 鼓 勵 你
用 郵 政 的 方 式
提 交 一 份 ! 建
議 和 有 關 bash
“哲 學 ”
(’philosophical’) 的 “錯
誤 報 告 ” 可 以
寄 給 bug-bash [AT] gnu.org 或 者
貼 到 Usenet 新 聞 組
gnu.bash.bug 之 上 。 所
有 錯 誤 報 告 應
當 包 括 :
|
bash 的 版 本 號 |
|
|
硬 件 信 息 和 操
作 系 統 |
|
|
用 來 編 譯 的 編
譯 器 |
|
|
對 bug 行 爲 的 描
述 可 以 激 活 這
個 |
|
bug 的 一 個
短 小 的 腳 本 或
者 什 麼 “祕 訣 ”
(recipe)
bashbug
會 自 動 在 它 提
供 的 錯 誤 報 告
模 板 中 插 入 前
三 項 。 關 於 這
份 手 冊 頁 的 評
論 和 錯 誤 報 告
請 直 接 提 交 到
chet [AT] ins.Edu.
它 太 大
了 , 並 且 有 點
慢 。
bash
和 傳 統 版 本 的
sh 之 間 有 一 些
細 微 的 差 別 ,
大 部 分 是 因 爲
POSIX 規 約 的
要 求 。 別 名 機
制 在 一 些 應 用
中 會 混 淆 。
Shell 內
建 命 令 和 函 數
不 可 終 止 /重 新
開 始 。 組 合 的
命 令 和 使 用 ’a ; b ;
c’ 形 式 的 命 令
序 列 在 進 程 試
圖 暫 停 時 不 能
很 好 處 理 。 當
一 個 進 程 中 止
, shell 會 立 即 執 行
序 列 中 的 下 一
條 命 令 。 也 可
以 將 命 令 的 序
列 放 在 圓 括 號
中 , 來 強 制 啓
動 子 shell, 這 樣 就
可 以 將 它 們 作
爲 一 個 單 元 中
止 了 。 在 $(...)
命 令 替 換 中 的
註 釋 不 會 被 解
釋 , 直 到 執 行
替 換 的 時 候 。
這 將 延 遲 報 錯
, 直 到 命 令 開
始 執 行 之 後 的
一 段 時 間 。 數
組 變 量 還 不 能
導 出 (export)。
袁 乙 鈞
<bbbush [AT] 163.com>
2004.03.05
http://cmpp.linuxforum.net
本 頁 面
中 文 版 由 中 文 man
手 冊 頁 計 劃 提
供 。 中 文 man 手 冊
頁 計 劃 :
https://github.com/man-pages-zh/manpages-zh
| | | | | | | | | | | | | |