Provided by: manpages-zh_1.5-1_all bug

NAME

       bash - GNU Bourne-Again SHell (GNU 命令解釋程式 「Bourne二世」)

z(SYNOPSIS)
       bash [options] [file]

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

yz(DESCRIPTION)
       Bash                             是一蚖P                             sh
       相容的命令解釋程式,可以執行從標準輸入或者檔案中讀取的命令。       Bash
       也整合了 KornC Shell (kshcsh) 中的優秀特性。

       Bash  的目標是成為遵循  IEEE  POSIX Shell and Tools specification (IEEE
       Working Group 1003.2,可移植作業系統規約: shell 和工具) 的實現。

(OPTIONS)
       除了在   set   內建命令的文件中講z的單字符選項   (option)    之外,bash
       在啟動時還解釋下列選項。

       -c string 如果有  -c  選項,那麼命令將從 string 中讀取。如果 string 後-
                 惘陸捊      (argument),它戔N用於給位置參數      (positional
                 parameter,以 $0 起始) 賦C
       -i        如果有 -i 選項,shell 將交互地執行 ( interactive )。
       -l        選項使得  bash  以類似登入  shell  (login  shell)  的方式啟動
                 (參見下悸(INVOCATION) 章節)。
       -r        如果有 -r 選項,shell 成為受的 ( restricted ) (參見下悸 -
                shell(RESTRICTED SHELL) 章節)。
       -s        如果有                                                     -s
                 選項,或者如果選項處理完以後,沒有參數剩餘,那麼命令將從標準輸入讀取。
                 這蚇龠竣像\在啟動一茈璊 shell 時可以設置位置參數。
       -D        向標準輸出列印一茈H   $  為前導的,以雙引號引用的字符串列表。
                 這是在當前語言環境不是 CPOSIX 時,稿本中需n翻譯的字符串。
                 這蚇龠聒籈t了 -n 選項;不會執行命令。
       [-+]O [shopt_option]
                 shopt_option   是一  shopt  內建命令可接受的選項  (參見下悸
                 shell RO(SHELL  BUILTIN   COMMANDS)   章節)。   如果有
                 shopt_option-O     將設置那蚇龠答漕F     +O     取消它。
                 如果沒有給出                              shopt_optionshopt
                 將在標準輸出上列印設為允許的選項的名稱和C    如果啟動選項是
                 +O,輸出將以一種可以咱峎倏擗J的格式顯示。
       --        --        標誌選項的結束,禁止其餘的選項處理。任何         --
                 之後的參數將作為檔名和參數對待。參數 - 與此等價。

       Bash            也解釋一些多字節的選項。在命令行中,這些選項必須置於需-
       n被識別的單字符參數之前。

       --dump-po-strings
              等價於 -D,但是輸出是 GNU gettext po (可移植對象) 檔案格式
       --dump-strings
              等價於 -D
       --help 在標準輸出顯示用法信息並成功退出
       --init-file file
       --rcfile file
              如果   shell   是交互的,執行    file    中的命令,而不是標準的-
              茪H初始化檔案 ~/.bashrc (參見下悸(INVOCATION) 章節)

       --login
              等價於 -l

       --noediting
              如果 shell 是交互的,不使用 GNU readline 庫來讀命令行

       --noprofile
              不讀取系統S圍的啟動檔案    /etc/profile    或者任何茪H初始化檔案
              ~/.bash_profile,  ~/.bash_login,  或  ~/.profile  。預設情況下,
              bash     在作為登入    shell    啟動時讀取這些檔案    (參見下悸
             (INVOCATION) 章節)

       --norc 如果  shell  是交互的,不讀取/執行茪H初始化檔案  ~/.bashrc   這-
              蚇龠策b shell 以 sh 命令啟動時是預設啟用的

       --posix
              如果預設操作與     POSIX    1003.2    標準不同的話,改變    bash
              的行為來符合標準 (posix mode)

       --restricted
              shell 成為受的 (參見下悸shell(RESTRICTED SHELL) 章節)

       --rpm-requires
              產生一茯馬牮Z本運行,需n的檔案的列表。 這蚇龠等]含了  -n  選項。
              它是為了避免進行編譯期錯誤檢測時的制--  Backticks,  []  tests,
              還有 evals 不會被解釋,一些依賴關系可能丟失

       --verbose
              等價於 -v

       --version
              在標準輸出顯示此 bash 的版本信息並成功退出。

(ARGUMENTS)
       如果選項處理之後仍有參數剩餘,並且沒有指定   -c-s   選項,第一-
       荌捊N假定為一茈]含     shell     命令的檔案的名字。     如果     bash
       是以這種方式啟動的,                   $0                   將設置為這-
       蚗仵蛌漲W字,位置參數將設置為剩餘的其他參數。         Bash        從這-
       蚗仵蚺勿爸並執行命令,然後退出。 Bash  的退出狀態是稿本中執行的最後一-
       茤R令的退出狀態。                       如果沒有執行命令,退出狀態是0。
       嘗試的步驟是先試圖打開在當前目錄中的這蚗仵蛂A接下來,
       如果沒有找到,shell 將搜索稿本的 PATH 環境變量中的路徑。

(INVOCATION)
       login   shell   登入  shell,參數零的第一茼r符是  -  ,或者啟動時指定了
       --login 選項的 shell。

       interactive 交互的 shell,是一荓珧坋禸S有指定非選項的參數,並且沒有指定
       -c   選項,標準輸出和標準輸入都連接到了終端   (在   isatty(3)   中判定)
       的shell,或者啟動時指定了 -i 選項的  shell。如果  bash  是交互的,  PS1
       環境變量將被設置,並且   $-   包含   i   ,允許一   shell  稿本或者一-
       荓珧岍仵蚳蚗侅這一狀態。

       下列段落描z了   bash    如何執行它的啟動檔案。如果這些啟動檔案中的任一-
       茼s在但是不可讀取,  bash  將報告一蚇欞~。檔名中的波浪號 (~,tilde) 將像
       EXPANSION 章節中 Tilde Expansion 段描z的那樣展開。

       當  bash   是作為交互的登入   shell   啟動的,或者是一茷D交互的   shell
       但是指定了 --login 選項, 它漸讀取並執行 /etc/profile 中的命令,只n那-
       蚗仵蛈s在。    讀取那蚗仵蚺妨寣A它以如下的順序查找     ~/.bash_profile,
       ~/.bash_login,        和        ~/.profile,       從存在並且可讀的第一-
       蚗仵蚺勿爸並執行其中的命令。    --noprofile    選項可以用來在    shell
       啟動時阻止它這樣做。

       當一茧n入    shell    退出時,   bash   讀取並執行檔案   ~/.bash_logout
       中的命令,只n它存在。

       當一茈璊洩 shell  但不是登入  shell  啟動時,  bash  從檔案  ~/.bashrc
       中讀取並執行命令,只n它存在。可以用     --norc     選項來阻止它這樣做。
       --rcfile file  選項將強制  bash  讀取並執行檔案  file  中的命令,而不是
       ~/.bashrc 中的。

       當         bash        以非交互的方式啟動時,例如在運行一        shell
       稿本時,它在環境中查找變量        BASH_ENV        ,如果它存在則將它的-
       i開,使用展開的@為一蚗仵蛌漲W稱,讀取並執行。                  Bash
       運作的過程就如同執行了下列命令:
              if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
       但是沒有使用 PATH 變量的虓j索那蚗犰W。

       如果     bash     以名稱     sh     啟動,它試圖模仿     (mimic)     sh
       歷史版本的啟動過程,盡可能地相似,同時也遵循        POSIX        標準。
       當作為交互式登入   shell   啟動時,或者是非交互但使用了   --login   選項
       啟動的時,它漸嘗試讀取並執行檔案 /etc/profile~/.profile, 中的命令.
       選項 --noprofile 用於避免這種行為.當使用命令 sh 來啟動一茈璊泵〞 shell
       時,  bash 查找環境變量 ENV, 如果有定義的話就擴展它的,然後使用擴展後的-
       @為n讀取和執行的檔案     的名稱.由於使用     sh     啟動的      shell
       不會讀取和執行任何其他的啟動檔案,選項   --rcfile  沒有意義.使用名稱  sh
       啟動的非交互的  shell  不會讀取任何其他啟動檔案.當以  sh  啟動時,  bash
       在讀取啟動檔案之後進入 posix 模式.

       當  bashposix 模式啟動時,(和使用 --posix 命令行參數效果相同),它遵循
       POSIX   標準.    這種模式下,交互式   shell   擴展    ENV    環境變量的-
       ,讀取並執行以擴展後偯犰W的配置檔案.  不會讀取其他檔案.

       Bash 試著檢測它是不是由遠程 shell 守護程式,通常為 rshd 啟動的.如果 bash
       發現它是由 rshd 啟動的,它將讀取並執行  ~/.bashrc  檔案中的命令,  只n這-
       蚗仵蛈s在並且可讀.如果以   sh   命令啟動,它不會這樣做.    選項   --norc
       可以用來阻止這種行為,選項 --rcfile 用來強制讀取另一蚗仵,但是通常  rshd
       不會允許它, 或者用它怢荓珧 shell.

       如果  shell  是以與真實使用者(組)  id 不同的有效使用者(組) id 來啟動的,
       並且沒有 - 選項,那麼它不會讀取啟動檔案, 也不會從環境中繼承 shell  函數.
       環境變量中如果出現       SHELLOPTS-
       選項,那麼啟動時的行為是類似的, 但是不會姜m有效使用者 id.

wq(DEFINITIONS)
       下列定義在文件餘下部分中通用.
       blank白
              一茠躓璈峎O tab .
       word詞
              一茼r符序列, shell 將它拑欓陘@茧硎c單元. 也稱為一 token片段。
       nameW稱
              一茈u由字母,數字和下劃線構成的詞,並且以字符或下劃線起始.
              也稱為一 word identifier標識符.
       metacharacterr符
              一茼r符, 如果不是引用的話, 將成為詞的分隔符. 它是如下字符之一:
              |  & ; ( ) < > space tab
       control operator@符
              一 token(標識), 擁有控制功能. 它是如下符號之一:
              || & && ; ;; ( ) | <newline>

