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