Odr("RESERVED WORDS")
       Reserved      words(保留字)      是對       shell       有特殊意義的詞.
       下列詞被識別為保留的,     如果不是引用,     並且不是一蚋眾璈R令的起始詞
       (參見下悸  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 CommandsRO
       simple command(簡單命令) 是(可選的)一系列變量賦, 緊接著是  blank(空格)
       分隔的詞和咿w向,   然後以一  control  operator  結束.   第一茧指明了-
       n執行的命令, 它被作為第 0 荌捊. 其餘詞被作為這茤R令的參數.

       simple command 簡單命令的返回O它的退出狀態,  或是  128+n,  如果命令被
       signal(信號) n 結束的話.

   PipelinesD
       pipeline(管道) 是一茤峖h茤R令的序列,用字符 | 分隔。管道的格式是這樣:

              [time [-p]] [ ! ] command [ | command2 ... ]

       命令        command        的標準輸出通過管道連接到命令        command2
       的標準輸入。連接是在命令指定的任何咿w向之前進行的(參見下悸 REDIRECTION
      wV)!           作為管道前綴,管道的退出狀態將是最後一-
       茤R令的退出狀態的邏輯非C      否則,管道的退出狀態就是最後一茤R令的。
       shell 在返回退出狀態妨e,等待管道中的所有命令返回。

       如果保留字                                                         time
       作為管道前綴,管道中止後將給出執行管道耗費的使用者和系統時間。 選項  -p
       將使輸出符合   POSIX  指定的格式。  環境變量  TIMEFORMAT  可以設置為一-
       荇璁’r符串,指定時間信息應當如何顯示;參見下悸    Shell     Variables
      q 中 TIMEFORMAT 的講z。

       管道中的每茤R令都作為單獨的進程來執行(即,在一茪l shell 中啟動)。

   ListsC
       list(序列)是一茤峖h蚨瑐D,用操作符   ;,   &,   &&,  或  ||  分隔的序列,
       並且可以選擇用 ;, &, 或 <newline>新行符結束.

       這些序列操作符中,  &&||   優先級相同,其次是   ;&,   它-
       怐瑰u先級是相同的。

       序列中可以有一茤峖h虓s行符來分隔命令,而不是使用分號分隔。

       如果一茤R令是由控制操作符  &  結束的, shell 將在I景的子 shell 中執行這-
       茤R令。   shell    不會等待命令執行結束,返回狀態總是    0。以分號    ;
       分隔的命令會被順序執行;shell                                 會等待每-
       茤R令依次結束。返回狀態是最後執行的命令的返回狀態。

       控制操作符 &&|| 分別代表 AND 和 OR 序列。一 AND 序列的形式是

              command1 && command2

       command2 只有在 command1 返回 0 時才被執行。

       一 OR 序列的形式是

              command1 || command2

       command2  只有在  command1   返回非   0   狀態時才被執行。AND   和   OR
       序列的返回狀態是序列中最後執行的命令的返回狀態。

   Compound CommandsXRO
       compound command(復合命令) 是如下情況之一:

       (list) list    序列將在一茪l    shell    中執行。變量賦M影響    shell
              環境變量的內建命令在命令結束後不會再起作用。  返回O序列的返回-
              C

       { list; }
              list      序列將在當前      shell      環境中執行。序列必須以一-
              虓s行符或分號結束。 這種做法也稱為 group  command(命令組)。返回-
              O序列的返回C注意與元字符  (  和    不同, {}reserved
              words(保留字),必須出現在能夠識別保留字的場合。          由於它-
              怳ㄦ|產生斷詞(cause a word break),它怍M序列之間必須用空格分開。

       ((expression))
              表達式 expression  將被求C求W則在下悸 ND  (ARITHMETIC
              EVALUATION) 章節中描z。如果表達式的D零,返回N是 0;否則返回-
              O 1。這種做法和 let "expression" 等價。

       [[ expression ]]
              返回   0   或   1,取決於條件表達式    expression    求滷〞p。
              表達式是由下  CONDITIONAL  EXPRESSIONS F 章節中描z的-
              儢y(primaries)         組成。         [[]]
              中的詞不會進行詞的拆分和路徑的擴展處理;                 而tilde
              擴展,參數和變量擴展,算術擴展,命令替換,函數替換和引用的去除則都將進行。

              當使用    ==!=   操作符時,操作符右邊的字符串被認為是一-
              蚍狾﹛A根據下 Pattern Matching(模式匹配) 章節中的規則進行匹配。
              如果匹配則返回O                                    0,否則返回
              1。模式的任何部分可以被引用,強制使它作為一茼r符串而被匹配。

              表達式可以用下列操作符結合起來。根據優先級的飢C出如下:

              ( expression )
                     返回表達式                 expression                 的-
                     C括號可以用來提升操作符的優先級。
              ! expression
                     返回真,如果表達式 expression 返回假。
              expression1 && expression2
                     返回真,如果表達式 expression1expression2 都返回真。
              expression1 || expression2
                     返回真,如果表達式     expression1    或者    expression2
                     二者之一返回真。

              &&(與)   和   ||   操作符不會對表達式   expression2    求A如果
              expression1 可以決定整荓囓顗竁F式的返回爾隉C

       for name [ in word ] ; do list ; done
              in       之後的一系列詞會被擴展,產生一荈等埵C表。變量      name
              被依次賦以這茼C表中的每茪葛嚏A 序列 list  每次都被執行。如果  in
              word   被忽略,那麼   for  命令遍歷  已設置的位置參數(positional
              parameter,參見下悸  PARAMETERS  )list。             返回O最後一茤R令的返回C如果            in
              之後的詞擴展的結果是空列表,就不會執行任何命令,返回O 0。

       for (( expr1 ; expr2 ; expr3 )) ; do list ; done
              漸,算術表達式    expr1    被根據下   ND     (ARITHMETIC
              EVALUATION)expr2 被循環求-
              A直到它等於 0。每次  expr2  結果非零時,序列  list  都被執行,
              算術表達式 expr3 被求C如果任何表達式被忽略,將被視為執行結果是
              1。   返回O序列   list    中被執行的最後一茤R令的返回F或者是
              false,如果任何表達式非法的話。

       select name [ in word ] ; do list ; done
              in                  之後的一系列詞會被擴展,產生一荈等埵C表。這-
              蚋X展後的詞集合被輸出到標準錯誤上,每茷e  加上一蚍r。如果  in
              word  被忽略,將輸出位置參數  (參見下悸 PARAMETERS 章節)。
              PS3         提示符將被顯示出來,等待從標準輸入得到一行輸入。如果
              輸入是一蚍r且顯示中有對應的詞,那麼變量   name  的N設置為這-
              茧。如果輸入一-
              茠臟獢A那麼詞和提示符將再次顯示出來。如果讀入了一
              EOF,命令就結束。            任何其他N設置變量            name
              為空。讀入的行保存為變量         REPLY.         序列        list
              在每次選擇之後都會執行,直到執行了一   break   命令。    select
              的退出狀態是序列               list              中執行的最後一-
              茤R令的退出狀態,如果沒有執行命令就是 0。

       case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
              case  命令漸擴展  word,  然後依次試著用每  pattern  來匹配它,
              使用與路徑擴展相同的匹配規則(參見下悸     Pathname    Expansion
             |Xi     章節)。如果找到一茪t,相應的序列將被執行。找到一-
              茪t之後,不會再嘗試其後的匹配。  如果沒有模式可以匹配,返回O
              0。否則,返回序列中最後執行的命令的返回C

       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,直到序列中最後一茤R令返回 0。
              until 命令和 while  命令等價,除了對條件的測試恰好相反;序列  do
              list  執行直到序列中最後一茤R令返回非零狀態C  whileuntil
              命令的退出狀態是序列 do  list  中最後一茤R令的退出狀態,  或者是
              0,如果沒有執行任何命令。

       [ function ] name () { list; }
              這樣可以定義一茼W為  name  的函數。函數體  body  是包含在 { 和 }
              之間的命令序列 list。 在指定將  name  作為一茤R令運行的場合,這-
              荍C將被執行。
              函數的退出狀態是函數體最後執行的命令的退出狀態(參見下悸
              FUNCTIONS 章節)。

`(COMMENTS)
       在非交互的  shell  中或者使用內建命令 shopt 啟用了 interactive_comments
       選項的交互的        shell        中,以        #        起始的詞使得這-
       茧和所有同一行上所有剩餘的字符都被忽略。沒有啟用  interactive_comments
       選項的交互式 shell 不允許出現注釋。這蚇龠策b交互式 shell 中是預設啟用的
       (參見下悸 shellRO(SHELL BUILTIN COMMANDS) 章節)。

(QUOTING)
       引用                                                            Quoting
       用來去掉特定字符或詞的特殊意義。引用可以用來禁止對特殊字符的處理,
       阻止保留字被識別,還用來阻止參數的擴展。

       上惘b  DEFINITIONS wq  中列出的每茪蒂r符  metacharacters  對於 shell
       都有特殊意義。如果n表達它的本義,必須引用它。

       在使用命令行歷史擴展功能時,history       expansion        字符,通常是
       !,必須被引用,才不會進行歷史擴展。

       有三種引用機制:轉義字符 (escape character), 單引號和雙引號。

       一茈撲Q引用的反斜槓  (\)  是轉義字符 escape character。 它保留其後下一-
       茼r符的字捧N義,除非那是一虓s行符。               如果                \
       和新行符成對出現,並且反斜槓自豕S有被引用,那麼              \<newline>
       被視為續行標誌 (意思是,它被從輸入流中刪除並忽略了)。

       將字符放在單引號之中,將保留引用中所有字符的字-
       捧N義。單引號不能包含在單引號引用之中,即使前悼[上了反斜槓。

       將字符放在雙引號中,同樣保留所有字符的字捧N義,例外的情況是  $,  `,  和
       \。   字符    $`    在雙引號中仍然具有特殊意義。反斜槓只有後-
       惇O下列字符時才有特殊意義:    $,    `,    ",    \,    或    <newline>.
       雙引號可以包含在雙引號引用中,但n在前悼[上一茪炱袟b。

       特殊的參數  *@  在雙引號中有特殊意義(參見下悸  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   一茪K比特字符,它的O八進制 nnn (一到三蚍r)。
              \xHH   一茪K比特字符,它的O十六進制        HH        (一到兩-
                     茪Q六進制數字)。
              \cx    一 ctrl-x 字符

       擴展結果是單引號引用的,就好像 $ 符號不存在一樣。

       雙引號引用字符串前悼[上一   $    符號將使得這茼r符串被根據當前語言環境
       (locale)  來翻譯。  如果當前語言環境是  C 或者 POSIX,這茞顫僚N被忽略。
       如果這茼r符串被翻譯並替換了,那麼替換結果是雙引號引用的。

(PARAMETERS)
       一荌捊   parameter   是一蚗x存犒篘憿C它可以是一茼W稱    name,    一-
       蚍r或者是下 Special ParametersS 章節中列出的特殊字符之一。從
       shell 的角度來看,一蚥僆q  variable  是一茈悁W稱  name  代表的參數。一-
       蚥僆q有一蚧   value   以及零茤峖h蚅搣  attibutes。屬性可以使用內建命令
       declare 來設置(參見下 shellRO(SHELL BUILTIN COMMANDS)  章節中對
       declare 的描z)。

       如果給一荌捊慒,那麼它就被定義了。空字符串是有效的C一旦一-
       蚥僆q被定義了,它只能用內建命令     unset     來取消(參見下      shell
      RO(SHELL BUILTIN COMMANDS) 章節).

       一蚥僆q variable 可以用這樣的語句形式來賦G

              name=[value]

       如果沒有給出      valueA      變量就被賦為空字符串。所有      values
       都經過了波浪線擴展,參數和變量擴展,命令替換,算術擴展和引用的刪除(參見下-
       悸 EXPANSIONXi 章節)。如果變量設置了 integer 屬性,那麼 value
       將進行算術擴展,即使沒有應用  $((...))   擴展   (參見下悸   Arithmetic
       Expansion   NXi   章節)。   不會進行詞的拆分,除非是下   Special
       Parameters   S    中提到的    "$@"。    不會進行路徑的擴展。賦-
       y句也出現在下列內建命令中,作為它怐滌捊G  declare, typeset, export,
       readonly, 和 localPositional Parametersm數
       位置參數    positional    parameter     是以一或多蚍r代表的參數,除了
       0。位置參數是在  shell  啟動時,根據它的參數來賦滿A  也可以用內建命令
       set 來奐s賦C位置參數不能用賦y句來賦C在一  shell  函數被執行的時-
       唌A位置參數會被暫時地替換掉 (參見下悸 FUNCTIONS 章節)。

       當位置參數由兩茈H上的數字構成時,它必須放在括號內  (參見下悸 EXPANSION
      Xi 章節)。

   Special ParametersS數
       shell 對一些參數做特殊處理。這些參數只能被引用而不能被賦C
       *      擴展為位置參數,從  1  開始。如果擴展發生在雙引號中,它擴展為一-
              茧,O各荌捊A以特殊變量  IFS 的第一茼r符分隔。也就是說,"$*"
              等價於 "$1c$2c...",這裏 c 是變量 IFS  的第一茼r符。如果沒有設置
              IFSIFS
       @      擴展為位置參數,從      1      開始。如果擴展發生在雙引號中,每-
              荌捊ㄠN擴展為一茧。也就是說,  "$@"  等價於  "$1"  "$2"   ...
              如果位置參數不存在,"$@" 和 $@ 擴展為空 (即,它抭Q刪除了)。
       #      擴展為位置參數的蚍A以十進制表示。
       ?      擴展為最近執行的前台管道的狀態。
       -      擴展為當前選項標誌。標誌是在啟動時或以內建命令               set
              指定的,或者是 shell 自迅]置的 (例如選項 -i )。
       $      擴展為 shell 的進程 ID。在一 () 子 shell 中,它擴展為當前 shell
              的 進程 ID 而不是子 shell 的。
       !      擴展為最近一次執行的I景 (異步) 命令的進程號。
       0      擴展為    shell   或者   shell   稿本的名稱。這蚥僆q是在   shell
              初始化時設置的。如果    bash     是執行稿本檔案時啟動的,     $0
              將設置為那蚗仵蛌漲W稱。如果  bash  啟動時的參數包含 -c$0
              被設置為啟動命令行被執行後的第一-
              荌捊A如果有的話。否則,它被設置為用來啟動                 bash
              的檔名,就是參數 0。
       _      shell    啟動時,設置為     shell     或參數中被執行的     shell
              稿本的絕對路徑名。        然後,在擴展時擴展為上一茤R令的最後一-
              荌捊C它也被設置為被執行的每茤R令的檔案全名並且     被設置到這-
              茤R令執行的環境當中。當檢查郵件時,這-
              荌捊O存著正在檢查的郵件檔案的名稱。

   Shell Variablesq
       shell 定義了下列變量:

       BASH   擴展為用來啟動當前 bash 實例的檔案全名。
       BASH_VERSINFO
              一茈u讀數組變量,成保存著當前                              bash
              實例的版本信息。賦予數組元素的O如下這些:
              BASH_VERSINFO[0]        主版本號 (release).
              BASH_VERSINFO[1]        次版本號 (version).
              BASH_VERSINFO[2]        補丁版本
              BASH_VERSINFO[3]        編譯信息
              BASH_VERSINFO[4]        發佈時的狀態 (例如, beta1).
              BASH_VERSINFO[5]        MACHTYPE 孕x類型

       BASH_VERSION
              擴展為一茼r符串,描z了這 bash.  實例的版本。

       COMP_CWORD
              ${COMP_WORDS}       的索引,指向當前游標位置所在的詞。       這-
              蚥僆q只有在被可編程補全功能 (參見下悸  Programmable  Completion
              章節) 調用的 shell 函數中才可用。

       COMP_LINE
              當前命令行。這蚥僆q只有在被命令補全功能調用的              shell
              函數和外部命令中才可用。

       COMP_POINT
              相對於當前命令起始處的當前游標位置。如果當前游標位置是當前命令的末端,
              它的N和 ${#COMP_LINE} 相等。 這蚥僆q只有在被命令補全功能調用的
              shell 函數和外部命令中才可用。

       COMP_WORDS
              一蚍桲僆q   (參見下悸    Arrays(數組)一節),由當前命令行的各-
              茬瘚構成。        這蚥僆q只有在被命令補全功能調用的       shell
              函數中才可用。

       DIRSTACK
              一-
              蚍桲僆q,包含當前目錄棧的內容。棧中的目錄排列的順序就是用內建命令
              dirs                顯示時的順序。對這蚍桲僆q的成賦i以用來-
              蚹鼢怳中w有的目錄,但是n添加和刪除目錄就必須使用  內建命令 pushdpopdDIRSTACK
              的定義,它就失去了它的特殊意義,即使後來奐s定義它。

       EUID   擴展為當前使用者的有效使用者            ID。它在           shell
              啟動時設置。它是只讀的。

       FUNCNAME
              當前執行的     shell     函數名。這蚥僆q只有在執行一      shell
              函數時存在。向  FUNCNAME  賦S有效果並且返回一蚇欞~。如果取消了
              FUNCNAME 的定義,它就失去了特殊的意義,即使後來奐s定義它。

       GROUPS 一蚍桲僆q,包含當前使用者所屬的組的列表。向     GROUPS     賦-
              S有效果並且返回一蚇欞~。如果取消了                      GROUPS
              的定義,它就失去了特殊的意義,即使後來奐s定義它。

       HISTCMD
              當前命令的歷史編號,或者歷史列表中的索引。如果取消了     HISTCMD
              的定義,它就失去了特殊的意義,即使後來奐s定義它。

       HOSTNAME
              自動設置為當前的主機名。

       HOSTTYPE
              自動設置為一茼r符串,唯一地標識著正在運行 bash 的機器類型。預設-
              O系統相關的。

       LINENO 每次引用這荌捊氶Ashell                           將它替換為一-
              茷示在稿本或函數中當前行號的十進制數字(從       1       開始)。
              如果不是在稿本或函數中,替換得到的ㄓ@定有意義。如果取消了
              LINENO 的定義,它就失去了特殊的意義,即使後來奐s定義它。

       MACHTYPE
              自動設置為一茼r符串,完整的描z了正在運行                    bash
              的系統類型,格式是標準的  GNU   cpu-company-system   格式。預設-
              O系統相關的。

       OLDPWD 上一次命令 cd 設置的工作目錄。

       OPTARG 內建命令   getopts   處理的最後一蚇龠粥捊   (參見下悸   shell
             RO(SHELL BUILTIN COMMANDS) 章節)。

       OPTIND 內建命令  getopts   將處理的下一荌捊滲薑   (參見下悸   shell
             RO(SHELL BUILTIN COMMANDS) 章節)。

       OSTYPE 自動設置的一茼r符串,描z了正在運行     bash    的作業系統。預設-
              O系統相關的。

       PIPESTATUS
              一蚍桲僆q           (參見下悸           Arrays          組
              章節),包含最近執行的前台管道中的進程(可能只包含一-
              茤R令)的退出狀態。

       PPID   shell 的父進程的進程號。這蚥僆q是只讀的。

       PWDcd 命令設置的當前工作目錄。

       RANDOM 每次引用這荌捊氶A都會產生一        0         到         32767
              之間的隨機整數。可以通過向               RANDOM              賦-
              茠鴝l化隨機數序列。如果取消了                           RANDOM
              的定義,它就失去了特殊的意義,即使後來奐s定義它。

       REPLY  變量的N作為內建命令 read 的輸入,如果命令沒有參數的話。

       SECONDS
              每次引用這荌捊氶A返回  shell  自運行以來的秒數。如果向 SECONDS
              賦A此後對它的引用將返回自賦仱_的秒數加上所賦予的C如果取消
              SECONDS 的定義,它就失去了特殊的意義,即使後來奐s定義它。

       SHELLOPTS
              一茷_號分隔的被允許的   shell  選項列表。列表中每茧都是內置命令
              set-o 選項的有效參數。  SHELLOPTS  中出現的選項也是  set  -o
              顯示為     on     的選項。如果     bash    啟動時從環境中找到這-
              蚥僆q,那麼在讀取任何配置檔案之前,列表中的每-
              蚇龠絨ㄠN被設置。這蚥僆q是只讀的。

       SHLVL  每次啟動一 bash 的實例時都會增加。

       UID    擴展為當前使用者的 ID,在啟動時初始化。這蚥僆q是只讀的。

       下列變量被 shell 使用。有時 bash 會為變量賦預設F這些情況在下捧|標出。

       BASH_ENV
              如果    bash    在執行一    shell    稿本時設定了這蚥僆q,它的-
              N被解釋為一蚗犰W,    包含著初始化    shell   用到的命令,就像
              ~/.bashrc    中一樣。     BASH_ENV     的b被解釋為一蚗犰W之前-
              n經過參數擴展,命令替換和算術擴展。不會使用                 PATH
              來查找結果檔名。
       CDPATH 命令 cd 的搜索路徑。這是一茷_號分隔的目錄列表,shell 從中查找 cd
              命令的目標目錄。可以是這樣: ".:~:/usr".
       COLUMNS
              用在內建命令   select   當中,用來判斷輸出選擇列表時的終端寬度。
              自動根據 SIGWINCH 信號來設置。
       COMPREPLY
              一蚍桲僆q,bash                       從中讀取可能的命令補全。
              它是由命令補全功能調用的 shell 函數產生的。
       FCEDIT 內建命令 fc 預設的編輯器。
       FIGNORE
              一茷_號分隔的延伸檔名名列表,在進行檔名補全時被忽略   (參見下悸
              READLINE                                              章節)。一-
              茤策钀犰W滿足其中之一的檔名被排除在匹配的檔名之外。可以是這樣:
              ".o:~".
       GLOBIGNORE
              一茷_號分隔的模式列表,定義了路徑名擴展時n忽略的檔名集合。
              如果一蚗犰W與路徑擴展模式匹配,同時匹配    GLOBIGNORE    中的一-
              蚍狾&氶A它被從匹配列表中刪除。
       HISTCONTROL
              如果設置為           ignorespace,            以            space
              開頭的行將不會插入到歷史列表中。如果設置為           ignoredups,
              匹配上一次歷史記錄的行將不會插入。設置為              ignoreboth
              會結合這兩種選項。如果沒有定義,或者設置為其他-
              A所有解釋器讀取的行都將存入歷史列表,   但還n經過   HISTIGNORE
              處理。這蚥僆q的作用可以被                             HISTIGNORE
              替代。多行的組合命令的第二和其餘行都不會被檢測,不管 HISTCONTROL
              是什麼,都會加入到歷史中。
       HISTFILE
              保存命令歷史的檔名   (參見下悸   HISTORY  v  章節)。預設O
              ~/.bash_history。如果取消定義,在交互式       shell       退出時
              命令歷史將不會保存。
       HISTFILESIZE
              歷史檔案中包含的最大行數。當為這蚥僆q賦氶A如果需-
              n的話,歷史檔案將被截斷            來容納不超過這蚧的行。預設O
              500。歷史檔案在交互式 shell 退出時 也會被截斷到這蚧。
       HISTIGNORE
              一茷_號分隔的模式列表,用來判斷那-
              茤R令行應當保存在歷史列表中。每蚍狾   都定位於行滿A必須匹配整行
              (沒有假定添加  `*')。在  HISTCONTROL 指定的測試結束後,這裏的每-
              蚍狾○τ被測試。除了弗`的  shell  模式匹配字符,  `&'  匹配上一-
              蚞史行。`&'                      可以使用反斜槓來轉義;反斜槓在
              嘗試匹配之前將被刪除。多行的組合命令的第二行以及後續行都不會被測試,不管
              HISTIGNORE 是什麼,都將加入到歷史中。
       HISTSIZE
              命令歷史中保存的歷史數量  (參見下悸 HISTORYv 章節)。預設O
              500。
       HOME   當前使用者的茪H目錄;內建命令                                 cd
              的預設參數。在執行波浪線擴展時也用到這蚥僆q。
       HOSTFILE
              包含一荇璁〝M  /etc/hosts  相同的檔名,當 shell 需n補全主機名時-
              n讀取它。shell                                        運行過程中
              可以改變可能的主機名補全列表;改變之後下一次需n主機名補全時 bash
              會將新檔案的內容添加到舊列表中。如果定義了 HOSTFILE  但是沒有賦-
              Abash                   將嘗試讀取                  /etc/hosts
              檔案來獲得可能的主機名補全列表。當取消                  HOSTFILE
              的定義時,主機名列表將清空。
       IFS    內部字段分隔符          Internal         Field         Separator
              用來在擴展之後進行分詞,使用內部命令 read  將行劃分成詞。預設O
              ``<space><tab><newline>''。
       IGNOREEOF
              控制交互式  shell  接受到唯一一 EOF 字符時的行為。如果有定義,-
              O需n在一行的開始連續輸入 EOF 字符,直到可以使 bash 退出的字符-
              蚍C如果這蚥僆q存在,但是ㄛO一蚍r或者沒有賦A預設O  10。
              如果變量沒有定義, EOF 標誌著輸入的結束。
       INPUTRC
              readline  的啟動配置檔案,而不是預設的   ~/.inputrc   (參見下悸
              READLINE 章節)。
       LANG   用來決定沒有特地用 LC_ 變量指定的語言環境項。
       LC_ALL 這蚥僆q超越了 LANG 和所有其他指定語言環境項的 LC_ 變量。
       LC_COLLATE
              這蚥僆q決定了為路徑擴展的結果排序時的字母順序,決定了-
              S圍表達式的行為, 等價類,和路徑擴展中的歸並順序以及模式匹配。
       LC_CTYPE
              這蚥僆q決定了字符的解釋和路徑擴展以及模式匹配中字符類的行為。
       LC_MESSAGES
              這蚥僆q決定了翻譯以 $ 前導的雙引號字符串時的語言環境。
       LC_NUMERIC
              這蚥僆q決定了格式化數字時的語言環境分類。
       LINES  內建命令     select     用它來判斷輸出選擇列表時的列寬度。在收到
              SIGWINCH 信號時自動設置。
       MAIL   如果這荌捊]置為一蚗犰W,並且沒有設置環境變量  MAILPATH  的話,
              bash 將在這蚗仵蚺仇q知使用者有郵件到達。
       MAILCHECK
              指定 bash 檢查郵件的頻率是多少,以秒為單位。預設O  60  秒。需-
              n檢查郵件的時唌Ashell               在顯示提示符之前將進行檢查。
              如果取消它的定義,或者設置為並非大於等於零的數Ashell
              將禁止郵件檢查。
       MAILPATH
              一茷_號分隔的檔名列表,從中檢查郵件。當郵件到達某-
              荅S殊檔案中時,輸出的特定消息可以     通過將檔名與消息以     `?'
              分隔來指定。 在消息的文本中,$_ 擴展為當前郵件檔案的檔名。例如:
              MAILPATH='/var/mail/bfox?"You  have  mail":~/shell-mail?"$_  has
              mail!"'
              Bash                                          為這蚥僆q提供預設-
              A但是它使用的使用者郵件檔案的位置是系統相關的
              (例如,/var/mail/$USER)。
       OPTERR 如果設置為 1, bash 顯示內建命令 getopts 產生的錯誤消息 (參見下-
              悸 shellRO(SHELL  BUILTIN  COMMANDS)  章節)。每次  shell
              啟動時或者一 shell 稿本被執行時 OPTERR 被初始化為 1。
       PATH   搜索命令的路徑。它是一茷_號分割的目錄列表,shell    從中搜索命令
              (參見下悸             RO(COMMAND              EXECUTION)
              段落)。預設的路徑是系統相關的,是由安裝     bash     的系統管理-
              設置的。通常它的O
              ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''。
       POSIXLY_CORRECT
              如果   bash  啟動環境中有這蚥僆q,它將在讀取啟動配置檔案之前進入
              posix  mode,就好像提供了   --posix   啟動參數一樣。如果   shell
              運行過程中設置了它,bash  就啟用 posix mode,就好像執行了 set -o
              posix 命令一樣。
       PROMPT_COMMAND
              如果有定義,它的N作為一茤R令,每次顯示主提示符之前都會執行。
       PS1    這荌捊瘓被擴展       (參見下悸        PROMPTING       符
              段落),用作主提示符字符串。預設O ``\s-\v\$ ''。
       PS2    這荌捊瘓同   PS1  一起被擴展,用作次提示符字符串。預設O  ``>
              ''。
       PS3    這荌捊瘓被用作內建命令  select   的提示符   (參見上悸   SHELL
              GRAMMARyk 章節)。
       PS4    這荌捊瘓同   PS1   一起被擴展,在執行跟蹤中在   bash   顯示每-
              茤R令之前顯示。需n的話,   PS4   的第一茼r符會被複製多次,來指示
              indirection 的層數。預設O ``+ ''。
       TIMEFORMAT
              在前綴   time  保留字的管道中,這荌捊瘓用作格式字符串,  指定-
              p時信息如何顯示。字符      %       引入的轉義序列,被擴展為時間
              或其他信息。轉義序列和它怐漣t義如下所示;括號中是可選的成分。
              %%        一茼r惜W的 %%[p][l]R  經歷的時間,以秒p算。
              %[p][l]U  CPU 在使用者模式下執行的秒數。
              %[p][l]S  CPU 在系統模式下執行的秒數。
              %P        CPU 使用率,算法是 (%U + %S) / %R。

              可選的   p   是指定精度   (小數點後數字位數)  的數C  如果是  0
              就不輸出小數點或小數C最多指定到小數點後三位; 如果  p  大於  3
              就會被改為 3。如果沒有指定 p,預設使用 3。

              可選的   l   指定了長格式,包含分鐘,格式是  MMmSS.FFs。  p  的-
              M定了是不是包含小數位。

              如果沒有設置這蚧,bash                               假定它的O
              $'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'。  如果它是空A就不會顯示-
              p時信息。顯示格式字符串的時唌A會加上 一茷e導的新行符。

       TMOUT  如果設置為大於  0  的ATMOUT  被當作內建命令  read   的預設超時
              等待時間。如果等待終端輸入時, TMOUT 秒之後仍然沒有輸入, select
              命令將終止。在交互的        shell        中,它的Q解釋為顯示了
              主提示符之後等待輸入的秒數。如果經過這茯篲妨嶀斯M沒有輸入,
              Bash 將退出。

       auto_resume
              這蚥僆q控制了  shell   如何與使用者和作業控制交互。如果設置了這-
              蚥僆q,                                      一茪ㄔ]含咿w向的單-
              茧的簡單命令,將作為恢復被中斷的作業的指示。
              不允許出現模棱兩可的情況;如果有多荍@業都以這-
              茧起始,將恢復最近運行     的作業。在這種情形下,被中斷的作業的
              name          是用於啟動它的命令行。如果]置為          exactA
              給出的字符串必須精確匹配被中斷的作業名;如果設置為   substring,
              給出的字符串需n匹配被中斷的作業名的子串。             substring
              的功能與作業標識符 %?  功能類似 (參見下悸 JOB CONTROL @~制
              章節)。如果設置為任何其他-
              A給出的字符串必須是被中斷的作業的前綴;  這樣做與作業標識符  %
              功能類似。

       histchars
              兩到三茼r符,控制著歷史擴展和分段       (tokenization,參見下悸
              HISTORY   EXPANSION   vXi    章節)。第一茼r符是    history
              expansion(歷史擴展)  字符,  這茼r符表明了歷史擴展的開始,通常是
              `!'。  第二茼r符是  quick  substitution(快速替換)  字符,  它是-
              奐s運行上次輸入的命令,但將命令中的字符串替換為另一茠甄票g,
              預設是       `^'。可選的第三茼r符是指示如果作為一茧的開始,那麼
              一行中剩餘字符是注釋。通常這茼r符是        `#'。歷史注釋字符使得
              對一行中剩餘字符在歷史替換中被跳過。它不一定使  shell   解釋器將
              這一行的剩餘部分當作注釋。

   Arrays
       Bash   提供了一維數組變量。任何變量都可以作為一蚍捸F內建命令  declare
       可以顯式地定義數組。數組的大小沒有上,也沒有制在連續對成引用和     賦-
       犰酗偵犥求。數組以整數為下標,從 0 開始。

       如果變量賦禸洏弇y法   name[subscript]=value,  那麼就會自動創建數組。
       subscript 被當作一蚨滼N表達式,結果必須是大於等於 0 的Cn顯式地定義一-
       蚍捸A使用  declare  -a  name  (參見下悸 shellRO(SHELL BUILTIN
       COMMANDS) 章節)。也可以用 declare -a  name[subscript]  這時   subscript
       被忽略。數組變量的屬性可以用內建命令  declarereadonly 來指定。每-
       蚅搣妏鴭顝狾頃掑葛應ㄕ陵纂C

       數組賦i以使用復合賦漱閬﹛A形式是 name=(value1 ...  valuen),這裏每
       value               的形式都是               [subscript]=stringstring
       必須出現。如果出現了可選的括號和下標,將為這茪U標賦A否則        被賦-
       漱葛尷漱U標是語句中上一次賦漱U標加一。下標從     0    開始。    這-
       蚖y法也被內建命令   declare   所接受。單獨的數組元素可以用上惜雯衁獄y法
       name[subscript]=value 來賦C

       數組的任何元素都可以用            ${name[subscript]}           來引用。
       花括號是必須的,以避免和路徑擴展沖突。如果   subscript@    或是
       *,它擴展為                       name                      的所有成。
       這兩種下標只有在雙引號中才不同。在雙引號中,${name[*]}    擴展為一茧,
       由所有數組成的捰芋A用特殊變量   IFS  的第一茼r符分隔;${name[@]}  將
       name         的每茼叔擴展為一茧。          如果數組沒有成,${name[@]}
       擴展為空串。這種不同類似於特殊參數  *@  的擴展 (參見上悸 Special
       Parameters   段落)。${#name[subscript]}    擴展為    ${name[subscript]}
       的長度。如果   subscript*   或者是   @,擴展結果是數組中元素的-
       蚍C引用沒有下標數組變量等價於 引用元素 0。

       內建命令   unset   用於銷毀數組。unset   name[subscript]   將銷毀下標是
       subscript   的元素。   unset  name,  這裏  name  是一蚍捸A或者  unset
       name[subscript], 這裏 subscript* 或者是 @,將銷毀整蚍捸C

       內建命令 declare, local,  和  readonly  都能接受  -a  選項,從而指定一-
       蚍捸C內建命令  read 可以接受 -a 選項,從標準輸入讀入一列詞來為數組賦-
       C內建命令 setdeclare 使用一種可以咱峎倏擗J的格式來顯示數組元素。

Xi(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,   但是並不需n存在相應的檔案。    花括號擴展的模式是一茈i選的
       preamble(前導字符), 後掘繺菑@系列逗號分隔的字符串,包含在一對花括號中,
       再後惇O一茈i選的 postscript(附言)。  前導被添加到花括號中的每茼r符串前-
       情A附言被附加到每茧痕G字符串之後, 從左到右進行擴展。

       花括號擴展可以嵌套。擴展字符串的結果沒有排序;而是保留了從左到右的順序。
       例如, a{d,c,b}e 擴展為 `ade ace abe'。

       花括號擴展是在任何其他擴展之前進行的,任何對其他擴展有特殊意義的字符
       都保留在結果中。它是嚴格字惜W的。                                  Bash
       不會對擴展的上下文或花括號中的文本做任何語義上的解釋。

       正確的花括號擴展必須包含沒有引用的左括號和右括號,以及至少一茖S有
       引用的逗號。任何不正確的表達式都不會被改變。可以用反斜槓來引用  {,
       來阻止將它斻悝O為花括號表達式的一部分。  為了避免與參數擴展沖突,字符串
       ${ 不被認為有效的組合。

       這種結構通常用來簡寫字符串的公共前綴遠比上例中為長的情況,例如:

              mkdir /usr/local/src/bash/{old,new,dist,bugs}
       或者:
              chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

       花括號擴展導P了與歷史版本的                                          sh
       的一點不相容。在左括號或右括號作為詞的一部分出現時,    sh    不會對它-
       抾i行特殊處理,會在輸出中保留它怴C                                 Bash
       將括號從花括號擴展結果的詞中刪除。例如,向  sh  輸入  file{1,2}   會導-
       P不變的輸出。同樣的輸入在   bash  進行擴展之後,會輸出  file1  file2  .
       如果需n同 sh 嚴格地保持相容,需n在啟動 bash 的時唻洏 +B 選項,或者使用
       set  命令加上  +B  選項來禁用花括號擴展 (參見下悸 shellRO(SHELL
       BUILTIN COMMANDS) 章節)。

   Tilde Expansion
       如果一茧以沒有引用的波浪線字符 (`~') 開始,所有  在第一茖S有引用的斜線
       (`/')   之前的字符  (或者是這茧的所有字符,  如果沒有沒引用的斜線的話)
       都被認為是      tilde-prefix(波浪線前綴)。      如果       tilde-prefix
       中沒有被引用的字符,那麼波浪線之後的字符串        被認為是        login
       name(登入名)。如果登入名是空字符串,波浪線將 被替換為 shell  參數  HOME
       的C如果沒有定義     HOMEPWD 的荋懂哄C如果 tilde-
       prefix   是   `~-',並且設置了   shell   變量   OLDPWD,  將使用這蚥僆q-
       荋懂哄C如果在   tilde-prefix   中,波浪線之後的字符串   由一蚍r   N
       組成,前綴可選的       `+'       或者       `-',那麼      tilde-prefix
       將被替換為目錄棧中相應的元素,就是將 tilde-prefix  作為參數執行內建命令
       dirs      顯示的結果。如果     tilde-prefix     中波浪線之後的字符是一-
       蚍r,沒有前綴, 那麼就假定有一 `+'。

       如果登入名不合法,或者波浪線擴展失敗,這茧將不會變化。

       在變量賦丑A對於 := 之後的字符串會立即檢查未引用的  tilde-prefix。
       這種情況下,仍然會進行波浪線擴展。因此,可以使用帶波浪線的檔名來為
       PATH, MAILPATH, 和 CDPATH 賦Ashell 將賦予擴展之後的C

   Parameter Expansion
       字符    `$'     引入了參數擴展,命令替換和算術擴展。n擴展的參數名或符號
       可能包含在花括號中,花括號可選的,但是可以使得n擴展的變量不會與緊隨其後
       的字符合並,成為新的名稱。

       使用花括號的時唌A匹配的右括號是第一        `}',並且它沒有被反斜槓引用
       或包含在一茪犍峈漲r符串中,也沒有包含在一荋O入的算術擴展,命令替換
       或是參數擴展中。

       ${parameter}
              被替換為      parameter      的C如果      parameter      是一-
              茼鼽m參數,並且數字多於一位時;或者當緊隨              parameter
              之後有不屬於名稱一部分的字符時,都必須加上花括號。

       如果 parameter 的第一茼r符是一虓P嘆號,將引進一層間接變量。 bash 使用以
       parameter                       的其餘部分為名的變量的@為變量的名稱;
       接下來新的變量被擴展,它的峖b隨後的替換當中,而不是使用     parameter
       自赤瘓。這也稱為   indirect  expansion(間接擴展).   例外情況是下掄縐鴘
       ${!prefix*}。

       下悸漕C種情況中,word           都n經過波浪線擴展,參數擴展,命令替換和
       算術擴展。如果不進行子字符串擴展,bash         測試一茖S有定義或高讀
       參數;忽略冒號的結果是只測試未定義的參數。

       ${parameter:-word}
              Use   Default   Values(使用預設)。如果   parameter    未定義或-
              高禳A將替換為 word 的擴展。否則,將替換為 parameter 的C
       ${parameter:=word}
              Assign  Default  Values(賦預設)。如果 parameter 未定義或高禳A
              word      的擴展將賦予      parameter.       parameter       的-
              N被替換。位置參數和特殊參數不能用這種方式賦C
       ${parameter:?word}
              Display   Error   if   Null   or   Unset(顯示錯誤,如果未定義或-
              高)。如果  parameter  未定義或高禳Aword   (或一條信息,如果
              word            不存在)            的擴展將寫入到標準錯誤;shell
              如果不是交互的,則將退出。否則, parameter 的N被替換。
       ${parameter:+word}
              Use       Alternate       Value(使用可選)。如果       parameter
              未定義或非空,不會進行替換;否則將替換為 word 擴展後的C
       ${parameter:offset}
       ${parameter:offset:length}
              Substring   Expansion(子字符串擴展)。   擴展為parameter   的最多
              length     茼r符,從      offset      指定的字符開始。如果忽略了
              length,擴展為      parameter     的子字符串,     從     offset
              指定的字符串開始。lengthoffset   是算術表達式   (參見下悸
              ARITHMETIC EVALUATIONND 段落)。 length 必須是一茪j於等於 0
              的數C如果  offset  求痕G小於  0,  N當作從  parameter  的-
              漸膚擎滶_的偏移量。如果    parameter@,結果是   length
              茼鼽m參數,從 offset 開始。 如果 parameter 是一蚍捰W,以 @  或
              * 索引,結果是數組的 length 茼叔,從 ${parameter[offset]} 開始。
              子字符串的下標是從 0 開始的,除非使用位置參數時,下標從 1 開始。

       ${!prefix*}
              擴展為名稱以   prefix   開始的變量名,以特殊變量   IFS   的第一-
              茼r符分隔。

       ${#parameter}
              替換為  parameter  的漯曮  (字符數目)。如果  parameter*
              或者是    @,    替換的O位置參數的蚍C如果   parameter   是一-
              蚍捰W,下標是 * 或者是 @, 替換的O數組中元素的蚍C

       ${parameter#word}
       ${parameter##word}
              word        被擴展為一蚍狾﹛A就像路徑擴展中一樣。如果這蚍狾﹞t
              parameter   的滌_始,那麼擴展的結果是將   parameter  擴展後的-
              丑A最短的匹配  (``#''  的情況)  或者最長的匹配  (``##''的情況)
              刪除的結果。如果      parameter@     或者是     *,
              則模式刪除操作將依次施用於每-
              茼鼽m參數,最後擴展為結果的列表。如果       parameter      是一-
              蚍桲僆q,下標是 @ 或者是 *, 模式刪除將依次施用於數組中的每茼-
              ,最後擴展為結果的列表。

       ${parameter%word}
       ${parameter%%word}
              word        被擴展為一蚍狾﹛A就像路徑擴展中一樣。如果這蚍狾﹞t
              parameter     擴展後的漣應﹛A那麼擴展的結果是將      parameter
              擴展後的丑A最短的匹配     (``%''     的情況)    或者最長的匹配
              (``%%''的情況)  刪除的結果。如果  parameter@   或者是   *,
              則模式刪除操作將依次施用於每-
              茼鼽m參數,最後擴展為結果的列表。如果      parameter       是一-
              蚍桲僆q,下標是 @ 或者是 *, 模式刪除將依次施用於數組中的每茼-
              ,最後擴展為結果的列表。

       ${parameter/pattern/string}
       ${parameter//pattern/string}
              patterm           被擴展為一蚍狾﹛A就像路徑擴展中一樣。parameter
              被擴展,其仇怐曭漱t    pattern    的內容被替換為    string。
              在第一種形式中,只有第一茪t被替換。第二種形式使得      pattern
              中所有匹配都被替換為 string。 如果 pattern# 開始,它必須匹配
              parameter 擴展後  犖部。如果  pattern%  開始,它必須匹配
              parameter      擴展後漣應﹛C如果     string     是空Apattern
              的匹配都將被刪除, pattern 之後的 / 將被忽略。如果 parameter@          或者是          *,          則替換操作將依次施用於每-
              茼鼽m參數,最後擴展為結果的列表。如果      parameter       是一-
              蚍桲僆q,下標是 @ 或者是 *, 模式刪除將依次施用於數組中的每茼-
              ,最後擴展為結果的列表。

   Command Substitution
       命令替換    (Command    substitution)    允許以命令的輸出替換命令名。有
       兩種形式:

              $(command)
       還有
              `command`

       Bash                                               進行擴展的步驟是執行
       command,以它的標準輸出替換它,並且將所有後續的
       新行符刪除。內嵌的新行符不會刪除,但是它怚i能會在詞的拆分中被刪除。
       命令替換 $(cat file) 可以用等價但是更快的方法 $(< file) 代替。

       當使用舊式的反引號 ("``")  替換形式時,反斜槓只有其字捧N義,除非  後惇O
       $,   `,   或者是  \.   第一茷e惆S有反斜槓的反引號將結束命令替換。當使用
       $(command) 形式時,括號中所有字符組成了整茤R令;沒有被特殊處理的字符。

       命令替換可以嵌套。n在使用反引號形式時嵌套,可以用反斜槓來轉義內層的
       反引號。

       如果替換發生在雙引號之中,結果將不進行詞的拆分和路徑擴展。

   Arithmetic Expansion
       算術擴展允許算術表達式的求M結果的替換。算術擴展的格式是:

              $((expression))

       表達式                                                       expression
       被視為如同在雙引號之中一樣,但是括號中的雙引號不會被特殊處理。
       表達式中所有詞都經過了參數擴展,字符串擴展,命令替換和引用的刪除。
       算術替換可以嵌套。

       求睅琱U         ND           (ARITHMETIC           EVALUATION)
       章節中列出的規則進行。如果表達式       expression      非法,      bash
       輸出錯誤提示消息,不會進行替換。

   Process Substitution
       Process   substitution    (進程替換)    只有在支持命名管道    (FIFOs),
       或者支持使用  /dev/fd  方式為打開的檔案命名的系統中才可用。  它的形式是
       <(list) 或者是 >(list)。 進程 list  運行時的輸入或輸出被連接到一  FIFO
       或者                 /dev/fd                中的檔案。檔案的名稱作為一-
       荌捊Q傳遞到當前命令,作為擴展的結果。        如果使用         >(list)
       形式,向檔案寫入相當於為      list      提供輸入。如果使用      <(list)
       形式,可以讀作為參數傳遞 的檔案來獲得 list 的輸出。

       如果可能的話,進程替換是與參數和變量擴展,命令替換和算術擴展同時發生的。

   Word Splitting
       shell    檢測不在雙引號引用中發生的參數擴展,命令替換和算術擴展的結果,
       進行 word splitting(詞的拆分)。

       shell                  將                   IFS                   的每-
       茼r符都作為定界符,根據這些字符來將其他擴展的結果分成詞。如果       IFS
       沒有定義,或者它的O預設的     <space><tab><newline>,     那麼     IFS
       字符的任何序列都將作為分界之用。如果        IFS        的O預設之外的-
       A那麼詞開頭和結尾的空白字符 spacetab  都將被忽略,只n空白字符在
       IFS  的坐  (即,  IFS  包含空白字符)。  任何在  IFS 之中但是不是 IFS
       空白的字符,以及任何相鄰的    IFS    空白字符,將字段分隔開來。     IFS
       空白字符的序列也被作為分界符。如果 IFS 的O空,不會發生詞的拆分。

       顯式給出的空捊   (""'')  將被保留。  隱含的空捊A來自於空-
       滌捊X展,如果沒有引用則將被刪除。                           如果空-
       滌捊b雙引號引用中擴展,結果是空滌捊A將被保留。

       注意如果沒有發生擴展,不會進行詞的拆分。

   Pathname Expansion
       詞的拆分之後,除非設置過 -f 選項, bash 搜索每茧,尋找字符 *, ?, 和 [.
       如果找到了其中之一,那麼這茧被當作一 pattern(模式),  被替換為匹配這-
       蚍狾〞瑰犰W以字母順序排列的列表。如果沒有找到匹配的檔名,   並且  shell
       禁用了    nullglob     選項,這茧將不發生變化。如果設置了     nullglob
       選項並且沒有找到匹配,這茧將被刪除。如果啟用了              nocaseglob
       選項,匹配時將不考慮字母的大小寫。當模式用作路徑名擴展時,字符    ``.''
       如果在一茼W稱的開始或者緊隨一-
       荓袟b之後,那麼它必須被顯式地匹配,除非設置了       dotglob       shell
       選項。當匹配一虒纁|名時,斜槓符必須被顯式地匹配。其他情況下,字符 ``.''
       不會被特殊對待。參見下悸 shellRO(SHELL BUILTIN  COMMANDS)  中對
       shopt  的介紹,其中有 shell 選項 nocaseglob, nullglob, 和 dotglob 的描-
       z。

       環境變量  GLOBIGNORE  可以用來制匹配   pattern   的檔名集合。如果設置了
       GLOBIGNOREGLOBIGNORE      中任何一-
       蚍狾〞爾亃N從匹配的列表中刪除。檔名       ``.''``..''
       總是被忽略,即使設置了  GLOBIGNOREGLOBIGNORE 和啟用 shell
       選項 dotglob 效果是相同的,因此所有其他以 ``.''   開頭的檔名將被匹配。-
       n得到鴩茠漲甈  (忽略所有以  ``.''   開頭的檔名),可以將 ``.*''  添加為
       GLOBIGNORE    的模式之一。選項    dotglob    被禁用,如果    GLOBIGNORE
       沒有定義時。

       Pattern Matching

       任何模式中出現的字符,除了下探yz的特殊模式字符外,都匹配它本芋C
       模式中不能出現 NUL 字符。如果n匹配字惜W的特殊模式字符,它必須被引用。

       特殊模式字符有下z意義:

       *      匹配任何字符串包含空串。
       ?      匹配任何單茼r符。
       [...]  匹配所包含的任何字符之一。用一茬s字符                      (`-')
              分隔的一對字符意思是一     range    expression    (S圍表達式);
              任何排在它怳孜〞漲r符,包含它怴A都被匹配。
              排序使用當前語言環境的字符順序和字符集。如果    [    之後的第一-
              茼r符是一  !   或是一  ^   那麼任何不包含在內的字符將被匹配。-
              S圍表達式中字符的順序是由當前語言環境  和環境變量 LC_COLLATE 的
              (如果設置了的話)  決定的。一   -   只有作為集合中第一茤帠怮嶀@-
              茼r符時才能被匹配。一 ] 只有是集合中第一茼r符時才能被匹配。

              在  []  中,character  classes  (字符類)  可以用 [:class:]
              這樣的語法來指定,這裏        class         是在         POSIX.2
              標準中定義的下列類名之一:
              alnum  alpha  ascii  blank  cntrl  digit graph lower print punct
              space upper word xdigit
              一茼r符類匹配任何屬於這一類的字符。word
              字符類匹配字母,數字和字符 _。

              在  [] 中,可以用 [=c=] 這樣的語法來指定 equivalence class
              (等價類)。它匹配與字符 c 有相同歸並權 (collation weight,由當前
              語言環境定義) 的字符。

              在  [] 中,語法 [.symbol.] 匹配歸並符號 (collating symbol)
              symbol。

       如果使用內建命令     shopt     啟用了     shell     選項      extglob,
       將識別另外幾種模式匹配操作符。下悸煽yz中,pattern-list    是一   或多-
       蚍狾‘H | 分隔的列表。復合的模式可以使用一茤峖h茪U列的 子模式構造出來:

              ?(pattern-list)
                     匹配所給模式零次或一次出現
              *(pattern-list)
                     匹配所給模式零次或多次出現
              +(pattern-list)
                     匹配所給模式一次或多次出現
              @(pattern-list)
                     準確匹配所給模式之一
              !(pattern-list)
                     任何除了匹配所給模式之一的字串

   Quote Removal
       經過前悸甄X展之後,所有未引用的字符  \,  ', 以及並非上z擴展結果的字符 "
       都被刪除。

wV(REDIRECTION)
       在命令執行前,它的輸入和輸出可能被 redirected (wV)A 使用一種  shell
       可以解釋的特殊記法。咿w向也可以用於為當前         shell        執行環境
       打開和關閉檔案。下列咿w向操作符可以前置或者放在     simple      command
       (RO)        之中的任何位置,或者放在        command       之後。-
       咿w向是以出現的順序進行處理的,從左到右。

       下列描z中,如果檔案描z符被忽略,並且第一茷定向操作符是     <,     那麼-
       咿w向指的是標準輸入  (檔案描z符是  0)。如果咿w向操作符的第一茼r符是  >,
       那麼咿w向指的是標準輸出 (檔案描z符是 1)。

       下列描z中,咿w向操作符之後的詞如果沒有特殊說明,都n經過           brace
       expansion,  tilde expansion, parameter expansion, command substitution,
       arithmetic expansion, quote  removal,  pathname  expansion,  還有  word
       splitting。如果擴展為多於一茧, bash 將報錯。

       注意咿w向的順序非常南。例如,命令

              ls > dirlist 2>&1

       將標準輸出和標準錯誤咿w向到檔案 dirlist, 而命令

              ls 2>&1 > dirlist

       只會將標準輸出咿w向到檔案  dirlist, 因為在標準輸出被咿w向到檔案 dirlist
       中之前,標準錯誤被複製為標準輸出。

       一些檔名在咿w向中被 bash 特殊處理,如下表所示:

              /dev/fd/fd
                     如果 fd 是一茼X法的整數,檔案描z符 fd 將被複製。
              /dev/stdin
                     檔案描z符 0 被複製。
              /dev/stdout
                     檔案描z符 1 被複製。
              /dev/stderr
                     檔案描z符 2 被複製。
              /dev/tcp/host/port
                     如果 host 是一茼X法的主機名或 Internet 地址,並且 port 是
                     一蚞蒱搕f號或服務名,bash    試圖建立與相應的    socket
                     (套接字) 的 TCP 連接。
              /dev/udp/host/port
                     如果 host 是一茼X法的主機名或 Internet 地址,並且 port 是
                     一蚞蒱搕f號或服務名,bash    試圖建立與相應的    socket
                     (套接字) 的 UDP 連接。

       打開或創建檔案錯誤將導P咿w向出錯。

   Redirecting Input
       咿w向輸入使得以    word    擴展結果為名的檔案被打開並通過檔案描z符    n
       讀取,如果沒有指定 n 那麼就作為標準輸入 (檔案描z符為 0) 讀取。

       咿w向輸入的一般形式是:

              [n]<word

   Redirecting Output
       咿w向輸出使得以    word    擴展結果為名的檔案被打開並通過檔案描z符    n
       寫入,如果沒有指定 n 那麼就作為標準輸出 (檔案描z符為 1) 寫入。

       咿w向的一般形式是:

              [n]>word

       如果咿w向操作符是   >,    並且啟用了內建命令    setnoclobber
       選項,那麼如果      word      擴展後得到的檔名存在並且是一荋雲q的檔案,
       咿w向將失敗。如果咿w向操作符是      >|,       或者咿w向操作符是       >
       並且沒有啟用內建命令    setnoclobber    選項,那麼即使   word
       得出的檔名存在,也會嘗試進行咿w向。

   Appending Redirected Output ()
       這種方式的輸出咿w向使得以 word  擴展結果為名的檔案被打開並通過檔案描z符
       n      從尾部添加。如果沒有指定     n     就使用標準輸出     (檔案描z符
       1)。如果檔案不存在,它將被創建。

       咿w向的一般形式是:

              [n]>>word

   Redirecting Standard Output and Standard Error
       Bash 允許使用這種結構將標準輸出和標準錯誤 (檔案描z符 1 和 2)  咿w向到以
       word 擴展結果為名的檔案中。

       有兩種咿w向標準輸出/標準錯誤的形式:

              &>word
       還有
              >&word

       兩種形式中,推薦使用第一種。它與

              >word 2>&1
       在語義上等價。

   Here Documents
       這種咿w向使得  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 中的所有行都n經過
       parameter  expansion,  command  substitution, 和 arithmetic expansion。
       在後一種情況下,字符序列 \<newline> 被忽略;必須用 \ 來引用字符  \,  $,
       和 `.

       如果咿w向操作符是   <<-,   那麼所有前導的   tab  字符都被從輸入行和包含
       delimiter    的行中刪除。這樣使得    shell    稿本中的    here-document
       可以被更好地縮進。

   Here Strings
       here-document 的變種,形式是

              <<<word

       word 被擴展,提供給命令作為標準輸入。

   Duplicating File Descriptors (z)
       咿w向操作符

              [n]<&word

       用於複製檔案描z符。如果   word   擴展為一茤峖h蚍r,  n  代表的檔案描-
       z符將成為那蚗仵袨yz符的複製。如果       word        中的數字並未指定一-
       茬Q用於讀取的檔案描z符,將產生一茷定向錯誤。如果 word 擴展為 -, 檔案描-
       z符 n 將被關閉。如果沒有指定 nA 將使用標準輸入 (檔案描z符 0)。

       類似的,操作符

              [n]>&word

       用於複製輸出檔案描z符。如果沒有指定   nA   將使用標準輸出   (檔案描z符
       1)。如果    word   中的數字並未指定一茬Q用於輸出的檔案描z符,將產生一-
       咿w向錯誤。  特殊情況下,如果忽略了  n,並且  word   並非擴展為一茤峖h-
       蚍r, 標準輸出和標準錯誤將被咿w向,和前探yz的一樣。

   Moving File Descriptors
       咿w向操作符

              [n]<&digit-

       將檔案描z符    digit    移動為檔案描z符    n,   或標準輸入   (檔案描z符
       0),如果沒有指定 n 的話。 digit 複製為 n 之後就被關閉了。

       類似的,咿w向操作符

              [n]>&digit-

       將檔案描z符   digit   移動為檔案描z符    n,    或標準輸出    (檔案描z符
       1),如果沒有指定 n 的話。

   Opening File Descriptors for Reading and Writing
       咿w向操作符

              [n]<>word

       使得以       word       擴展結果為名的檔案被打開,通過檔案描z符       n
       進行讀寫。如果沒有指定              n               那麼就使用檔案描z符
       0。如果檔案不存在,它將被創建。

OW(ALIASES)
       Aliases     (別名機制)    允許將一茧來替換為一茼r符串,如果它是    一-
       蚋眾璈R令的第一茧的話。shell   記錄著一荍O名列表,可以使用    內建命令
       aliasunalias 來定義和取消 (參見下悸 shellRO(SHELL BUILTIN
       COMMANDS)    章節)。每茤R令的第一茧,如果沒有引用,都將被檢查是否是一-
       荍O名。                                                     如果是,這-
       茧將被它所指代的文本替換。別名和替換的文本可以包含任何有效  的   shell
       輸入,包含上惘C出的  metacharacters (r) ,特殊情況是別名中不能包含
       =。替換文本的第一茧也被檢查是否
       是別名,但是如果它與被替換的別名相同,就不會再替換第二次。這意味著可以用
       ls 作為 ls -F 的別名,  bash  不會遞歸地展開替換文本。如果別名的最後一-
       茼r符是                 blank,                那麼命令中別名之後的下一-
       茧也將被檢查是否能進行別名展開。

       別名可以使用 alias 命令來創建或列舉出來,使用 unalias 命令來刪除。

       在替換文本中沒有參數機制。如果需n參數,應當使用 shell  函數  (參見下悸
       FUNCTIONS () 段落)。

       如果  shell  不是交互的,別名將不會展開,除非使用內建命令  shopt 設置了
       expand_aliases 選項。

       關於別名的定義和使用中的規則比較混亂。                             Bash
       在執行一行中的任何命令之前,總是讀入至少完整一行的輸入。
       別名在命令被讀取時展開,而不是在執行的時唌C因此,別名定義如果   和另一-
       茤R令在同一行,那麼不會起作用,除非讀入了下一行。
       別名定義之後,同一行中的命令不會受新的別名影響。這種行為
       在函數執行時存在爭議,因為別名替換是在函數定義被讀取時發生的,
       而不是函數被執行的時唌A因為函數定義本足O一荋_合命令。結果,
       在函數中定義的別名只有當這茖蝻鶡瑽馱~會生效。為了保險起見,
       應當總是將別名定義放在單獨的一行,不在復合命令中使用 alias(FUNCTIONS)
       一       shell       函數,以上       SHELL       GRAMMAR       中描-
       z的方法定義,保存著一系列的命令,等待稍後執行。  當 shell 函數名作為一-
       蚋眾璈R令名使用時,這茖蝻W關聯的命令的序列  被執行。函數在當前  shell
       的上下文環境中執行;不會創建新的進程來      解釋它     (這與     shell
       稿本的執行形成了對比)。當執行函數時,函數
       的參數成為執行過程中的位置參數   (positional   parameters)。特殊參數  #
       被更新以反映這蚥雂C位置參數   0    不會改變。函數執行時,    FUNCNAME
       變量被設置為函數的名稱。函數和它的調用者在 shell 執行環境的所有 其他方-
       掖ㄛO一樣的,特殊情況是 DEBUG 陷阱  (參見下措鴾澈堥蝻  trap  的描z,在
       shell       RO(SHELL       BUILTIN       COMMANDS)       章節中)
       不會被繼承,除非函數設置了 trace 屬性 (參見下措鴾澈堥蝻 declare  的描-
       z)。

       函數中的局部變量可以使用內建命令 local 來聲明。通常情況下,變量和它怐-
       b函數和它的調用者之間是共享的。

       如果函數中執行了內建命令                                       return# 都將姜m為它怞b函數執行前的C

       函數名和定義可以使用內建命令    declaretypeset    加上     -f
       參數來列出。如果在     declaretypeset     命令中使用     -F
       選項將只列出函數名。函數可以使用內建命令      export      加上       -f
       參數導出,使得子 shell 中它抭Q自動定義。

       函數可以是遞歸的。對於遞歸調用的次數沒有硬性制。

ND("ARITHMETIC EVALUATION")
       在一定的環境下,shell   允許進行算術表達式的求  (參見內建命令  letArithmetic           Expansion           (算術表達式))。            求-
       洏峏T定寬度的整數,不檢查是否溢出,但是被零除會被捕獲,標記為錯誤。
       操作數及其優先級和聚合程度與   C   語言中相同。下列操作數的列表按照相同
       優先級的操作數其級別來分組。列出的級別順序是優先級遞減的。

       id++ id--
              變量自增/自減 (在後)
       ++id --id
              變量自增/自減 (在前)
       - +    (單目的) 取t/取正
       ! ~    邏輯和位取反
       *** / %  慼A除,取餘
       + -    加,減
       << >>  左/右位移
       <= >= < >
              比較
       == !=  相等/不等
       &      位與 (AND)
       ^      位異或 (exclusive OR)
       |      位或 (OR)
       &&     邏輯與 (AND)
       ||     邏輯或 (OR)
       expr?expr:expr
              條件求
       = *= /= %= += -= <<= >>= &= ^= |=expr1 , expr2
              逗號表達式

       shell               變量可以作為操作數;在表達式求妨e會進行參數擴展。
       在表達式中,可以用名稱引用     shell     變量,不必使用參數擴展的語法。
       變量被引用時,其Q作為算術表達式來求C                          shell
       變量用於表達式中時,不必啟用整數屬性。

       以 0 為前導的常量被當作八進制數,以 0x 或  0X  作為前導表明是十六進制。
       其他情況下,數字的形式是  [base#]n,這裏 base 是一 2 到 64 的十進制數-
       A作為數字的基數,n 是在這荌羆兮r的C 如果忽略了  base#,將以  10
       為基數。大於 10 的數字依次以小寫字母, 大寫字母,@ 和 _ 表示。如果 base
       小於或等於        36,在表示        10        與        35         之間
       的數字時小寫字母和大寫字母可以互換。

       操作符根據優先級順序進行求C圓括號中的子表達式被最先求A可能會
       超越上悸瑰u先級規則。

F("CONDITIONAL EXPRESSIONS")
       條件表達式用於    [[    復合命令以及內建命令    test[    中,
       用來測試檔案屬性,進行字符串和算術比較。表達式使用下-
       悸熙璆堜峇G進制操作構造。    如果某操作的任何     file     參數的形式是
       /dev/fd/n,那麼將檢查    檔案描z符    n。如果某操作的    file    參數是
       /dev/stdin/dev/stdout  或者  /dev/stderr  之一,將分別檢查檔案描z符
       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 存在且是一茤R名管道 (FIFO) 則為真。
       -r file
              如果 file 存在且可讀則為真。
       -s file
              如果 file 存在且大小大於零則為真。
       -t fd  如果檔案描z符 fd 是打開的且對應一茞袟搦h為真。
       -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 存在且上次讀取後被蚹儮L則為真。
       file1 -nt file2
              如果  file1file2 n新 (根據蚹鴾暾),或者 如果 file1 存在而
              file2 不存在,則為真。
       file1 -ot file2
              如果  file1file2  更舊,或者  如果  file1  不存在而  file2
              存在,則為真。
       file1 -ef file2
              如果 file1file2 指的是相同的設備和 inode 號則為真。
       -o optname
              如果啟用了  shell  選項 optname 則為真。參見下措鴾澈堜R令 set-o 選項的描z中的選項列表。
       -z string
              如果 string 的長度為 0 則為真。
       -n string
       string 如果 string 的長度非 0 則為真。
       string1 == string2
              如果字符串相等則為真。=  可以用於使用  ==   的場合來相容   POSIX
              規範。
       string1 != string2
              如果字符串不相等則為真。
       string1 < string2
              如果 string1 在當前語言環境的字典順序中排在 string2 之前則為真。
       string1 > string2
              如果 string1 在當前語言環境的字典順序中排在 string2 之後則為真。
       arg1 OP arg2
              OP-eq,     -ne,    -lt,    -le,    -gt,    或    -ge
              之一。這些算術二進制操作返回真,如果   arg1arg2   分別是
              相等,不等,小於,小於或等於,大於,大於或等於關系。   Arg1arg2 可以是正/t整數。

ROXi("SIMPLE COMMAND EXPANSION")
       當執行一蚋眾璈R令時,shell 進行下列擴展,賦M咿w向,從左到右。

       1.     解釋器標記為與變量賦            (在命令名之前的)            和-
              咿w向有關的詞被保存等待隨後處理。

       2.     並非變量賦峆定向的詞被擴展。如果擴展後仍然有詞保留下來,第一-
              茧被 作為命令名,其餘詞是參數。

       3.     咿w向按照上 REDIRECTION 中講到的規則進行。

       4.     每蚥僆q賦     =     之後的文本在賦予變量之前n經過波浪線擴展,
              參數擴展,命令替換,算術擴展和引用刪除。

       如果沒有得到命令名,變量賦v響當前     shell    環境。否則,變量被加入
       被執行的命令的環境中,不影響當前    shell     環境。如果任何賦囮@試圖
       為只讀變量賦A將導P出錯,命令以非零狀態h出。

       如果沒有得到命令名,咿w向仍會進行,但是不影響當前      shell     環境。
       咿w向出錯將使命令以非零狀態h出。

       如果擴展後有命令名保留下來,那麼執行過程如下所示。否則,命令退出。
       如果在任何擴展中包含命令替換,那麼整茤R令的退出狀態是最後一茤R令
       替換的退出狀態。如果沒有進行命令替換,命令以狀態零退出。

RO(COMMAND EXECUTION)
       命令被拆分為詞之後,如果結果是一蚋眾璈R令和可選的參數列表,將執行   下-
       悸瑣犑@。

       如果命令名中沒有斜槓,shell    試圖定位命令位置。如果存在同名的   shell
       函數,函數將被執行,像上    FUNCTIONS    中講到的一樣。如果名稱不是一-
       茖蝻Ashell 從 內建命令中搜索它。如果找到 對應命令,它將被執行。

       如果名稱既不是   shell  函數也不是一茪澈堜R令,並且沒有包含斜槓,  bash
       搜索   PATH   的每茼叔,查找含有此檔名   (可執行檔案)   的目錄。   Bash
       使用散列表來儲存可執行檔案的全路徑   (參見下悸   shell RO(SHELL
       BUILTIN COMMANDS) 中的 hashPATH
       進行完整的搜索。如果搜索不成功,shell 輸出錯誤消息,返回退出狀態 127。

       如果搜索成功,或者命令中包含一茤峖h荓袟b,shell      在單獨的執行環境中
       執行這茧{式。參數                                                     0
       被設置為所給名稱;命令的其他參數被設置為所給的參數, 如果有的話。

       如果執行失敗,因為檔案不是可執行格式,並且此檔案不是目錄,就假定它是
       一 shell script (稿本),一茈]含 shell  命令的檔案。此時將孵化  (spawn)
       出一茪l  shell  來執行它。子 shell 奐s初始化自芋A效果就好像是 執行了一-
       虓s的  shell  來處理稿本一樣,但是父  shell  保存的命令位置仍然被  保留
       (參見下悸 shellRO(SHELL BUILTIN COMMANDS) 中的 hash)#!        開頭的檔案,那麼第一行的其餘部分指定了這-
       茧{式的解釋器。                                                   shell
       執行指定的解釋器,如果作業系統不會自行處理這種可執行檔案格式的話。
       解釋器的參數由下惜T部分組成:程式第一行中解釋器名稱之後的可選的一-
       荌捊A 程式的名稱,命令行參數,如果有的話。

RO(COMMAND EXECUTION ENVIRONMENT)
       shell 有 execution environment (執行環境) 的概念,由下列內容組成:

       o      shell  啟動時繼承的打開的檔案,例如在內建命令  exec  中使用咿w向
              蚹麊熊痕G

       o      當前工作目錄,使用  cdpushd  或者  popd   設置,或是由   shell
              在啟動時繼承得到

       o      檔案創建模式掩碼,使用 umask 設置或是從 shell 的父進程中繼承得到

       o      當前陷阱,用 trap 設置

       o      shell                 參數,使用變量賦峈                  set
              設置,或者是從父進程的環境中繼承得到

       o      shell 函數,在執行中定義或者是從父進程的環境中繼承得到

       o      設為允許的選項,在執行時設置                 (n麼是預設允許的,-
              n麼是命令行給出的) 或者是 用 set 設置

       o      用 shopt 設為允許的選項

       o      用 alias 定義的 shell 別名

       o      各種進程號,包含I景作業的進程號,$$ 的A以及 $PPID 的

       當並非   shell   函數或內置命令的簡單命令執行時,它在一茈悀Uz內容組成的
       單獨的執行環境中啟動。除非另外說明,ㄛO從 shell 中繼承的。

       o      shell 打開的檔案,加上對命令使用咿w向蚹鴭M添加的檔案

       o      當前工作目錄

       o      檔案創建模式掩碼

       o      標記為導出   (export)   的   shell   變量,以及傳遞到環境中為這-
              茤R令導出的變量

       o      shell   捕捉的陷阱被姜m為從    shell    的父進程中繼承的Ashell
              忽略的陷阱 也被忽略

       在單獨的環境中啟動的命令不能影響 shell 的執行環境。

       命令替換和異步命令都在子  shell  環境中執行。子  shell  環境是鴞 shell
       環境的賦A但 shell 捕捉的陷阱被姜m為  shell  啟動時從父進程中繼承的C
       作為管道一部分來執行的內建命令也在一茪l  shell  環境中執行。對子  shell
       環境所作蚹鴾ㄞ鉏v響到鴞 shell 的執行環境。

       如果命令後惇O   &    並且沒有啟用作業控制,命令的預設標準輸入將是空檔案
       /dev/null。否則,被執行的命令從調用它的     shell    中繼承被咿w向蚹麊
       檔案描z符。

(ENVIRONMENT)
       當一茧{式執行時,它被賦予一茼r符串數組,成為環境 environment。  它是一
       名稱- (name-value) 的列表,形式是 name=value.

       shell  提供了多種操作環境的方法。啟動時,shell 掃描自赤瑰藿牷A為每荍鋮
       的名字創建一荌捊A自動地將它標記為                              export
       (向子進程導出的)。被執行的命令繼承了這蚗藿牷C   exportdeclare  -x
       命令允許參數和函數被加入到環境中或從環境中刪除。如果環境中參數的   被-
       蚹鵅A新足偯藿猁漱@部分,替換了舊C所有被執行的命令繼承的環境    包含
       shell  的初始環境  (可能Q蚹儮L),減去被  unset   命令刪除的,加上通過
       exportdeclare -x 命令添加的部分。

       可以在任何    simple    command   或函數的環境中設定暫時有效的參數,只-
       n將參數賦韘b命令前探N可以了,   參見上   PARAMETERS   的描z。這些賦-
       y句只在這茤R令的環境中有效。

       如果設置了內建命令     set-k    選項,        變量賦-
       ㄠN放到命令的環境中,不僅是在命令名前悸漕漕C

       當             bash              執行一茈~部命令時,變量              _
       被設置為命令的檔案全名,然後被傳遞到命令的環境之中。

hXA("EXIT STATUS")
       從  shell  的角度看,一茤R令退出狀態是  0 意味著成功退出。 退出狀態是 0
       表明成功。非零狀態磼失敗。當命令收到  fatal  signal  N  退出時,bash
       使用 128+N 作為它的退出狀態。

       如果沒有找到命令,為執行它而創建的子進程返回    127。如果找到了命令但是
       檔案不可執行,返回狀態是 126。

       如果命令由於擴展或咿w向錯誤而失敗,退出狀態大於零。

       shell  內建命令如果成功返回   0(true),執行時出錯則返回非零   (false)。
       所有內建命令返回 2 來指示不正確的用法。

       Bash              自赤藀^最後執行的命令的退出狀態,除非發生了語法錯誤,
       這時它返回非零C參見下悸漱澈堜R令 exit。

H(SIGNALS)
       如果  bash  是交互的,沒有設定任何陷阱,它忽略  SIGTERM  (這樣  kill  0
       不會殺掉交互的   shell)。   SIGINT  被捕獲並處理  (從而使內建命令  wait
       可以中斷)。在所有情況下, bash  忽略  SIGQUIT。  如果正在使用作業控制,
       bash 忽略 SIGTTIN, SIGTTOU, 和 SIGTSTP.

       bash   開始的並行作業的信號處理句柄都設置為  shell  從父進程中繼承  的-
       C如果不是正在使用作業控制,異步命令還忽略  SIGINTSIGQUIT  C
       作為命令替換結果運行的命令忽略鍵盤產生的作業控制信號  SIGTTIN, SIGTTOU,
       和 SIGTSTP.

       如果收到信號   SIGHUPSIGHUP  信號。shell  向停止的作業發出
       SIGCONT      信號來保証它抪|收到       SIGHUP.        n阻止       shell
       向特定的作業發送信號,應當使用內建命令    disown   將作業從作業表中刪除
       (參見下悸 shellRO(SHELL BUILTIN COMMANDS) 章節) 或者使用 disown
       -h 來標記為不接受 SIGHUPshopt 設置了 shell 選項 huponexitbash 向所有作業發出 SIGHUP 信號。

       當  bash  等待命令執行結束時,如果收到已設置了陷阱的信號,陷阱   (trap)
       將不會執行,直到命令結束。      當      bash      通過內建命令     wait
       等待異步命令時,如果收到已設置    了陷阱的信號,將使得內建命令     wait
       立即以大於 128 的狀態藀^。 接著,陷阱將立即被執行。

@~("JOB CONTROL")
       Job     control     (作業控制)    指的是可以選擇停止    (suspend,掛起)
       進程執行,並且              可以在之後繼續               (resume,恢復)
       執行的能力。使用者一般在交互的人機界               中使用這種功能。界-
       惇O由系統的終端驅動和 bash 共同提供的。

       shell 將每蚨瑐D分配給一 @~(job)C  它保存一虓礅e運行的作業表,可以用
       jobs  命令來列出。當  bash  啟動一茞夾B的作業時 (backgroundAI)A
       它輸出這樣的一行:

              [1] 25647

       表明這荍@業的作業號是   1,與作業相關連的管道中最後一荈i程的   進程ID是
       15647。管道中所有進程都是同一荍@業的成。     Bash    使用    @~(job)
       概念作為作業控制的基礎。

       為簡化作業控制的使用者界悸犒窶{,作業系統t責管理「當前終端的進程組」
       (current  terminal  process group ID) 的概念。這荈i程組的成 (進程組 ID
       是當前終端進程組  ID   的進程)   可以收到鍵盤產生的信號,例如   SIGINT.
       這些進程被稱為 foreground(前台的)。 Background (I) 進程是那些進程組
       ID                   與終端不同的進程;這些進程不會收到鍵盤產生的信號。
       只有前台進程可以從終端讀或向終端寫。-
       I景進程試圖讀/寫終端時,將收到終端驅動程式發送的   SIGTTIN    (SIGTTOU)
       信號。這茷H號如果沒有加以捕捉,將掛起這荈i程。

       如果         bash         運行其上的作業系統支持作業控制,         bash
       會包含使用它的設施。在一荈i程正在運行的時埡鉹J   suspend       字符
       (通常是   ^Z,   Control-Z)  將使這荈i程暫停,將控制權還給  bash.   輸入
       delayed  suspend  ,    字符  (通常是  ^Y,  Control-Y)   將使這-
       荈i程在試圖從終端讀取輸入時暫停,將控制權還給                     bash.
       使用者接下來可以控制此作業的狀態,使用  bg  命令使它在I景繼續運行,  fg
       命令使它在前台繼續運行,或             kill            命令將它殺死。^Z
       會立即起作用,並且還有使等待中的                              (pending)
       輸出和輸入被忽略的附加副作用。

       有很多方法來指代   shell   中的作業。字符  %  可以引入作業名。編號為  n
       的作業可以用                                                         %n
       的形式來指代。作業也可以用啟動它的名稱的前綴,或者命令行中的子字符串來指代。例如,
       %ce 指代一蚍悸 ce 作業。如果前綴匹配多於一荍@業, bash 報錯。另一方-
       情A使用         %?ce,         可以指代任何命令行中包含字符串         ce
       的作業。如果子字符串匹配多於一荍@業, bash 報錯。符號  %%%+  指代
       shell   意義上的   current   job,當前作業,  也就是前台被暫停的最後一-
       荍@業,或者是在I景啟動的作業。  previous  job  Ae@@~  可以使用  %-
       來指代。在有關作業的輸出信息中             (例如,命令             jobs
       的輸出),當前作業總是被標記為 +, 前一作業標記為 -.

       簡單地給出作業名,可以用來把它放到前台:    %1``fg     %1''
       的同義詞,將作業 1 從I景放到前台。類似的, ``%1 &'' 在I景恢復作業 1,與
       ``bg %1'' 等價。

       當某荍@業改變狀態時,shell 立即可以得知。通常,  bash  等待直到n輸出一-
       荋ㄔ亄躓氶A才會報告作業的狀態變化,從而不會打斷其他輸出。
       如果啟用了內建命令 set-b 選項, bash 將立即報告這些變化。對 SIGCHLD
       信號的陷阱將在每茪l進程退出時執行。

       如果在作業暫停時試圖退出   bashjobs
       可能被用來檢查作業的狀態。如果再次試圖退出,中間沒有其他命令,shell
       不會列印 其他警告,暫停的作業將終止。

(PROMPTING)
       在交互執行時,   bash  在準備好讀入一條命令時顯示主提示符  PS1PS2Bash
       允許通過插入一些反斜槓轉義的特殊字符來定制這些提示字符串,這些字符被如下解釋:
              \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 的基本部分 (最後一荓袟b後悸熙﹞)
              \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 的字符
              \\     一茪炱袟b
              \[     一-
                     茪ㄔi列印字符序列的開始,可以用於在提示符中嵌入終端控制序列
              \]     一茪ㄔi列印字符序列的結束

       命令編號和歷史編號通常是不同的:歷史編號是命令在歷史列表中的位置,可能
       包含從歷史檔案中恢復的命令        (參見下悸        HISTORY       v
       章節),而命令編號是當前    shell   會話中執行的命令序列中,命令的位置。
       字符串被解碼之後,它將進行擴展,n經過  parameter   expansion,   command
       substitution,  arithmetic  expansion  和 quote removal, 最後n經過 shell
       選項 promptvars 處理 (參見下悸 shellRO(SHELL BUILTIN  COMMANDS)
       章節中,對命令 shopt 的描z)。

readline(READLINE)
       這是在交互    shell   中處理讀取輸入的庫,除非在   shell   啟動時給出了
       --noediting          選項。預設情況下,行編輯命令類似於           emacs
       中的那些。也可以使用      vi      樣式的行編輯界情C      n在      shell
       運行之後關閉行編輯,使用內置命令 set+o emacs+o vi 選項 (參見下-
       悸 shellRO(SHELL BUILTIN COMMANDS) 章節)。

   Readline Notation
       在這茪p節中,將使用   emacs  樣式的記法來表z按鍵。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), 一般作為契_的p數。有些時-
       唌A它是南參數的標記。給向前方進行的命令     (例如,kill-line)     傳遞-
       t數參數,將使得命令向反方向進行。                                   下-
       悸漫R令如果接受參數時的行為與此不同,將另行說明。

       當命令被描z為剪切  (killing)   文本時,被刪除的文本被保存,等待將來使用
       (粘貼,yanking)。被剪切的文本保存在    kill   ring   中。連續的剪切使得
       文本被依次加入到一茬璊舅丑A可以一次被粘貼。不剪切文本的命令將 kill ring
       中的文本分離。

   Readline Initializationl化
       readline    可以通過將命令放入初始化檔案    (inputrc   檔案)   來定制。
       檔名從變量 INPUTRC  的分簳。如果沒有設置這蚥僆q,預設是  ~/.inputrc.
       當使用                                                         readline
       庫的程式啟動時,將讀取初始化檔案,按鍵關聯和變量將被設置。     readline
       初始化檔案中只允許有很少的基本構造。          空行被忽略。以          #
       開始的行是注釋。以            $            開始的行指示了有條件的構造。
       其他行表示按鍵關聯和變量設置。

       預設的按鍵關聯可以使用 inputrc 檔案改變。其他使用這荇w的程式可以添加它-
       怞菑v的命令和關聯。

       例如,將

              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             允許將按鍵與一茼r符串關聯,當按下這-
       蚆銈氶A將插入這茼r符串 (一荍說Amacro)。

   Readline Key Bindings
       inputrc                         檔案中的控制按鍵關聯的語法非常簡單。需-
       n的內容是命令名或宏,以及它應當關聯到的按鍵序列。
       名稱可以以兩種方式指定:一茷鶬銂熔顫髡W稱,可能帶有 Meta-Control-
       前綴,或者是一茷鶬銣C。

       當使用   keyname:function-namemacro  形式時,  keyname  是按鍵以-
       ^文拼寫的名稱。例如:

              Control-u: universal-argument
              Meta-Rubout: backward-kill-word
              Control-o: "> output"

       在上z例子中, C-u 被關聯到函數 universal-argument,  M-DEL  被關聯到函數
       backward-kill-word,        而        C-o       被關聯為運行右邊給出的宏
       (意思是,將向行中插入 ``> output'' )。

       在第二種形式中,"keyseq":function-namemacrokeyseq  不同於上悸
       keynameC-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 字符
              \\     反斜槓
              \"     字惜W的 "
              \'     字惜W的 '

       除了 GNU Emacs 樣式的轉義序列,還有一系列反斜槓轉義序列可用:
              \a     響鈴
              \b     回退
              \d     刪除
              \f     進紙
              \n     新行符
              \r     回車
              \t     水斥鶖
              \v     豎直跳格
              \nnn   一茪K比特字符,它的O八進制 nnn (一到三茪K進制數字)。
              \xHH   一茪K比特字符,它的O十六進制        HH        (一到兩-
                     茪Q六進制數字)。

       輸入宏的文本時,必須使用單引號或雙引號引用來表明是宏的定義。
       沒有引用的文本被當作函數名。在宏的定義體中,上z反斜槓轉義被擴展。
       反斜槓將引用宏文本中所有其他字符,包括 " 和 '。

       Bash      允許使用內建命令      bind      來顯示和蚹儱礅e      readline
       按鍵關聯。在交互使用中可以用內建命令  set-o   選項切換到編輯模式
       (參見下悸 shellRO(SHELL BUILTIN COMMANDS) 章節)。

   Readline Variables
       readline       包含額外的可用於定制它的行為的變量。可以在       inputrc
       檔案中設置變量,使用如下形式的語句:

              set variable-name value

       除非另外說明,readline 變量的`是 OnOffbell-style (audible)
              控制了當   readline   需n鳴終端響鈴時的動作。如果設置為   none,
              readline          不會鳴鈴。如果設置為         visible,readline
              使用可視的響鈴,如果可用的話。   如果設置為    audible,readline
              試著鳴終端響鈴。
       comment-begin (``#'')
              這茼r符串在執行 readline 命令 insert-comment 時被插入。這茤R令在
              emacs 模式下被關聯為 M-##completion-ignore-case (Off)
              如果設置為 On,readline 進行大小寫不敏感的檔名匹配和補全。
       completion-query-items (100)
              這蚥僆q決定著何時向使用者詢問,是否查看由命令
              possible-completions                      產生的可能的補全數量。
              它可以設為任何大於或等於 0  的C如果可能的補全數量大於或等於這-
              蚥僆q的A                         使用者將被提示是否願意查看它-
              怴F否則將直接在終端上列出它怴C
       convert-meta (On)
              如果設置為   On,readline   將把設置了最高位的字符轉換為   ASCII
              按鍵序列,方法是  去掉第八位,前綴一蚋鉊q字符  (實際上,使用 Esc
              作為轉義符 meta prefix)。
       disable-completion (Off)
              如果設置為                                          On,readline
              將禁止詞的補全。補全字符將被插入到行中,就好像它抭Q 映射為 self-
              insertediting-mode (emacs)
              控制 readline 的按鍵關聯集合與 emacs 還是 vi 相似。 editing-mode
              可以設置為 emacsvienable-keypad (Off)
              如果設置為     On     ,readline    在調用時將試圖啟用輔助鍵盤。
              一些系統需n設置這茖荓狴峇閬V鍵。
       expand-tilde (Off)
              如果設置為 On,readline 試圖進行詞的補全時會進行波浪線擴展。
       history-preserve-point
              如果設置為 On,歷史代碼試著在 previous-historynext-history
              取回的每蚞史行的相同位置中加點。
       horizontal-scroll-mode (Off)
              如果設置為 On,將使得 readline 使用單行來顯示,如果它比螢幕寬度-
              n長,就在 單一的螢幕行上水朮u動輸入行,而不是自動回繞到新行。
       input-meta (Off)
              如果設置為             On,readline             將允許八比特輸入
              (也就是說,它不會將它讀入的字符中最高位刪除),
              不管它能支持什麼樣的終端n求。名稱 meta-flag 與此變量同義。
       isearch-terminators (``C-[C-J'')
              用於終止增量的搜索,不再將字符當作命令執行的字符串。     如果這-
              蚥僆q沒有賦A字符串 EscC-J 將終止增量的搜索。
       keymap (emacs)
              設置當前    readline    鍵盤映射。有效的鍵盤映射名稱是    emacs,
              emacs-standard,  emacs-meta,  emacs-ctlx,  vi,  vi-command,還有
              vi-insertC     vi     等價於     vi-command;    emacs    等價於
              emacs-standard。預設O      emacs;       editing-mode       的-
              ]會影響預設的鍵盤映射。
       mark-directories (On)
              如果設置為 On,補全的目錄名會添加一荓袟b。
       mark-modified-lines (Off)
              如果設置為 On,已被蚹麊瑣史行將顯示為前綴一茯P號 (*)。
       mark-symlinked-directories (Off)
              如果設置為 On,補全的名稱如果是到目錄的符號鏈接,則將添加一荓袟b
              (與 mark-directories 的P樣處理)。
       match-hidden-files (On)
              這蚥僆q,如果設置為 On,將使得 readline 在進行檔名補全時,匹配以
              `.'         開頭的檔案         (隱藏檔案),        除非使用者在-
              n補全的檔名中給出了前導的 `.'。
       output-meta (Off)
              如果設置為                                          On,readline
              將直接顯示設置了第八位的字符,而不是轉化為一荓a             meta
              前綴的轉義序列。
       page-completions (On)
              如果設置為  On,readline   將使用內建的類似   more   的分項{式,
              來每次顯示一屏可能的補全。
       print-completions-horizontally (Off)
              如果設置為  On,readline  將匹配的補全按字母表順序排序,然後水-
              排列顯示出來, 而不是在螢幕上豎直排列顯示。
       show-all-if-ambiguous (Off)
              這將調整補全函數的預設行為。如果設置為      on,      擁有多於一-
              茈i能的補全的詞將立即列出所有匹配,而不是鳴響鈴。
       visible-stats (Off)
              如果設置為            On,在列出可能的補全時,將在檔名後捲K加一-
              茠磳傱仵袓型的字符, 檔案類型由 stat(2) 報告。

   Readline Conditional Constructs
       readline  實現了一種功能,本質上與  C  預處理器進行條件編譯的功能類似,
       允許根據測試的結果進行鍵盤關聯和變量設置。其中使用了四種解釋器指令。

       $if    $if      結構允許根據編輯模式,正在使用的終端,使用     readline
              的應用程式來設定按鍵關聯。
              測試的文本包括一行,直到行尾;不必用字符來隔離它。

              mode   $if 結構的 mode= 形式用於測試 readline 處於 emacs 還是 vi
                     模式。  這可以與命令  set   keymap   結合使用,例如,設置
                     emacs-standardemacs-ctlx 鍵盤映射,僅當 readline 以
                     emacs 模式啟動。

              term   term=
                     形式用於包含與終端相關的按鍵關聯,也許是將按鍵序列輸出與終端的功能鍵相關聯。
                     等號   =   右邊的詞被同終端的全名和名稱中第一   -    前-
                     悸漱@部分相比較。   例如,允許   sun   同時匹配   sunsun-cmdC

              application
                     application       結構用於包含應用程式相關的設置。每茖洏
                     readline       的程式都設置       application      name,
                     初始化檔案可以測試它的C它可用於將一-
                     茷鶬銣C與對特定的程式有用的功能相關聯。
                     例如,下列命令添加了一茷鶬銣C,用以引用            bash
                     中當前的詞或前一茧

                     $if Bash
                     # Quote the current or previous word
                     "\C-xq": "\eb\"\ef\""
                     $endif

       $endif 上例中的這茤R令,結束了一 $if 命令。

       $else  如果測試失敗,$if 指令中這茪壑銂漫R令將被執行。

       $include
              這茷令使用單-
              蚗犰W作為參數,從檔案中讀取命令和按鍵關聯。例如,下列指令 將讀取
              /etc/inputrc$include  /etc/inputrc

   Searching
       readline    提供了從命令歷史中搜索包含給定字符串的行的命令   (參見下悸
       HISTORYv 章節)。有兩種搜索模式: incrementalnon-incremental.

       增量的搜索在使用者結束輸入搜索字符串時開始。在搜索字符串的每-
       茼r符被輸入的同時,  readline 顯示與已輸入的字符串匹配的下一蚞史條目。
       增量的搜索只n求輸入能找到期望的歷史條目所需的那麼多字符。      isearch-
       terminators  變量中的字符用來終止一次增量的搜索。如果  這蚥僆q沒有被賦-
       AEsc     和      Ctrl-J      字符串將結束一次增量的搜索。      Ctrl-G
       將取消一次增量的搜索,恢復初始的行。當搜索終止時,包含搜索字符串
       的歷史條目成為當前行。

       n從歷史列表中找到其他匹配的條目,適當地鍵入    Ctrl-S    或    Ctrl-R。
       這樣將在歷史中向前/向後搜索下一茪t已輸入的搜索字符串的條目。
       其他關聯到某    readline    命令的按鍵序列將終止搜索並執行關聯的命令。
       例如,newline 將終止搜索,接受當前行,從而執行歷史列表中的命令。

       readline   可以記住上次增量搜索的字符串。如果鍵入兩次  Ctrl-R,中間沒有
       輸入任何字符來定義一虓s的搜索字符串,那麼將使用已記住的搜索字符串。

       非增量的搜索將整虓j索字符串讀入,然後才開始搜索匹配的歷史條目。
       搜索字符串可以由使用者輸入,或者是當前行的內容的一部分。

   Readline Command Names
       下惘C出的是命令的名稱以及預設情況下它斻鶬p的按鍵序列。
       命令名稱如果沒有對應的按鍵序列,那麼預設是沒有關聯的。在下列描z中,  點
       (point)      指當前游標位置,標記      (mark)      指命令      set-mark
       保存的游標位置。point 和 mark 之間的文本被稱為S圍 (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)
              向後移動到當前或上一詞滿C
       clear-screen (C-l)
              清除螢幕,保留當前行在螢幕頂端。有參數時,刷新當前行,不清屏。
       redraw-current-line
              刷新當前行。

   Commands for Manipulating the Historyav行
       accept-line (Newline, Return)
              接受這一行,不管游標在什麼位置。如果行非空,將根據變量
              HISTCONTROL                    的狀態加入到歷史列表中。如果行是-
              蚹儮L的歷史行,將恢復該歷史行到初始狀態。
       previous-history (C-p)
              從歷史列表中取得前一茤R令,從列表中向後移動。
       next-history (C-n)
              從歷史列表中取得後一茤R令,從列表中向前移動。
       beginning-of-history (M-<)
              移動到歷史中的第一行。
       end-of-history (M->)
              移動到輸入歷史行的末尾,也就是當前輸入的行的末尾。
       reverse-search-history (C-r)
              從當前行開始向後搜索,按照需n在歷史中向「上」移動。這是一-
              蚍W量的搜索。
       forward-search-history (C-s)
              從當前行開始向前搜索,按照需n在歷史中向「下」移動。這是一-
              蚍W量的搜索。
       non-incremental-reverse-search-history (M-p)
              從當前行開始向後,使用非增量搜索來查找使用者給出的字符串。
       non-incremental-forward-search-history (M-n)
              從當前行開始向前,使用非增量搜索來查找使用者給出的字符串。
       history-search-forward
              從當前行開始向前搜索歷史,查找從當前行漕  point  之間的字符串。
              這是一茷D增量的搜索。
       history-search-backward
              從當前行開始向後搜索歷史,查找從當前行漕  point  之間的字符串。
              這是一茷D增量的搜索。
       yank-nth-arg (M-C-y)
              將前一茤R令的第一荌捊  (通常是上一行的第二茧)   插入到   point
              位置。有參數  n  時,將前一茤R令的第  n 茧 (前一茤R令中的詞從 0
              開始p數) 插入到 point 位置。t數參數則插入前一茤R令佷 n 茧。
       yank-last-arg (M-., M-_)
              插入前一茤R令的最後一荌捊 (上一歷史條目的最後一茧)。有參數時,
              行為類似於     yank-nth-arg。後繼的     yank-last-arg     調用將
              從歷史列表中向後移動,依次將每行的最後一荌捊﹞J。
       shell-expand-line (M-C-e)
              擴展行,像  shell   做的那樣。其中包含別名和歷史擴展,還有所有的
              shell 詞的擴展。 參見下悸 HISTORY EXPANSION 中關於歷史擴展的描-
              z。
       history-expand-line (M-^)
              在當前行進行歷史擴展。參見下悸        HISTORY         EXPANSION
              中關於歷史擴展的描z。
       magic-space
              在當前行進行歷史擴展,並插入一茠躓獢C參見下悸 HISTORY EXPANSION
              中關於歷史擴展的描z。
       alias-expand-line
              在當前行進行別名擴展,參見上悸 ALIASES 中關於別名擴展的描z。
       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)
              啟動一蚑s輯器,編輯當前命令行,將結果作為  shell 命令運行。 Bash
              將依次試著運行 $FCEDIT, $EDITOR, 和 emacs 作為編輯器。

   Commands for Changing Text本
       delete-char (C-d)
              刪除       point        處的字符。如果        point        在行-
              滿A行中沒有字符,最後一次輸入的字符                 沒有被關聯到
              delete-char,將返回 EOF.
       backward-delete-char (Rubout)
              刪除游標之後的字符。當給出一蚍的參數時,保存刪除的文本到  kill
              ring 中。
       forward-backward-delete-char
              刪除游標下的字符,除非游標在行尾,此時刪除游標後的字符。
       quoted-insert (C-q, C-v)
              將輸入的下一字符保持儤侘K加到行中。例如,可以用它來插入類似  C-q
              的字符。
       tab-insert (C-v TAB)
              插入一虒鶖瘝顫飽C
       self-insert (a, b, A, 1, !, ...)
              插入鍵入的字符。
       transpose-chars (C-t)
              將  point  之前的字符向前移動,越過  point  處的字符,同時也改變
              point  的位置。 如果 point 在行尾,將調換 point 之前的兩茼r符。-
              t數參數沒有作用。
       transpose-words (M-t)
              將 point 之前的詞向前移動,越過 point  處的詞,同時也改變  point
              的位置。 如果 point 在行尾,將調換行中的最後兩茧。
       upcase-word (M-u)
              將當前 (或下一) 詞變成全大寫。有t滌捊氶A將前一茧變為大寫,
              但是不移動 point。
       downcase-word (M-l)
              將當前 (或下一) 詞變成全小寫。有t滌捊氶A將前一茧變為小寫,
              但是不移動 point。
       capitalize-word (M-c)
              將當前   (或下一)   詞變為漲r大寫。有t滌捊氶A將前一茧變為-
              漲r大寫, 但是不移動 point。
       overwrite-mode
              控制插入/改寫模式。給出一茈蕪蒱捊氶A切換為改寫模式。給出一-
              茷D正數   參數時,切換為插入模式。這茤R令只影響  emacs  模式;vi
              模式              的改寫與此不同。每蚢               readline()
              的調用都以插入模式開始。在改寫模式下,     關聯到    self-insert
              的字符替換    point    處的字符,而不是將它推到右邊。     關聯到
              backward-delete-char     的字符以空格替換    point    前的字符。
              預設情況下,這茤R令沒有關聯。

   Killing and YankingMK
       kill-line (C-k)
              剪切從 point 到行尾的文本。
       backward-kill-line (C-x Rubout)
              反向剪切到行滿C
       unix-line-discard (C-u)
              反向剪切到行滿C與       backward-kill-line        沒有什麼區別。
              剪切的文本被保存於 kill-ring 中。
       kill-whole-line
              剪切當前行中所有字符,不管 point 在什麼位置。
       kill-word (M-d)
              剪切從          point         到當前詞尾,或者如果         point
              在詞之間,那麼剪切到下一詞尾。
       backward-kill-word (M-Rubout)
              剪切 point 之後的詞。詞的邊界與 backward-word 使用的相同。
       unix-word-rubout (C-w)
              剪切  point   之後的詞,使用空白作為詞的邊界。剪切的文本被保存於
              kill-ring 中。
       delete-horizontal-space (M-\)
              刪除 point 兩邊的所有空格和跳格。
       kill-region
              剪切當前 region 的文本。
       copy-region-as-kill
              將 region 的文本複製到剪切緩沖區中。
       copy-backward-word
              將  point  前悸熊複製到剪切緩沖區中。  詞的邊界與 backward-word
              使用的相同。
       copy-forward-word
              將 point 之後的詞複製到剪切緩沖區中。  詞的邊界與  backward-word
              使用的相同。
       yank (C-y)
              將 kill-ring 頂部的內容粘貼到 point 處的緩沖區中
       yank-pop (M-y)
              輪轉   kill-ring,粘貼新的頂部內容。只能在   yankyank-pop
              之後使用。

   Numeric Arguments數
       digit-argument (M-0, M-1, ..., M--)
              將這蚍r加入已有的            (already            accumulating)
              參數中,或者開始新的參數。 M-- 開始一荍_定的參數。
       universal-argument
              這是指定參數的另一種方法。如果這茤R令後掘繺菑@茤峖h蚍r,
              可能還包含前導的-
              t號,這些數字定義了參數。如果命令之後跟隨著數字,再次執行
              universal-argument
              將結束數字參數,但是其他情況下被忽略。有一種特殊情況,如果命令之後緊接著
              一茖禱D數字或t號的字符,下一命令的參數p數將憧H 4。 參數p數初始是
              1,因此第一次執行這茖蝻A使得參數p數為  4, 第二次執行使得參數-
              p數為 16,以此類推。

   Completing全
       complete (TAB)
              試著對 point 之前的文本進行補全。 Bash 依次試著將文本作為一蚥僆q
              (如果文本以  $  開始),一茖洏峈怞W  (如果文本以  ~ 開始),主機名
              (如果文本以       @       開始),或者命令       (以及別名和函數)
              來補全。如果這些都沒有匹配,將嘗試檔名補全。
       possible-completions (M-?)
              列出 point 之前的文本可能的補全。
       insert-completions (M-*)
              插入 possible-completions 已產生的 point 之前的文本所有的補全。
       menu-completecomplete     相似,但是使用可能的補全列表中的某茪t替換-
              n補全的詞。 契_執行 menu-complete  將遍歷可能的補全列表,插入每-
              茪t。    到達補全列表的結尾時,鳴終端響鈴   (按照   bell-style
              的設置來做) 並恢復初始的文本。 參數 n  將在匹配列表中向前移動  n
              步;t數參數可以用於在列表中向後移動。      這茤R令應當與     TAB
              鍵關聯,但是預設情況下是沒有關聯的。
       delete-char-or-list
              刪除游標下的字符,如果不是在行漫峖瑽    (類似    delete-char)。
              如果在行尾,行為與      possible-completions      一P。      這-
              茤R令預設沒有關聯。
       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)
              奐s執行上次定義的鍵盤宏,即顯示出宏中的字符,好像它-
              怓O從鍵盤輸入的一樣。

   Miscellaneous
       re-read-init-file (C-x C-r)
              讀入 inputrc 檔案的內容,合並其中的按鍵關聯和變量賦C
       abort (C-g)
              取消當前編輯命令,鳴終端響鈴 (按照 bell-style 的設置來做)。
       do-uppercase-version (M-a, M-b, M-x, ...)
              如果有               Meta              前綴的字符              x
              是小寫的,那麼與命令相關連的是對應的大寫字符。
       prefix-meta (ESC)
              將輸入的下一茼r符加上 Meta 前綴。 ESC f 等價於 Meta-f.
       undo (C-_, C-x C-u)
              增量的撤銷,分別記住每一行。
       revert-line (M-r)
              撤銷這一行的所有蚹鵅C這與執行命令                           undo
              足夠多次的效果相同,將這一行恢復到初始狀態。
       tilde-expand (M-&)
              對當前詞進行波浪線擴展。
       set-mark (C-@, M-<space>)
              在 point 處設置 mark。如果給出了數滌捊A標記被設置到那茼鼽m。
       exchange-point-and-mark (C-x C-x)
              交換                          point                           和
              mark。當前游標位置被設置為保存的位置,舊游標位置被保存為 mark。
       character-search (C-])
              讀入一茼r符,point 移動到這茼r符下一次出現的地方。t數將搜索上一-
              茈X現。
       character-search-backward (M-C-])
              讀入一茼r符,point   移動到這茼r符上一次出現的地方。t數將搜索下-
              悸漸X現。
       insert-comment (M-#)
              沒有數滌捊氶Areadline       變量      comment-begin      的-
              N被插入到當前行滿C如果給出一蚍的參數,命令的行為類似於一-
              荈}關:  如果行漲r符不匹配  comment-begin  的A將插入這蚧,否則
              匹配                comment-begin                的字符將被從行-
              漣R除。在兩種情況下,這一行都被接受,
              好像輸入了新行符一樣。comment-begin               的預設炱o這-
              茤R令將當前行變成         一條        shell        注釋。如果數-
              捊炱o注釋字符被刪除,這一行將被 shell 執行。
       glob-complete-word (M-g)
              point    之前的詞被當作路徑擴展的一蚍狾﹛A尾部暗含了一茯P號。這-
              蚍狾○Q用來 為可能的補全產生匹配的檔名列表。
       glob-expand-word (C-x *)
              point                                之前的詞被當作路徑擴展的一-
              蚍狾﹛A匹配的檔名的列表被插入,替換這茧。        如果給出一蚍-
              捊A在路徑擴展之前將添加一茯P號。
       glob-list-expansions (C-x g)
              顯示           glob-expand-word          可能產生的擴展的列表,-
              姻虞礅e行。如果給出一蚍參數,在路徑擴展之前將添加一茯P號。
       dump-functions
              向 readline  輸出流列印所有的函數和它怐澈鶬鞀鶬p。如果給出一蚍-
              捊A 輸出將被格式化,可以用作 inputrc 檔案一部分。
       dump-variables
              向 readline 輸出流列印所有可設置的 readline 函數。如果給出一蚍-
              捊A 輸出將被格式化,可以用作 inputrc 檔案一部分。
       dump-macros
              向 readline  輸出流列印所有關聯到宏的  readline  按鍵序列以及它-
              抰擖X的字符串。     如果給出一蚍參數,輸出將被格式化,可以用作
              inputrc 檔案一部分。
       display-shell-version (C-x C-v)
              顯示當前 bash 實例的版本信息。

   Programmable Completionis{全
       當試圖對一茤R令的參數進行詞的補全時,如果已經使用內建命令      complete
       定義了這茤R令的補全規則  (  compspec),將啟動可編程補全功能  (參見下悸
       shellRO(SHELL BUILTIN COMMANDS) 章節)。

       漸,命令名被確認。如果針對這茤R令有補全規則的定義,那麼將使用
       規則來產生可能的詞的補全的列表。如果命令詞是一虒纁|全名,將漸搜索
       針對這虒纁|全名的規則。如果針對這虒纁|全名沒有找到規則,將嘗試查找
       針對最後一荓袟b後悸熙﹞尷熙W則。

       一旦找到了一茬W則,它將用作產生匹配的詞。如果沒有找到,將進行上
       Completing 中描z的 bash 預設的補全。

       漸,將執行規則指定的動作。只有以被補全的詞開始的匹配詞才會被返回。
       當在檔案或目錄名補全中使用   -f-d  選項時,shell  變量  FIGNORE
       將用於對匹配進行過濾。

       接下來,將產生所有由-G               選項給出的檔名擴展模式指定的補全。
       模式產生的詞不必匹配n補全的詞。shell           變量          GLOBIGNORE
       不會用於過濾匹配結果,但是變量 FIGNORE 會被使用。

       接下來,將考慮        -W         選項的參數指定的字符串。這茼r符串漸被
       劃分,用特殊變量    IFS   中的字符作為分隔符。shell   引用被當作一茧。
       接下來,每茧被擴展,使用上 EXPANSION 中描z的 brace  expansion,  tilde
       expansion,  parameter  和  variable  expansion,  command  substitution,
       arithmetic       expansion,       以及        pathname        expansion
       規則處理。對於結果,再使用上   Word   Splitting  中描z的規則劃分成詞。
       擴展的結果與n補全的詞進行前部一P的比較,匹配的詞成為可能的補全。

       在這些匹配被產生後,任何由    -F-C     選項指定的     shell
       函數和命令將被執行。當命令或函數被執行時,變量  COMP_LINECOMP_POINT
       被賦A使用上   Shell    Variables    中的規則。    如果n執行    shell
       函數,還將設置變量 COMP_WORDSCOMP_CWORD 當函數或命令被執行時,第一-
       荌捊O等待參數被補全的命令的名稱,         第二荌捊On補全的詞,第三-
       荌捊O當前命令行中,n補全的詞前悸熊。                             對-
       n補全的詞產生的補全不會進行任何過濾;函數或命令在產生匹配時有完全的自由。

       任何    -F    指定的函數將被漸執行。函數可以使用任何    shell   功能,
       包含內建命令        compgen,來產生匹配。它必須將可能的補全放到數組變量
       COMPREPLY 中。

       接下來,任何       -C      選項指定的命令將被執行,其執行環境與命令替換
       的環境相同。它應當向標準輸出列印一虒犮的列表,每行一荂C
       反斜槓可以用來轉義一虓s行符,如果需n的話。

       所有可能的補全都產生之後,將對列表進行      -X     選項指定的任何過濾。
       過濾器是一蚍狾﹛A和路徑名擴展中的一樣;模式中的 & 替換為 n補全的詞。字-
       惜W的    &   可以用反斜槓轉義;反斜槓在進行匹配時被刪除。   任何匹配這-
       蚍狾〞爾犮將從列表中刪除。前導的         !          將使模式含義相反;
       這種情況下,任何不匹配這蚍狾〞爾犮將被刪除。

       最後,B-P  和  -S  指定的任何前綴和延伸檔名被添加到補全列表的每 成後-
       情A結果返回給 readline 補全代碼,作為可能的補全列表。

       如果先前執行的動作沒有產生任何匹配,並且在定義   compspec    規則時,為
       complete 命令提供了 -o dirname 選項,將嘗試目錄名補全。

       預設情況下,如果找到了一茬W則,它產生的任何東西都被返回給補全代碼,
       作為可能的補全的全集。不再嘗試預設的   bash    補全,readline    預設的
       檔名補全也會禁止。如果定義規則時,為  complete  命令提供了  -o  default
       選項,在規則沒有產生匹配時將進行 readline 預設的補全處理。

       當一茬W則指出期望目錄名補全時,可編程補全函數強制 readline 在補全的名稱
       後捲K加一荓袟b,如果它是一茖鴠媬的符號連接。然後還n經過  readline 變量
       mark-directories 的B理,不管 readline 變量 mark-symlinked-directories
       的O什麼。

v(HISTORY)
       當啟用內建命令   set-o  history  選項時,shell  允許訪問  command
       history,以前輸入的命令的列表。              HISTSIZE               的-
       峓@命令列表中保存的命令數量。    過去    HISTSIZE        (預設為500)
       命令將被保存。shell 將每條命令在進行參數和變量擴展之前 保存到歷史列表中
       (參見上悸  EXPANSION  段落),但是是在歷史擴展進行之後,並且n經過 shell
       變量 HISTIGNOREHISTCONTROL 處理。

       在啟動時,歷史根據以變量      HISTFILE      的隻W的檔案       (預設是
       ~/.bash_history)       進行初始化。       如果需n的話,以      HISTFILE
       為名的檔案將被截斷,來包含不超過變量 HISTFILESIZE 的定的行數。當交互
       shell    退出時,最後    $HISTSIZE   行被從歷史列表中複製到   $HISTFILE
       檔案中。如果啟用了   shell    選項    histappend    (參見下悸    shell
      RO(SHELL   BUILTIN   COMMANDS)   章節中對內建命令   shopt   的描-
       z),這些行被追加到歷史檔案中,否則歷史檔案被覆蓋。如果         HISTFILE
       被取消定義,或者如果歷史檔案不可寫,歷史將不會保存。保存歷史之後,
       歷史檔案被截斷,以包含不超過   HISTFILESIZE    行。如果    HISTFILESIZE
       被取消定義,不會進行截斷操作。

       內建命令  fc  (參見下悸  shell RO(SHELL BUILTIN COMMANDS) 章節)
       可以用來列出或蚹翵禱新執行歷史列表中的一部分。內建命令          history
       可以用來顯示或蚹嚝史列表,操作歷史檔案。當使用命令行編輯時,每種
       編輯模式都有搜索命令,提供對歷史列表的訪問。

       shell   允許控制些命令被保存到歷史列表中。可以設置   HISTCONTROLHISTIGNORE   變量,來使得   shell  只保存輸入命令的一茪l集。shell  選項
       cmdhist   如果被啟用,將使得   shell    將多行的命令的每一行保存到同一-
       蚞史條目中, 在需n的地方添加分號來保証語義的正確性。shell 選項 lithist
       使得  shell  保存命令時,保留嵌入的新行而不是用分號代替。參見下  shell
      RO(SHELL    BUILTIN    COMMANDS)    中,內建命令    shopt   的描-
       z,有關設置和取消 shell 選項的信息。

vXi("HISTORY EXPANSION")
       shell      支持歷史擴展機制,類似於      csh      中歷史擴展。這一節描-
       z了可用的語法特征。在交互的         shell        中這一機制被預設啟用,
       可以使用內建命令 set-H 選項來禁用它 (參見下悸 shellRO(SHELL
       BUILTIN COMMANDS) 章節)。非交互的 shell 預設不進行歷史擴展。

       歷史擴展將歷史列表中的詞引入輸入流中,使得可以方便地契_已執行命令,
       在當前輸入行中為前一茤R令插入新的參數, 或者快速蚰翰e一茤R令中的錯誤。

       歷史擴展在讀入一整行後,在      shell      將它拆分成詞之前立即進行。它
       由兩部分組成。漸是判斷替換中使用歷史列表中一行。其次是選擇那一行中-
       n包含到當前行中的部分。                            從歷史中選擇的行稱為
       event,從那一行中選擇的部分是    words。   可以用多種多樣的   modifiers
       來操縱所選的詞。在讀入輸入時,行被按照同樣方式分解成詞,      因此多茈H
       metacharacter                 分隔的詞,如果被引號包含,就被當成一茧。
       歷史擴展由歷史擴展字符引入,預設是          !。只有反斜槓           (\)
       和單引號可以引用歷史擴展字符。

       內建命令  shopt 可以設定多蚇龠脹,來調整歷史擴展的行為。如果 shell 選項
       histverify 被啟用 (參見內建命令 shopt  的描z),並且正在使用  readlinereadline      編輯緩沖區,進行進一步的蚹鵅C如果正在使用      readlinehistreeditreadline
       編輯緩沖區,進行改正。內建命令          history-p
       選項可以用來在執行之前查看歷史擴展將如何進行。內建命令  history-s
       選項可以用來在歷史列表末尾添加命令,而不真正執行它怴A從而
       在接下來的調用中可以使用它怴C

       shell  允許控制歷史擴展機制使用的多種字符 (參見上悸 Shell Variableshistchars 的描z)。

   Event Designators
       事件指示器 (event designator) 是一蚢嚝史列表中某茤R令行條目的引用。

       !      開始一茤R令替換,除非後掘聸H的是 blank, newline, = 或是 (.
       !n     引用命令行 n.
       !-n    引用當前命令行減去 n.
       !!     引用上一條命令。這是 `!-1' 的同義詞。
       !string
              引用最近的以 string 開始的命令。
       !?string[?]
              引用最近的包含 string 的命令。尾部的 ?  可以被忽略,如果  string
              之後緊接著一虓s行符。
       ^string1^string2^
              快速替換。契_上一條命令,將    string1   替換為   string2.    與
              ``!!:s/string1/string2/'' 等價 (參見下悸 (Modifiers))。
       !#     到此為止輸入的整茤R令行。

   Word Designators
       詞指示器 (word designator) 用於從 event 中選擇期望的詞。 :  分隔  event
       規則與  word  指示器。它可以忽略,如果詞指示器以  ^,  $,  *,  -,  或  %
       開始。詞被從行熄}始編號,第一茧被表示為       0。插入當前行中的詞以單-
       茠躓璊戴j。

       0 (zero)
              第 0 茧。對 shell 來將,這是命令名。
       nn 茧。
       ^      第一荌捊C也就是,第 1 茧。
       $      最後的參數。
       %      最近一次搜索 `?string?' 匹配的詞。
       x-y    一組詞;`-y' 是 `0-y' 的簡寫。
       *      所有詞,除了第  0  荂C這是  `1-$' 的同義詞。如果 event 中只有一-
              茧,使用 * 也不是錯誤;這種情況下將返回空字符串。
       x*     x-$ 的簡寫。
       x-     -$ 的簡寫,就像 x* 一樣,但是忽略最後一茧。

       如果給出了一 word 指示器,沒有給出 event 規則,前一茤R令將用作 event。

   (Modifiers)
       可選的  word  指示器之後,可以出現一茤峖h茪Uz  modifiers  的序列,每一-
       茬ㄚe綴有 `:'。

       h      刪除檔名組成的尾部,只保留頭部。
       t      刪除檔名組成中前悸漲角嚏A保留尾部。
       r      刪除 .xxx 形式中尾部的延伸檔名成分,保留基本名稱部分。
       e      刪除所有內容,保留尾部的延伸檔名。
       p      列印新的命令,但是不執行它。
       q      引用替換所得的詞,使它不再進行替換。
       x      引用替換所得的詞,類似與     q,     但是會根據      blankss/old/new/
              將事件行中出現的第一  old 替換為 newC 任何分隔符都可以用來代替
              /,最後一茪戴j符是可選的,如果它是事件行的最後一茼r符。  oldnew    中的分隔符可以用一茪炱袟b來引用。如果    &   出現在   new
              中,它將替換為   oldC   可以用單茪炱袟b來引用    &。如果    old
              為空,它將設置為最後替換的          oldA          或者,如果前-
              惆S有發生過歷史替換,就是 !?string[?]  搜索中的最後一 stringC
       &      契_上一次替換。
       g      使得改變被整茖韟璈珣筐。用於與    `:s'    或    `:&'     結合
              (例如,`:gs/old/new/')。               如果與               `:s'
              結合使用,任何分隔符都可以用來代替          /,          最後一-
              茪戴j符是可選的,如果它是事件行的最後一茼r符。

shellRO(SHELL BUILTIN COMMANDS)
       除非另外說明,這一章介紹的內建命令如果接受  -  引導的選項,那麼它也接受
       -- 作為參數,來指示選項的結束
       : [arguments]
              沒有效果;這茤R令除了擴展      arguments       並且作任何指定的-
              咿w向之外,不做任何事。 退出時返回0。

        .  filename [arguments]
       source filename [arguments]
              讀取並在當前  shell  環境中執行 filename 中的命令,返回 filename
              中最後一茤R令的返回狀態。如果       filename        中不包含斜槓
              (slash),系統將在   PATH  中查找包含  filename  的目錄。在  PATH
              中搜索的檔案不必是可執行的。 如果 bash 不是運行於 posix mode,當
              PATH   中找不到檔案時會在當前目錄搜索。如果   shopt   內建命令的
              sourcepath 選項被關閉, PATH 將不會被搜索。如果有任何  arguments
              ,它怞足   filename  的位置參數  (positional  parameters),否則
              位置參數不發生變化。   返回狀態是稿本中最後一茤R令退出時的狀態。
              沒有執行命令則返回0,沒有找到或不能讀取 filename 時返回false。

       alias [-p] [name[=value] ...]
              Alias 不帶參數或者帶 -p 參數運行時將在標準輸出以這樣的格式 alias
              name=value 給出別名列表。 如果有參數,將創建提供了 valuename
              的別名。 value 中尾部的空格使得別名被擴展時,下一茧做別名替換。
              對於參數列表中的每一   name,如果    value    沒有    給出,這-
              荍O名的名稱和|被列印出來。   Alias   返回   true   除非   name
              沒有定義為別名。

       bg [jobspec]
              使掛起的程式     jobspec      在I景繼續執行,就好像它是用      &
              啟動的一樣。如果沒有指定  jobspec,shell  意義上的  current  job
              e@~            將被使用。            bg             jobspec
              返回0,除非當前禁止了作業控制,或者在允許作業控制,但 是沒有找到
              jobspec ,或者它不是在作業控制下啟動的時唌C

       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   鍵和功能的,將一茷鶬銣C和一    readline
              功能或宏進行關聯,或者設置一        readline        變量。每一-
              茼b非選項的參數都是一茤R令,好像它是在                  .inputrc
              中出現的一樣。但是每蚚鶬p或者命令必須作為單獨的參數傳遞;
              也就是這樣  '"\C-x\C-r":  re-read-init-file'。   如果有參數,它-
              怞釵p下的意義:
              -m keymap
                     使用  keymap 作為隨後的關聯的keymap。可選的 keymap 名稱是
                     emacs,  emacs-standard,   emacs-meta,   emacs-ctlx,   vi,
                     vi-move,  vi-command,還有  vi-insertvivi-command
                     等價; emacsemacs-standard 等價。
              -l     列出所有的 readline 功能。
              -p     以程式可讀的方式顯示 readline 功能名稱和關聯
              -P     列出當前 readline 功能名稱和關聯。
              -v     以程式可讀的方式顯示 readline 變量名稱和
              -V     列出當前 readline 變量和C
              -s     以程式可讀的方式顯示 readline 鍵序列和對應的宏
              -S     顯示 readline 宏對應的鍵序列和他抰擖X的字符串
              -f filenamefilename 中讀取鍵序列
              -q function
                     查詢那些鍵將執行function-u function
                     取消所有關聯到 function 的鍵。
              -r keyseq
                     取消當前任何 keyseq 的關聯。
              -x keyseq:shell-command
                     使 shell-commandkeyseq 按下時被執行。

              返回O0,除非給出了一茪ㄞ鈱悝O的選項或是產生了一蚇欞~。

       break [n]
              從一 for, while, until, 或者  select  循環退出。  如果指定了  n
              ,就跳出  n  層循環。  n  必須  >=  1。如果  n 比當前循環層數還-
              n大,將跳出所有循環。  返回O0,除非執行  break   的時   shell
              不是在執行一荋`環。

       builtin shell-builtin [arguments]
              執行指定的  shell  內建命令,傳遞  arguments ,返回命令的返回C
              這在定義了一茤M   shell    內建命令同名的函數時很有用,    在那-
              茖蝻尹洏峊成荌鶡甈衈釭漸\能。cd      命令常以這種方式奐s定義。
              返回狀態是  false,如果指定的  shell-builtin   並不是一   shell
              內建命令。

       cd [-L|-P] [dir]
              改變當前路徑到  dir。這蚥僆q的預設O HOME 目錄。環境變量 CDPATH
              定義了包含  dir  的搜索路徑。在  CDPATH  中可選的路徑名以冒號(:)
              分隔。   CDPATH  中的空路徑名與當前路徑相同,就是  ``.''.   如果
              W  以斜槓  (/,slash)  起始,那麼  CDPATH  不會被使用。   -P
              選項是說使用物理路徑結構而不是跟隨符號鏈接,(參見  set  命令中的
              -P  選項);  -L  選項強制跟隨符號鏈接。另外,選項  -$OLDPWD
              是相同的。 返回O true ,如果成功地改變了目錄;否則是 false。

       command [-pVv] command [arg ...]
              運行   command   ,使用   args   作為參數,禁止通常的查找  shell
              函數的過程。只有內建命令或者 PATH 中包含的命令可以執行。如果給出
              -p      參數,      command      的查找是以     PATH     的預設-
              i行的。這樣可以保証找到所有的標準工具。如果給出  -V  或者   -v
              選項,關於   command   的說明將被列印出來。   -v  選項使得表z這-
              茤R令的詞,或者n執行    command    需n執行的檔案顯示出來;    -V
              選項給出更詳細的描z。如果給出  -V 或者 -v 選項,退出狀態在找到了
              command                                 的情況下0,沒找到就是1。
              如果沒有提供選項,並且產生了錯誤或者                     command
              沒有找到,退出狀態就是127。否則,  command  內建命令的退出狀態是
              command 的退出狀態。

       compgen [option] [word]
              根據  optionword 產生可能的補全。option 是 內建命令 complete
              接受的任何選項,除了 -p-r,將匹配結果寫到標準輸出。  當使用
              -F-C     選項時,可編程補全功能所設置的多數    shell
              變量如果存在,其N不再有用。

              產生的匹配與可編程補全代碼根據補全規則加上相同的標誌直接產生的結果相同。
              如果指定了 word,只有匹配 word 的補全結果將被顯示出來。

              返回偺u,除非提供了非法的選項,或者沒有產生匹配。

       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   選項,
              或者沒有選項給出,現有的補全規則將被顯示出來,以一種可以-
              咱峎倏擗J  的格式顯示。-r 選項將一荌w對每 name 的補全規則刪除。
              或者,如果沒有給出 name,將刪除所有補全規則。

              嘗試詞的補全時,應用這些補全規則的過程在上         Programmable
              Completion(可編程補全) 中詳z。

              其他選項,如果給出的話,具有下列意義。-G,  -W,  和 -X 選項的參數
              (如果需n的話,還包括        -P-S         選項)
              應當被引用,避免在執行內建命令 complete 之前被擴展。
              -o comp-option
                      comp-option                控制著               compspec
                      除了簡單地產生補全之外的多種行為。           comp-option
                      可以是如下之一:
                      default 使用   readline   的預設檔名補全,如果  compspec
                              沒有得到匹配。
                      dirnames
                              進行目錄名補全,如果 compspec 沒有得到匹配。
                      filenames
                              告訴                          readline,compspec
                              產生了檔名,使它可以進行任何檔名專用的處理
                              (例如,給目錄名加上斜槓或消除尾部空白)。主n用於
                              shell 函數。
                      nospace 告訴 readline 不n向補全的詞在行的最後添加一茠躓
                              (這是預設行為)。
              -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
                      特殊變量中的字符作為定界符來拆分,每-
                      茧痕G的詞被擴展。可能的補全是結果列表            中匹配-
                      n補全的詞的那一些。
              -C command
                      command                 將在一茪l                  shell
                      環境中執行,它的結果用作可能的補全。
              -F function
                      shell       函數       function      將在當前      shell
                      環境中執行。當它結束時,可能        的補全可以從數組元素
                      COMPREPLY 中得到。
              -X filterpat
                      filterpat               是一蚍狾﹛A用於檔名擴展。所有前-
                      悸瑪龠筒M參數產生   的可能的補全都n經過這一步處理,每一-
                      茪t  filterpat  的補全都  被從列表中刪除。為 filterpat
                      加上前導   !   使模式意義相反;   這種情況下,所有不匹配
                      filterpat 的模式被刪除。
              -P prefix
                      在所有其他選項都處理過之後,prefix             被加到每-
                      茈i能的補全前情C
              -S suffix
                      在所有其他選項都處理過之後,suffix             被加到每-
                      茈i能的補全後情C

              返回偺u,除非給出了非法的選項,給出除  -p-r  之外  的某-
              蚇龠筑禸S有給出    name    參數,試圖刪除一條    name     的補全
              規則但是規則不存在,或者添加補全規則時出錯。

       continue [n]
              復位到外層      for,      while,      until,      或      select
              循環的下一次開始。如果指定了 nA 復位到向外第 n 層循環的開始。 n
              必須   >=  1。如果  n  比外部循環的層數n多,將復位到最外層的循環
              (``top-level'' loop,頂層循環)。  返回O  0,除非執行  continue
              時,shell 不是在循環之中。

       declare [-afFirtx] [-p] [name[=value]]
       typeset [-afFirtx] [-p] [name[=value]]
              聲明變量且/或設置它怐瘧搣吽C如果沒有給出   name  則顯示變量的C
              選項    -p    將顯示每茼W稱    name     的屬性和C當使用     -p
              時,其他選項被忽略。選項                                      -F
              禁止顯示函數定義;只有函數名和屬性會被顯示。  -F  選項暗含   -f.
              下列選項可用來制只輸出具有指定屬性的變量,或者為變量設置屬性:
              -aname 都是數組變量 (參見上悸 Arrays 段落)。
              -f     只使用函數名。
              -i     變量被當作一蚞蒱F當變量被賦伀N進行算術運算      (參見
                    ND (ARITHMETIC EVALUATION) 章節)。
              -r     使得     name      只讀。這些名稱不能再被後續的賦y句賦-
                     峔消定義。
              -t     設置每   nametrace(跟蹤)  屬性。被跟蹤的函數繼承了
                     調用者       shell       的       DEBUG       陷阱。trace
                     屬性對變量沒有特殊意義。
              -x     標記 name 為可以通過環境導出給後續命令。

              使用  `+'  代替  `-'  將關閉屬性,特殊情況是  +a 不能用於銷毀一
              數組變量。當用於函數中時,它使得每 name 成為局部的,就像 使用了
              local   命令。返回O   0,除非遇到了非法的選項,試圖使用   ``-f
              foo=bar''         定義函數,試圖向只讀變量賦A試圖向數組變量賦-
              沒有使用復合的賦    語法   (參見上悸   Arrays   段落),name
              之一不是有效的        shell         變量名,試圖將數組變量的數組
              狀態關閉,或者是試圖使用 -f 顯示一茪ㄕs在的函數。

       dirs [-clpv] [+n] [-n]
              沒有選項時顯示當前保存的目錄。預設輸出為一行,目錄名用空格分開。
              可以使用        pushd        命令將目錄添加到列表,         popd
              命令將列表中的條目刪除。
              +n     顯示  dirs  在不帶選項執行時顯示的列表的第  n 荓囓堙A從 0
                     開始自左算起。
              -n     顯示 dirs 在不帶選項執行時顯示的列表的第  n  荓囓堙A從  0
                     開始自右算起。
              -c     刪除所有條目,清空目錄棧。
              -l     產生長列表;預設列表格式使用波浪線來表示茪H目錄。
              -p     輸出目錄棧,一行一荂C
              -v     輸出目錄棧,一行一荂A每荓囓堳e悼[上它在棧中的位置索引。

              返回O 0,除非給出了非法的參數,或者 n 索引超出了目錄棧的S圍。

       disown [-ar] [-h] [jobspec ...]
              沒有選項時,每 jobspec 被從正在運行的作業表中刪除。如果給出了 -
              選項,每 jobspec 並不從表中刪除,而是被標記,使得在 shell  接到
              SIGHUP    信號時,不會向作業發出    SIGHUP    信號。如果沒有給出
              jobspecA 也沒有給出 -a 或者  -r  選項,將使用當前作業  (current
              job)。如果沒有給出           jobspecA          選項          -a
              意味著刪除或標記所有作業;選項   -r   不帶    jobspec    參數時-
              制操作只對正在運行的作業進行。返回O       0,除非      jobspec
              不指定有效的作業。

       echo [-neE] [arg ...]
              輸出 arg,以空格分開,最後加一虓s行符。返回`是 0。  如果指定了
              -n,將不在尾部添加新行符。如果給出了          -e          選項,
              將允許解釋下列反斜槓轉義的字符。                              -E
              選項禁止這些轉義字符的解釋,即使在預設解釋它怐漕t統中也是如此。
              shell   選項   xpg_echo   可以用來在運行時判斷   echo   是否預設
              展開這些轉義字符。    echo   不將   --   作為選項的結束。   echo
              解釋下列轉義序列:
              \a     alert (bell) 響鈴
              \b     backspace 回退
              \c     suppress trailing newline 刪除尾部新行符
              \e     an escape character 字符 Esc
              \f     form feed 進紙
              \n     new line 新行符
              \r     carriage return 回車
              \t     horizontal tab 水斥鶖
              \v     vertical tab 豎直跳格
              \\     backslash 反斜槓
              \0nnn  一茪K比特字符,它的O八進制 nnn (零到三茪K進制數字)。
              \nnn   一茪K比特字符,它的O八進制 nnn (一到三茪K進制數字)。
              \xHH   一茪K比特字符,它的O十六進制        HH        (一到兩-
                     茪Q六進制數字)。

       enable [-adnps] [-f filename] [name ...]
              允許或禁止                shell                內建命令。禁止一-
              茪澈堜R令使得磁碟上的與內建命令同名
              的檔案得以運行,不必使用它的全路徑,即使                   shell
              一般在搜索磁碟上的命令之前 搜索內建命令。如果使用了 -n 選項,每
              name  都被禁止;否則,  name 被允許。例如,n使用 PATH 中搜索到的
              test 命令而不是 shell 內建的那一荂A可以運行 ``enable -n  test''.
              選項   -f   意味著從共享庫  filename  中加載新的內建命令  nameA
              如果系統支持動態加載的話。選項      -d      將刪除曾經用      -f
              加載的內建命令。如果沒有給出     name     參數,或者給出了    -p
              選項,將顯示  shell  內建命令的列表。如果沒有其他選項參數,  這-
              茼C表只包含所有被允許的        shell        內建命令;如果給出了
              -n,將只顯示被禁止的內建命令;如果給出了
              -a,顯示的列表中包含所有內建命令,還有命令是否被允許的指示;
              如果給出了  -s,輸出被制為  POSIX  special  內建命令。   返回O
              0,除非               name               不是              shell
              內建命令,或者從共享庫中加載新的內建命令時出錯。

       eval [arg ...]
              arg 被讀取並連結為單一的命令。這茤R令然後被  shell  讀取並執行,
              它的退出狀態被作為       eval      的藀^。如果沒有      args,
              或僅僅包含空參數, eval 返回 0。

       exec [-cl] [-a name] [command [arguments]]
              如果指定了    commandA    它將替換    shell。不會產生新的進程。
              arguments   成為   command   的參數。如果給出了  -l  選項,shell
              將在傳遞給     command     的第     0      荌捊e悼[上一茬s字符
              (dash,`-')。這樣做和  login(1)  相同。選項  -c  使得命令 command
              在一茠鰾藿狺什鶡獢C如果給出了 -aname  作為第  0
              荌捊撐雉執行的命令。如果由於某種鴞]  as  the zeroth argument
              to the executed command.  If command 不能被執行,非交互的  shell
              將退出,除非            shell            選項           execfail
              被設置為允許,這種情況下它返回失敗。如果命令不能執行,交互的
              shell  返回失敗。  如果沒有指定  command  任何咿w向對當前  shell
              發生作用,返回O 0。如果發生咿w向錯誤,返回狀態是 1。

       exit [n]
              使得     shell     以狀態      n      退出。如果忽略了      nA
              退出狀態是最後執行的命令的退出狀態。在   shell  終止前,對  EXIT
              的陷阱將被執行。

       export [-fn] [name[=word]] ...
       export -p
              給出的名稱                                                 names
              被標記為自動地導出到後續執行的命令的環境中。如果給出了        -f
              選項,名稱 names 指的是函數。如果沒有給出 namesA 或者如果給出了
              -p  選項,將列印在這  shell  中被導出的所有名字的列表。選項  -n
              使得以此為名的變量的導出屬性被刪除。         export         返回
              0,除非遇到了非法的選項,name   之一不是有效的   shell  變量名,
              或者給出了 -f 選項,而 name 不是一茖蝻C

       fc [-e ename] [-nlr] [first] [last]
       fc -s [pat=rep] [cmd]
              命令袨_。第一種形式中,歷史列表中從      firstlast
              S圍內的命令都被選取。    Firstlast    可以指定為字符串
              (可以定位最後一茈H此字符串開始的命令)    或者數字    (歷史列表中
              的索引,t數被當作相對當前命令號的偏移)。如果沒有指定      lastA
              它在列舉時被設為當前命令  (因此  ``fc  -l  -10''  將輸出最後  10
              條命令),其他情況下被設為     firstC    如果沒有指定    firstA
              它在編輯時被設為前一茤R令,列舉是設為 -16。

              選項        -n         使得列舉時不顯示命令號碼。選項         -r
              將命令順序進行掉換。如果給出了                                -l
              選項,命令將列舉在標準輸出上。否則,將啟動                 ename
              給出的編輯器,編輯包含這些命令的檔案。如果沒有給出       enameA
              將使用變量 FCEDIT 的A如果  FCEDIT  沒有定義就使用  EDITOR  的-
              C如果仍然沒有定義,將使用                                 viC
              編輯結束後,被編輯的命令將回顯並執行。

              第二種形式中,command  在每  pat  的實例被  rep  替換後   都被-
              奐s執行。使用這種特性時可以起一茼野峈漣O名:     ``r=fc    -s'',
              這樣輸入 ``r cc'' 將運行最後的以 ``cc''  開頭的命令,輸入  ``r''
              將奐s執行上一茤R令。

              如果使用第一種形式,返回O 0,除非遇到了非法的選項,或 firstlast    指定的歷史行數超出了S圍。如果給出了    -e    選項,返回-
              O最後執行的命令的返回A或著是失敗,如果臨時檔案中的命令
              執行出錯。如果使用第二種形式,返回狀態是奐s執行的命令,除非  cmd
              沒有指定一茼陵蘆瑣史行,這種情況下 fc 返回失敗。

       fg [jobspec]
              將     jobspec     恢復至前台,使它成為當前作業。如果    jobspec
              不存在,將使用  shell  意義上的當前作業   current   job。返回O
              被放到前台的命令的狀態,或者是失敗,如果在禁用作業控制時運行,或者
              在啟用作業控制時運行,但 jobspec 沒有指定有效的作業,或  jobspec
              指定了沒有使用作業控制的作業。

       getopts optstring name [args]
              getopts   由   shell   程式用來處理位置參數。   optstring  包含-
              n識別的選項字符;如果某茼r符跟隨著冒號,那麼這蚇龠絰愯一荌捊A
              需-
              n用空白和它隔離開。冒號和問號字符不能用作選項字符。每次它執行時,
              getopts   將下一蚇龠筒韘b   shell   變量   name   中,如果  name
              不存在就初始化它;下一胻處理的參數的索引放在變量 OPTIND 中。每次
              shell 或 shell 稿本被執行的時 OPTIND 被初始化為 1。當某蚇龠絰-
              n參數時, getopts 將那荌捊顐嚃僆q OPTARG 中。shell 不會自動姜m
              OPTINDgetopts 時,必須手動姜m它。

              當遇到選項結束的時唌Agetopts   以大於   0    的h出。    OPTIND
              被設置為第一茷D選項的參數的索引,name 被設置為 ?。

              getopts   通常解釋位置參數,但是如果   args   中給出了更多參數,
              getopts 將解釋它怴C

              getopts     能以兩種方式報告錯誤。如果     optstring     的第一-
              茼r符是冒號,將使用                                       silent
              安靜的錯誤報告。通常的操作中,遇到非法選項或缺少選項的參數時將列印出
              診斷信息。如果變量   OPTERR  被設置為  0,不會顯示錯誤消息,即使
              optstring 的第一茼r符不是冒號。

              如果發現了一茷D法的選項,     getoptsname     中置入
              ?,並且如果不是安靜模式的話,列印錯誤消息並取消           OPTARG
              的定義。如果 getopts  是安靜模式,找到的選項字符將置入  OPTARGgetopts   不是安靜模式,將向  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 使得輸出以一種可以-
              咱峎倏擗J的格式顯示。如果沒有給出參數,      或者只給出了     -l
              選項,已記錄的命令的信息將被列印出來。     返回真,除非     name
              沒有找到或給出了非法的選項。

       help [-s] [pattern]
              顯示關於內建命令的有用的信息。如果指定了  pattern  ()A help
              給出關於所有匹配                                         pattern
              的命令的詳細幫助;否則所有內建命令的幫助和                 shell
              控制結構將被列印出來。 選項 -s 制信息顯示為簡短的用法概n。  返回
              0,除非沒有匹配 pattern 的命令。

       history [n]
       history -c
       history -d offset
       history -anrw [filename]
       history -p arg [arg ...]
       history -s arg [arg ...]
              不帶選項的話,顯示帶行號的命令歷史列表。列出的行中含有         *
              的已經被蚹儮L。參數   n    使得只顯示最後    n    行。如果給出了
              filename,它被用做歷史檔名;沒有的話,將使用     HISTFILE    的-
              @為歷史檔名。選項如果給出,則具有下列意義:
              -c     清空歷史列表,刪除所有條目。
              -d offset
                     刪除 offset 位置的歷史條目。
              -a     將 ``新'' 的歷史條目 (自當前 bash 會話開始輸入的歷史命令)
                     追加到歷史檔案中。
              -n     將尚未從歷史檔案中讀取的歷史條目讀入當前歷史列表。這些行是當前
                     bash 會話開始之後,才追加到歷史檔案中的行。
              -r     讀取歷史檔案的內容,使用它怬@為當前歷史。
              -w     將當前歷史列表寫入歷史檔案,覆蓋歷史檔案的鴞酗漁e。
              -p     對後續的    args     進行歷史替換,在標準輸出上顯示結果。
                     不會將結果存入歷史列表。每   args   都必須被引用,來禁止
                     普通的命令擴展。
              -sargs
                     保存到歷史列表中,作為單獨的條目。歷史列表中的最後一-
                     茤R令在添加 args 之前被刪除。

              返回  0,除非遇到了非法的選項,讀/寫歷史檔案發生錯誤,在  -d  的
              參數中給出了無效的               offset,或者對               -p
              的後續參數進行歷史擴展失敗。

       jobs [-lnprs] [ jobspec ... ]
       jobs -x command [ args ... ]
              第一種形式列出正在運行的作業。選項具有下列意義:
              -l     普通信息之外,列出進程ID。
              -p     只列出作業的進程組 leader 的進程ID。
              -n     只顯示從上次使用者得知它-
                     怐漯牯A之後,狀態發生改變的作業的信息。
              -r     制只輸出正在運行的作業。
              -s     制只輸出停止的作業。

              如果給出了      jobspec      輸出被制為僅此作業的信息。     返回
              0,除非遇到了非法的選項或給出了非法的 jobspecC

              如果給出了 -x  選項,作業  jobscommandargs  中的任何
              jobspec   替換為相應的進程組ID,執行   commandA  傳遞參數  args
              給它並返回它的退出狀態。

       kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
       kill -l [sigspec | exit_status]
              向以  pidjobspec  為名的進程發送名為  sigspecsignum
              的信號。  sigspec  可以是一茷H號名稱,類似  SIGKILL 或信號編號;
              signum         是一茷H號編號。如果         sigspec         是一-
              茷H號名稱,那麼可以有,也可以沒有     SIG     前綴。如果沒有給出
              sigspecA       那麼假設是       SIGTERM-l
              將列出所有信號的名稱。如果給出                                -l
              時還有任何參數,將列出參數對應的信號名稱,返回狀態  0。  -lexit_status             參數是一蚍r,指定了一茷H號編號或被信號
              終止的進程的退出狀態C    kill    返回真,如果至少成功發送了一-
              茷H號,或者返回假,如果發生了錯誤或遇到了 非法的選項。

       let arg [arg ...]
              每   arg   都是n求犖滼N表達式   (參見  ND   (ARITHMETIC
              EVALUATION) 章節)。如果最後一荌捊 arg 求痕G是  0,  let  返回
              1;否則返回 0。

       local [option] [name[=value] ...]
              對每荌捊N創建一茼W為  name  的局部變量並賦予  valueC  option
              可以是任何 declare 接受的C當 local  用於函數內部時,它使得變量
              name       作用域局於函數和它的子進程。沒有操作數時,      local
              將局部變量的列表寫到標準輸出。不在函數內部使用    local    會導-
              P出錯。返回  0,除非在函數之外使用了 localnameA
              或者 name 是一茈u讀的變量。

       logout 退出登入 shell。

       popd [-n] [+n] [-n]
              從目錄棧中刪除條目。沒有參數的話,從棧中刪除頂層目錄,執行    cd
              切換到新的頂層目錄。如果給出了參數,有下列的含義:
              +n     刪除    dirs   給出的列表中從左數第   n   荓囓   (從   0
                     算起)。例如: ``popd  +0''  刪除第一茈媬,  ``popd  +1''
                     第二荂C
              -n     刪除    dirs   給出的列表中從右數第   n   荓囓   (從   0
                     算起)。例如: ``popd -0'' 刪除最後一茈媬,  ``popd  -1''
                     刪除佷臚G荂C
              -n     阻止從棧中刪除目錄之後改變目錄,這時只對棧進行操作。

              如果命令    popd   成功,還n執行一   dirspopd
              返回假,如果遇到了非法的選項,目錄棧為空,指定了目錄棧中不存在的條目,
              或者改變目錄失敗。

       printf format [arguments]
              在 format 控制下將格式化的 arguments 寫到標準輸出。 format 是一-
              茼r符串,包含三種類型的對象:普通字符,被簡單地
              複製到標準輸出,轉義字符,被轉換並複製到標準輸出,格式說明,每一-
               都使得相鄰的下一  argument  被列印出來。  在標準的  printf(1)
              格式之外,%b       使得      printf      展開相應      arguments
              中的反斜槓轉義序列,%q   使得   printf   將   相應的    argument
              以一種可以咱峎 shell 輸入的格式輸出。

              format  在需n時被咱峞A以處理所有的  arguments。  如果 format 需-
              n比所提供的更多的 arguments, 多出的格式說明視為已經提供了相應的
              0 峈臟r符串。 成功的話返回O 0,失敗則是非 0 C

       pushd [-n] [dir]
       pushd [-n] [+n] [-n]
              將目錄推入目錄棧,或者輪換棧中的內容,使棧的頂部成為當前工作目錄。
              沒有參數時,交換頂部兩茈媬,返回
              0,除非目錄棧為空。如果給出了參數, 它怞釵p下含義:
              +n     輪換棧中內容,使得  dirs 給出的列表中從左數第 n 茈媬 (從
                     0 數起) 成為目錄棧的頂部。
              -n     輪換棧中內容,使得 dirs 給出的列表中從右數第 n 茈媬  (從
                     0 數起) 成為目錄棧的頂部。
              -n     阻止向棧中添加目錄之後改變目錄,這時只對棧進行操作。
              dir    添加 dir 到棧頂,使得它成為新的當前工作目錄。

              如果命令   pushd  成功,還n執行一  dirspushd 返回 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  選項的參數中給出的檔案描z符  fd  中
              讀取,第一茧被賦予第一    name,    第二茧被賦予第二    name,
              以此類推,多餘的詞和其間的分隔符被賦予最後一              name.
              如果從輸入流讀入的詞數比名稱數少,剩餘的名稱被賦予空C      IFS
              中的字符被用來將行拆分成詞。           反斜槓字符            (\)
              被用於刪除讀取的下一字符的特殊含義,以及續行。
              如果給出了選項,將包含下列含義:
              -a aname
                     詞被賦以數組變量 aname 的連續的下標,從  0  開始。在賦新-
                     妨e, aname 被取消定義。其他 name 參數被忽略。
              -d delim
                     delim 的第一茼r符被用於結束輸入行,而不是新行符。
              -e     如果標準輸入來自終端,將使用 readline (參見上悸 READLINE
                     章節) 來獲得輸入行。
              -n nchars
                     read 讀入 nchars 茼r符後返回,而不是等待一整行輸入。
              -p prompt
                     讀取任何輸入之前,在標準錯誤顯示提示
                     prompt,末尾沒有新行符。
                     提示只有在輸入來自終端時才會顯示。
              -r     反斜槓不作為轉義字符。反斜槓被認為行的一部分。特殊地,一對反斜槓-新行符不作為續行。
              -s     安靜模式。如果輸入來自終端,字符將不會回顯。
              -t timeout
                     使得       read       超時並返回失敗,如果在      timeout
                     秒內沒有讀入完整的一行輸入。          如果           read
                     不是從終端或管道讀取輸入,那麼這蚇龠紫L效。
              -u fd  從檔案描z符 fd 中讀取輸入。

              如果沒有給出   namesA   讀取的一行將賦予變量   REPLY。  返回O
              0,除非遇到了  EOF,readP WAXFDkyz-u
             C

       readonly [-apf] [name ...]
              給出的    name   將被標記為只讀的;   names   的ㄞ鈳Q後來的賦-
              y句改變。如果給出了 -f 選項,names 對應的函數也被標記。選項 -a
              制變量只能是數組類型。如果沒有給出  name 參數,或者如果給出了 -p
              選項,將列印所有只讀的名稱。選項    -p     使得輸出以一種可以被-
              奐s用作輸入的格式顯示。  返回O 0,除非遇到了非法的選項, names
              之一不是有效的 shell 變量名,或選項  -f  中給出的  name  不是一-
              茖蝻C

       return [n]
              使得一茖蝻H指定         n         退出。如果忽略了        nA
              返回狀態是函數體中執行的最後一-
              茤R令的退出狀態。如果在函數外使用,但是是在一茈H   .    (source)
              命令執行的稿本內,它使得     shell     中止執行稿本,返回      n
              或稿本中執行的最後一-
              茤R令的退出狀態。如果在函數外使用,並且不是在以                .
              執行的稿本內,返回狀態是假。

       set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
              不帶選項時,shell 變量的名稱和N以一種可以咱峎倏擗J的格式顯示。
              輸出根據當前語言環境進行排序。指定了選項的時唌A它抭]置或取消了
              shell  的屬性。  處理完選項之後剩餘的任何參數都被作為位置參數的-
              Q賦A分別賦予        $1,         $2,         ...          $n.
              如果給出了選項,那麼具有以下含義:
              -a      自動將被-
                      蚹鴭帠衎堛瘍僆q和函數標誌為導出至後續命令的環境中。
              -b      I景作業結束時立即報告狀態,而不是在下次顯示主提示符前報告。只有在啟用作業控制時才有效。
              -e      立即退出,如果 simple command (簡單命令,參見上悸 SHELL
                      GRAMMAR            yk)             以非零h出。shell
                      不會退出,如果失敗的命令是 untilwhile 循環的一部分,
                      if 語句的一部分, &&|| 序列的一部分,或者命令的返回-
                      O由  !   翻轉得到。針對 ERR 的陷阱,如果設置的話,將在
                      shell 退出前執行。
              -f      禁止路徑擴展。
              -h      在查找並執行命令時,記住它怐漲鼽m。這是預設啟用的。
              -k      所有以賦-
                      y句形式出現的參數都被加入到命令執行的環境中,不僅是命令名前-
                      惆漕C
              -m      監視模式。作業控制被啟用。在支持這-
                      蚇龠答漕t統中,它在交互  shell 中是預設啟用的 (參見上悸
                      JOB                 CONTROL                 @~)-n      讀取命令,但不執行。這可以用在檢查                 shell
                      稿本中的語法錯誤。交互 shell 中它被忽略。
              -o option-name
                      option-name 可以是如下之一:
                      allexport-a 相同。
                      braceexpand-B 相同。
                      emacs   使用   emacs  樣式的命令行編輯界情C這蚇龠策b交互
                              shell  中預設啟用,除非  shell  以   --noediting
                              選項啟動。
                      errexit-e 相同。
                      hashall-h 相同。
                      histexpand-H 相同。
                      history 允許記錄命令歷史,如上z   HISTORY   中的描z。這-
                              蚇龠策b交互 shell 中預設啟用。
                      ignoreeof
                              它的效果是好像已經執行了       shell        命令
                              ``IGNOREEOF=10'' 一樣 (參見上悸 Shell Variables
                             q)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 樣式的命令行編輯界情C
                      xtrace-x 相同。
                      如果給出了不帶   option-name-o  選項,當前選項的-
                      N被列印出來。如果給出了不帶    option-name+o
                      選項,將在標準輸出顯示一系列可以垂媟礅e選項設定的    set
                      命令。
              -p      打開 privileged mode (Sv)C  在這蚍狾﹞丑A不會處理
                      $ENV$BASH_ENV          檔案,shell
                      函數不會從環境中繼承,環境中如果有變量       SHELLOPTS-p   選項,
                      將執行這些操作,有效使用者     ID     將設置為真實使用者
                      ID。如果啟動是給出了 -p  選項,有效使用者  ID  不會  被-
                      姜m。將這蚇龠腕鶶洧炱o有效使用者和組                  ID
                      被設置為真實使用者和組 ID。
              -t      讀取並執行一茤R令之後退出。
              -u      在進行參數擴展時,將未定義的變量作為錯誤。如果試圖擴展未定義的變量,shell
                      將輸出一條錯誤消息;      如果是非交互的     shell,shell
                      將以非零h出。
              -v      在讀取輸入的同時列印出來。
              -x      擴展每蚋眾璈R令之後,顯示            PS4             的-
                      A接著顯示命令和它擴展後的參數。
              -B      shell   執行花括號擴展   (參見上悸  Brace  Expansion)-C      如果設置的話,  bash  使用咿w向操作符  >,  >&,   和   <>
                      時,不會覆蓋已存在的檔案。可以使用咿w向操作符  >| 代替 >
                      來創建輸出檔案,從而繞過這茖謘C
              -H      允許  Enable  !   樣式的歷史替換。在交互   shell   中這-
                      蚇龠筋O預設啟用的。
              -P      如果設置的話,shell             在執行類似            cd
                      的,改變當前工作目錄的命令時,不會跟隨符號連接。它將使用物理的目錄結構來代替。預設情況下,
                      bash 在執行改變當前目錄的命令時跟隨路徑的邏輯鏈。
              --      如果這-
                      蚇龠筐S有參數,將取消位置參數的定義。否則,位置參數將設置為
                      arg,即使它怚H - 開始。
              -       通知信號的結束,使得所有剩餘的  arg  被賦予位置參數。 -x-v 選項被關閉。如果沒有 arg,位置參數將不會改變。

              這蚇龠給w設是關閉的,除非另外說明。使用     +      而不是      -
              使得這些選項被關閉。選項都可以作為參數,         在        shell
              啟動時指定。當前的選項集合可以從         $-          找到。返回-
              `是真,除非遇到了非法的選項。

       shift [n]
              從  n+1  ...  開始的選項被咿R名為 $1 ....$# 向下直到 $#-n+1
              的選項被取消定義。 n  必須是非t整數,小於或等於  $#。如果  n  是
              0,不會改變參數。如果沒有給出  nA  就假定它是  1。如果  n$#
              大,位置參數不會改變。返回j於  0,如果  n$#   大或小於
              0;否則返回 0。

       shopt [-pqsu] [-o] [optname ...]
              對於控制可選的  shell  行為的變量,改變它怐瘓。沒有選項或者有 -p
              選項時,將顯示所有可設置的選項列表,以及它怓O否已經設置的指示。
              -p                     使得輸出以一種可以被咱峎倏擗J的形式顯示。
              其他選項有如下含義:
              -s     允許(設置) 每 optname-u     禁止(取消) 每 optname-q     禁止通常的輸出     (安靜模式);返回狀態指示了     optname
                     是否被設置。  如果對  -q 給出了多 optname 參數,如果所有
                     optname 都被允許,返回N是 0; 否則返回非零C
              -ooptname 的陘澈堜R令 set-o 選項定義的C

              如果使用  -s-u   時沒有給出   optname   參數,顯示將分別-
              於被設置或被取消的選項。                     除非另外說明,shopt
              選項預設被禁止(取消)。

              返回b列出選項時是             0,如果所有              optname
              都被允許的話,否則是非零C  當設置或取消選項時,返回O 0,除非
              optname 是非法的 shell 選項。

              shopt 選項的列表是:

              cdable_vars
                      如果設置的話,內建命令                                cd
                      的參數如果不是目錄,就假定是一蚥僆q,它的O-
                      n切換到的目錄名。
              cdspell 如果設置的話,                                        cd
                      命令中目錄的細微拼寫錯誤能夠得以糾正。檢查的錯誤包括字符錯位,缺字符,
                      契_輸入同一字符。如果找到了正確的-
                      A將列印正確的檔名,命令將繼續。      這蚇龠等u能在交互
                      shell 中使用。
              checkhash
                      如果設置的話,bash
                      在執行命令前檢測散列表中的命令是否存在。         如果一-
                      茬Q散列的命令不再存在,將進行正常的路徑搜索。
              checkwinsize
                      如果設置的話,bash 在每條命令執行後檢測視窗大小,如果需-
                      n的話就更新 LINESCOLUMNS 的C
              cmdhist 如果設置的話,  bash  試著將一茼h行命令的所有行放到同一-
                      蚞史條目中。這樣使得 多行命令可以容易地奐s蚹鵅C
              dotglob 如果設置的話,         bash          會把以          `.'
                      開始的檔名包含在路徑名擴展的結果中。
              execfail
                      如果設置的話,非交互的                             shell
                      如果不能執行作為參數提供給內建命令                  exec
                      的檔案時將不會退出。交互的       shell      在      exec
                      失敗時不會退出。
              expand_aliases
                      如果設置的話,別名被擴展,就像上                ALIASES
                      中講到的一樣。這蚇龠策b交互 shell 中是預設啟用的。
              extglob 如果設置的話,將允許上        Pathname        Expansion
                      中提到的擴展模式匹配特性。
              histappend
                      如果設置的話,在    shell     退出時,歷史列表將追加到以
                      HISTFILE 的隻W的檔案之後,而不是覆蓋檔案。
              histreedit
                      如果設置的話,並且正在使用   readlinehistverify
                      如果設置的話,並且正在使用                    readlinereadline 編輯緩沖區,允許進行進一步的蚹鵅C
              hostcomplete
                      如果設置的話,並且正在使用        readlinebash
                      將試著對正在進行補全的包含   的詞進行主機名補全 (參見上-
                      悸 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
                      如果設置的話,並且正在使用                    readlinebash     不會搜索      PATH
                      來查找可能的補全。
              nocaseglob
                      如果設置的話,                                      bash
                      進行路徑擴展時使用大小寫不敏感方式匹配檔名(參見上悸
                      Pathname Expansion|Xi)nullglob
                      如果設置的話,                                      bash
                      將允許不匹配任何檔案的模式擴展為空字符串而不是它怞菬-
                      (參見上悸 Pathname Expansion|Xi)progcomp
                      如果設置的話,將啟用可編程補全功能            (參見上悸
                      Programmable Completion)。 這蚇龠筋O預設啟用的。
              promptvars
                      如果設置的話,提示字符串n經過上     PROMPTING     中描-
                      z的擴展,然後還n經過變量和參數擴展。這-
                      蚇龠筋O預設啟用的。
              restricted_shell
                      shell 設置這蚇龠窗A如果它是以受模式啟用的 (參見下悸-
                     shell(RESTRICTED        SHELL)        章節)。這蚧不能-
                      蚹鵅C在執行啟動檔案時,它不會被姜m,使得啟動檔案可以
                      得知 shell 是否是受的。
              shift_verbose
                      如果設置的話,內建命令   shift   在偏移量超過位置參數的-
                      蚍犰C印一條錯誤消息。
              sourcepath
                      如果設置的話,內建命令  source  (.)  使用   PATH   中的-
                      茯d找包含作為參數給出的檔案。這蚇龠給w設是啟用的。
              xpg_echo
                      如果設置的話,內建命令 echo 預設擴展反斜槓轉義序列。
       suspend [-f]
              掛起    shell    的執行,直到收到一   SIGCONT   信號。選項   -f
              表示如果這是一茧n入        shell,那麼不n提示,直接掛起。返回O
              0,除非     shell     是登入     shell     並且沒有指定     -ftest expr
       [ expr ]
              返回狀態   0   或   1,根據條件表達式    expr    的求茤w。每-
              蚞犑@符和操作數都必須是一茬瞈W的參數。表達式使用上  F式
              (CONDITIONAL EXPRESSIONS) 中的操作構造。

              表達式可以用下列操作符結合,以優先級的飢C出。
              ! expr 偺u,如果 expr 為假。
              ( expr )
                     返回 expr 的C括號可以用來超越操作符的一般優先級。
              expr1 -a expr2
                     偺u,如果 expr1expr2 都為真。
              expr1 -o expr2
                     偺u,如果 expr1expr2 為真。

              test[ 使用基於參數蚍漱@系列規則,對條件表達式進行求C

              0 arguments
                     表達式為假。
              1 argument
                     表達式為真,當且僅當參數非空。
              2 arguments
                     如果第一荌捊O    !,表達式為真,當且僅當第二荌捊高禳C
                     如果第一荌捊O上 F  (CONDITIONAL EXPRESSIONS)
                     中列出的單目條件運算符之一,表達式為真,當且僅當單目測試為真。
                     如果第一荌捊ㄛO合法的單目條件運算符,表達式為假。
              3 arguments
                     如果第二荌捊O上 F  (CONDITIONAL EXPRESSIONS)
                     中列出的二進制條件操作符之一,表達式的結果是使用第一和第三-
                     荌捊@為操作數的二進制測試的結果。       如果第一荌捊O
                     !,表達式O使用第二和第三荌捊i行雙參數測試的結果取反。
                     如果第一荌捊O      (,第三荌捊O      ),結果是對第二-
                     荌捊i行單參數測試的結果。  否則,表達式為假。這種情況下
                     -a-o 操作符被認為二進制操作符。
              4 arguments
                     如果第一荌捊O
                     !,結果是由剩餘參數組成的三參數表達式結果取反。
                     否則,表達式被根據上惘C出的優先級規則解釋並執行。
              5 或更多 arguments
                     表達式被根據上惘C出的優先級規則解釋並執行。

       times  對   shell  以及  shell  運行的進程,列印累p的使用者和系統時間。
              返回狀態是 0。

       trap [-lp] [arg] [sigspec ...]
              當      shell      收到信號      sigspec      時,命令       arg
              將被讀取並執行。如果沒有給出       arg      或者給出的是      -,
              所有指定的信號被設置為它怐漯鴝l (進入 shell 時它怐瘓)。如果 arg
              是空字符串, sigspec 指定的信號被 shell 和它啟動的命令忽略。如果
              arg      不存在,並且給出了      -p      那麼與每       sigspec
              相關聯的陷阱命令將被顯示出來。如果沒有給出任何參數,或只給出了
              -ptrap   將列印出與每茷H號編號相關的命令列表。每   sigspec
              可以是  <signal.h>  定義的信號名,或是一茷H號編號。 如果 sigspecEXIT (0),命令 arg 將在  shell  退出時執行。如果  sigspecDEBUG, 命令 arg 將在每蚋眾璈R令 (simple command,參見上悸 SHELL
              GRAMMAR)   之後執行。如果   sigspecERR,    命令    arg
              將在任何命令以非零h出時執行。如果失敗的命令是  untilwhile
              循環的一部分,     if     語句的一部分,      &&||
              序列的一部分,或者命令的返回O通過     !      轉化而來,    ERR
              陷阱將不會執行。選項 -l 使得 shell  列印信號名和對應編號的列表。
              shell                                    忽略的信號不能被捕捉或-
              姜m。在子進程中,被捕捉的信號在進程創建時被姜m為初始C    返回-
              偽瓷A如果 sigspec 非法;否則 trap 返回真。

       type [-aftpP] name [name ...]
              沒有選項時,指示每        name        將如何被解釋,如果用作一-
              茤R令名。如果使用了      -t      選項,       type       列印一-
              茼r符串,內容是如下之一:  alias, keyword, function, builtin, 或
              file       A       如果        name        分別是一荍O名,shell
              保留字,函數,內建命令或磁碟檔案。如果沒有找到            nameA
              那麼不會列印任何東西,返回退出狀態假。如果使用了 -p 選項,  type
              返回如果  name  作為命令名,將被執行的磁碟檔名;或者返回空,如果
              ``type -t name'' 不會返回 file.  選項 -P 選項強制對每 name 搜索
              PATHfile.  如果命令在散列中,
              -p-P   將列印散列的A而不是    PATH    中漸出現的那一-
              蚗仵蛂C如果使用了  -a  選項, type 列印所有包含可執行的名稱 name
              的場合。結果包括別名和函數,當且僅當沒有同時使用  -p  選項。使用
              -a      時不會查找散列中的命令表。選項     -f     阻止     shell
              進行查找,就像在內建命令       command       中一樣。       type
              返回真,如果找到了任何參數。什麼都沒找到則返回假。

       ulimit [-SHacdflmnpstuv [limit]]
              在支持它的系統上,對                                       shell
              和它啟動的進程,提供對可用資源的控制。    選項    -H-S
              指定為所給資源設定的硬性和柔性額。 硬性額在設置後不能增加;柔性-
              額可以增加,直到與硬性額相等。    如果沒有給出    -H-S
              選項,將同時設置硬性和柔性額。         limit        的i以是一-
              蚍r,單位是指定資源的單元A或者是特殊   hard,    soft,    或
              unlimited          之一,意思分別是當前硬性額,當前柔性額和沒有-
              額。如果忽略了  limitA  將列印出當前對資源的柔性額A除非給出了
              -H         選項。當指定多於一         資源時,額名稱和單位將在-
              妨e列印出來。其他選項按照如下意義解釋:
              -a     報告所有當前額
              -c     core 檔案的最大
              -d     進程數據段的最大
              -f     shell 創建的檔案的最大
              -l     記憶體中可以鎖定的最大
              -m     常駐記憶體的最大
              -n     打開的檔案描z符最大蚍 (大多數系統不允許設置這蚧)
              -p     管道大小,以 512 字節的塊為單位 (這蚧可能不能設置)
              -s     棧的最大
              -t     cpu 時間總數的最大A以秒p
              -u     使用者可以運行的最大進程數
              -v     shell 可用的虛擬記憶體總量的最大

              如果給出了  limitA  它將是指定資源的新額  (選項  -a   只顯示它-
              )。如果沒有給出選項,則假設有     -f-t 單位是 秒, -p 單位是 512 字節的塊蚍A -n-u
              是不可調節的C返回
              0,除非給出了非法的選項或參數,或者在設置新的額時發生了錯誤。

       umask [-p] [-S] [mode]
              使用者創建檔案的掩碼被設置為       mode.        如果        mode
              以數字開始,它被解釋為一茪K進制數;否則被解釋為類似於   chmod(1)
              接受的符號形式的模式掩碼。如果忽略了   modeA    將列印當前掩碼-
              C選項                                                       -S
              使得掩碼以符號形式列印;預設輸出是八進制數。如果給出了        -p
              選項,並且忽略了 modeA 輸出將是一種可以咱峎倏擗J的形式。返回O
              0,如果成功改變了模式,或者沒有給出 mode。 其他情況返回假。

       unalias [-a] [name ...]
              從已定義的別名列表中刪除           name。如果給出了           -a
              將刪除所有別名定義。返回O真,除非給出的                   name
              不是已定義的別名。

       unset [-fv] [name ...]
              將每 name 對應的變量或函數刪除。如果沒有給出選項,或者給出了 -v
              選項,               name              僅包括              shell
              變量。只讀的變量不能被取消定義。如果給出了 -f 選項, name 僅包括
              shell                              函數,函數的定義將被刪除。每-
              茬Q取消定義的變量或函數都被從後續命令的環境中刪除。 如果 RANDOM,
              SECONDS,   LINENO,  HISTCMD,  FUNCNAME,  GROUPS,  或者  DIRSTACK
              中的任何一茬Q取消定義,它戔N喪失特殊的屬性,即使它怮嶁茬Q-
              奐s定義。 退出狀態是真,除非 name 不存在或是只讀的。

       wait [n]
              等待指定的進程,返回它的終止狀態。   n   可以是進程   ID   或一-
              荍@業號;如果給出的是作業號,將等待作業的管道中所有進程。如果沒有給出
              nA   將等待所有當前處於激活狀態的子進程,返回狀態是  0。如果  n
              指定了不存在的進程或作業,返回狀態是
              127。否則,返回狀態是所等待的最後一荈i程或作業的退出狀態。

shell(RESTRICTED SHELL)
       如果  bashrbash 名稱啟動,或者啟動時使用了 -r 選項,那麼它成為受的
       shell。 受的 shell 一般用來建立一茪鬄郱  shell  受到更多控制的環境。
       它的行為與  bash  一P,除了下列行為是不允許的 (disallowed) 或不會運行的
       (not performed)。

       o      使用 cd 來改變路徑;

       o      設置或取消 SHELL, PATH, ENV, 或 BASH_ENV 變量的F

       o      指定的命令名中包含 / ;

       o      指定包含 / 的檔名作為傳遞給內建命令 .  的參數;

       o      指定包含斜槓  (slash)  的檔名作為  -p  選項的參數,傳遞給   hash
              內建命令;

       o      啟動時從 shell 環境中導入 (import) 函數定義;

       o      啟動時解釋 shell 環境中 SHELLOPTS 的F

       o      使用 >, >|, <>, >&, &>, 和 >> 等咿w向操作符咿w向輸出;

       o      使用 exec 內建命令來以另一茤R令替換 shell;

       o      使用 enable 內建命令的 -f-d 選項來增加和刪除內建命令;

       o      使用 enable 內建命令來允許和禁止 shell 內建命令;

       o      指定 command 內建命令的 -p 選項;

       o      使用 set +rset +o restricted 來關閉受模式。

       這些制在所有啟動檔案讀取之後才會生效。

       當一    shell    稿本作為一茤R令執行時   (參見上悸  RO(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
              系統S圍的初始化檔案,登入 shell 會執行它
       ~/.bash_profile
              茪H初始化檔案,登入 shell 會執行它
       ~/.bashrc
              茪H的每茈璊泵 shell 啟動時執行的檔案
       ~/.bash_logout
              茪H的登入 shell 清理檔案,當一茧n入 shell 退出時會執行它
       ~/.inputrc
              茪H的 readline 初始化檔案

@(AUTHORS)
       Brian Fox, Free Software Foundation
       bfox@gnu.org

       Chet Ramey, Case Western Reserve University
       chet@ins.CWRU.Edu

iBUGS (BUG REPORTS)
       如果你發現一        bash       中的       bug,你應當報告它。但是漸,
       你應當確定它真的是一 bug,並且它在你使用的最新版本的 bash 中存在。

       一旦你認定存在那樣一   bug,使用    bashbug    命令來提交一蚇欞~報告。
       如果你有固定住址,鼓勵你用郵政的方式提交一份!  建議和有關 bash 「齙v
       (`philosophical') 的 「錯誤報告」  可以寄給  bug-bash@gnu.org  或者貼到
       Usenet 新聞組 gnu.bash.bug 之上。

       所有錯誤報告應當包括:

       bash 的版本號
       硬體信息和作業系統
       用來編譯的編譯器
       對 bug 行為的描z
       可以激活這 bug 的一茧u小的稿本或者什麼 「秘訣」 (recipe)

       bashbug 會自動在它提供的錯誤報告模板中插入前三項。

       關於這份手冊隍熊論和錯誤報告請直接提交到 chet@ins.CWRU.Edu.

BUGS

       它太大了,並且有點慢。

       bash  和傳統版本的  sh 之間有一些細微的差別,大部分是因為 POSIX 規約的-
       n求。

       別名機制在一些應用中會混淆。

       Shell 內建命令和函數不可終止/奐s開始。

       組合的命令和使用         `a         ;          b          ;          c'
       形式的命令序列在進程試圖暫停時不能很好處理。       當一荈i程中止,shell
       會立即執行序列中的下一條命令。
       也可以將命令的序列放在圓括號中,來強制啟動子     shell,這樣就可以將它-
       怬@為一茬璊舅中謅F。

       在        $(...)        命令替換中的注釋不會被解釋,直到執行替換的時唌C
       這將延遲報錯,直到命令開始執行之後的一段時間。

       數組變量還不能導出 (export)。

[]
      KAv <bbbush@163.com>

[]
       2004.03.05

mlinuxan:
       http://cmpp.linuxforum.net