BASH(1)通用命令手冊BASH(1)
名稱 ? bash - GNU Bourne-Again SHell
概要 ? bash [選項] [文件]
版權 ? Bash是自由軟件基金會版權所有(C)1989-2011。
描述 ? Bash是一種兼容sh的命令語言解釋器,它執行從標準輸入或文件讀取的命令。Bash還包含了有用的功能 ? Korn和C shell(ksh和csh)。
Bash旨在成為IEEE POSIX規范(IEEE標準1003.1)的Shell和Utilities部分的一致實現。Bash可以配置為默認情況下,POSIX符合。
OPTIONS ? 在調用shell時,set builtin命令描述中記錄的所有單字符shell選項都可以用作選項。另外,bash ? 在調用時解釋以下選項:
-c string如果存在-c選項,則從字符串中讀取命令。如果在字符串后面有參數,則將它們分配給位置參數,從而開始0美元。-i如果存在-i選項,則shell是交互式的。-l使bash行為就像它作為登錄shell一樣被調用(參見下面的INVOCATION)。-r如果存在-r選項,則shell將受到限制(請參閱下面的RESTRICTED SHELL)。-s如果存在-s選項,或者在選項處理后沒有參數,則從標準輸入讀取命令。此選項允許位置調用交互式shell時要設置的參數。在標準輸出上打印所有以$開頭的雙引號字符串的-DA列表。這些是在語言翻譯時需要進行語言翻譯的字符串。租賃區域設置不是C或POSIX。這意味著-n選項; 沒有命令會被執行。[ - +] O [shopt_option]shopt_option是內置商店接受的shell選項之一(參見下面的SHELL BUILTIN命令)。如果存在shopt_option,則-O設置該值選項; + O取消它。如果未提供shopt_option,則shopt接受的shell選項的名稱和值將打印在標準輸出上。如果調用選項為+ O,輸出以可以重用為輸入的格式顯示。- A - 表示選項結束并禁用進一步的選項處理。 - 之后的任何參數都被視為文件名和參數。一個論點 - 是相當于 - 。Bash還解釋了許多多字符選項。在要識別單字符選項之前,這些選項必須出現在命令行上。--debugger安排在shell啟動之前執行調試器配置文件。打開擴展調試模式(請參閱shopt的extdebug選項說明內置于下方)。自卸寶串相當于-D,但輸出是GNU gettext po(便攜式對象)文件格式。自卸串相當于-D。--help在標準輸出上顯示用法消息并成功退出。--init-file文件--rcfile文件如果shell是交互式的,則從文件而不是標準的個人初始化文件?/ .bashrc執行命令(參見下面的INVOCATION)。- 登錄相當于-l。--noediting當shell是交互式時,不要使用GNU readline庫來讀取命令行。--noprofile不要讀取系統范圍的啟動文件/ etc / profile或任何個人初始化文件?/ .bash_profile,?/ .bash_login或?/ .profile。默認情況下,當bash作為登錄shell調用時,bash會讀取這些文件(請參閱下面的INVOCATION)。--norc如果shell是交互式的,請不要讀取和執行個人初始化文件?/ .bashrc。如果以sh調用shell,則默認情況下此選項處于啟用狀態。--posix更改bash的行為,其中默認操作與POSIX標準不同,以匹配標準(posix模式)。--restricted外殼受限制(見下面的限制外殼)。--rpm-要求生成shell腳本運行所需的文件列表。這意味著'-n'并且受到與編譯時錯誤檢查相同的限制檢查; 不解析命令替換,條件表達式和eval內置,因此可能會遺漏某些依賴項。--verbose相當于-v。- 版在標準輸出上顯示此bash實例的版本信息并成功退出。
ARGUMENTS ? 如果在選項處理之后仍然存在參數,并且既未提供-c選項也未提供-s選項,則假定第一個參數是包含shell的文件的名稱 ? 命令。如果以這種方式調用bash,則將$ 0設置為文件名,并將位置參數設置為其余參數。Bash讀取并執行 ? 來自此文件的命令,然后退出。Bash的退出狀態是腳本中執行的最后一個命令的退出狀態。如果未執行任何命令,則退出狀態為0。 ? 首先嘗試在當前目錄中打開文件,如果沒有找到文件,則shell在PATH中搜索腳本中的目錄。
INVOCATION ? 登錄shell是其參數零的第一個字符是 - 或者以--login選項開頭的一個。
交互式shell是在沒有非選項參數的情況下啟動的,沒有-c選項,其標準輸入和錯誤都連接到終端(由isatty(3)),或者以-i選項開頭的。如果bash是交互式的,則設置PS1和$ - 包括i,允許shell腳本或啟動文件測試此狀態。以下段落描述了bash如何執行其啟動文件。如果存在任何文件但無法讀取,則bash報告錯誤。Tildes在文件中擴展在擴展部分的Tilde擴展下面描述的名稱。當bash作為交互式登錄shell或作為具有--login選項的非交互式shell調用時,它首先從文件/ etc / profile中讀取并執行命令,如果該文件存在。讀取該文件后,它按順序查找?/ .bash_profile,?/ .bash_login和?/ .profile,并從第一個文件中讀取并執行命令存在且可讀。啟動shell以禁止此行為時,可以使用--noprofile選項。當登錄shell退出時,如果文件存在,bash將從文件?/ .bash_logout和/etc/bash.bash_logout讀取并執行命令。當啟動不是登錄shell的交互式shell時,如果該文件存在,bash將從?/ .bashrc讀取并執行命令。這可以通過使用來抑制--norc選項。--rcfile文件選項將強制bash從文件而不是?/ .bashrc讀取和執行命令。例如,當以非交互方式啟動bash以運行shell腳本時,它會在環境中查找變量BASH_ENV,如果它出現在那里則展開其值,并且使用擴展值作為要讀取和執行的文件的名稱。Bash的行為就像執行了以下命令一樣:if [-n“$ BASH_ENV”]; 然后 。“$ BASH_ENV”; 科幻但PATH變量的值不用于搜索文件名。如果使用名稱sh調用bash,它會嘗試盡可能接近地模仿sh的歷史版本的啟動行為,同時符合POSIX標準好。當作為交互式登錄shell或帶有--login選項的非交互式shell調用時,它首先嘗試從/ etc / profile中讀取和執行命令,?/ .profile,按此順序。--noprofile選項可用于禁止此行為。當作為名為sh的交互式shell調用時,bash會查找該變量ENV,如果已定義,則展開其值,并使用擴展值作為要讀取和執行的文件的名稱。因為以sh調用的shell不會嘗試讀取和執行來自任何其他啟動文件的可愛命令,--rcfile選項無效。使用名稱sh調用的非交互式shell不會嘗試讀取任何其他啟動文件。當以sh調用時,bash在讀取啟動文件后進入posix模式。當bash以posix模式啟動時,與--posix命令行選項一樣,它遵循啟動文件的POSIX標準。在此模式下,交互式shell擴展了ENV變量和命令從名稱為擴展值的文件中讀取和執行。沒有讀取其他啟動文件。Bash嘗試確定何時將其標準輸入連接到網絡連接,如遠程shell守護程序(通常為rshd)或安全shell守護進程sshd。如果bash確定它以這種方式運行,它會從?/ .bashrc中讀取并執行命令,如果該文件存在且可讀的話。它會如果作為sh調用,則不要這樣做。--norc選項可用于禁止此行為,--rcfile選項可用于強制讀取另一個文件,但rshd不會通常使用這些選項調用shell或允許指定它們。如果以有效用戶(組)id不等于真實用戶(組)id啟動shell,并且未提供-p選項,則不讀取任何啟動文件,shell函數tions不是從環境繼承的,SHELLOPTS,BASHOPTS,CDPATH和GLOBIGNORE變量,如果它們出現在環境中,則被忽略,并且有效用戶ID設置為真實用戶ID。如果在調用時提供了-p選項,則啟動行為相同,但不會重置有效用戶標識。
定義 ? 本文檔的其余部分使用以下定義。 ? 空白或空格。 ? 單詞由shell視為單個單元的字符序列。也稱為令牌。 ? name僅由字母數字字符和下劃線組成的單詞,以字母字符或下劃線開頭。也稱為標識符。 ? 元字符 ? 一個字符,當不加引號時,分隔單詞。以下之一: ? | &; ()<>空格標簽 ? 控制操作員 ? 執行控制功能的令牌。它是以下符號之一: ? || &&&; ;; ()| |&<newline>
保留字 ? 保留字是對shell具有特殊含義的字。以下單詞在未加引號時被識別為保留,并且是簡單命令的第一個單詞 ? (參見下面的SHELL GRAMMAR)或案例的第三個詞或命令:
!案例做完elif else esac fi for function如果在select中那么直到{{time] [[]]
SHELL GRAMMAR 簡單的命令 ? 一個簡單的命令是一系列可選的變量賦值,后跟空格分隔的單詞和重定向,并由控制操作符終止。第一個字 ? 指定要執行的命令,并作為參數零傳遞。其余的單詞作為參數傳遞給調用的命令。
簡單命令的返回值是其退出狀態,如果命令由信號n終止,則返回128 + n。
管道 ? 管道是由一個控制操作符|分隔的一個或多個命令的序列 或|&。管道的格式是:
[時間[-p]] [!]命令[[|?|&] command2 ...]命令的標準輸出通過管道連接到command2的標準輸入。此連接在命令指定的任何重定向之前執行(請參閱下面的重定向)。如果使用|&,則命令的標準錯誤通過管道連接到command2的標準輸入; 它是2>&1 |的簡寫。這隱含的重新在命令指定的任何重定向之后執行標準錯誤的反轉。除非啟用了pipefail選項,否則管道的返回狀態是最后一個命令的退出狀態。如果啟用了pipefail,則管道的返回狀態為以非零狀態退出的最后一個(最右邊)命令的值,如果所有命令都成功退出,則返回零。如果保留字!在管道之前,退出狀態該流水線是如上所述的退出狀態的邏輯否定。shell在返回值之前等待管道中的所有命令終止。如果時間保留字在管道之前,則在管道終止時報告其執行所消耗的經過時間以及用戶和系統時間。-p選項將輸出格式更改為POSIX指定的格式。當shell處于posix模式時,如果下一個標記以“ - ”開頭,則它不會將時間識別為保留字。TIMEFORMAT變量可以設置為格式字符串,指定如何顯示定時信息; 請參閱Shell變量下的TIMEFORMAT說明下面。當shell處于posix模式時,時間可以跟在換行符之后。在這種情況下,shell顯示shell及其子級占用的總用戶和系統時間。TIMEFORMAT變量可用于指定時間信息的格式。管道中的每個命令都作為單獨的進程執行(即,在子shell中)。
清單 ? 列表是由一個運算符;,&,&&或||分隔的一個或多個管道的序列,并且可選地以;,&或<newline>之一終止。
在這些列表運算符中,&&和|| 具有相同的優先權,其次是; 和&,具有相同的優先權。一個或多個換行符的序列可以出現在列表而不是分號中以分隔命令。如果命令由控制操作符&終止,則shell在子shell中在后臺執行命令。shell不會等待命令完成,并且返回狀態為0.命令由a分隔; 按順序執行; shell等待每個命令依次終止。返回狀態是退出狀態執行的最后一個命令。AND和OR列表是由&&和||分隔的一個或多個管道的序列 分別控制運營商。AND和OR列表以左關聯性執行。AND列表具有表單command1 && command2當且僅當command1返回退出狀態為零時,才執行command2。OR列表具有表單command1 || 命令2當且僅當command1返回非零退出狀態時才執行command2。AND和OR列表的返回狀態是在中執行的最后一個命令的退出狀態名單。
復合命令 ? 復合命令是以下之一:
(list)列表在子shell環境中執行(參見下面的COMMAND EXECUTION ENVIRONMENT)。影響shell環境的變量賦值和內置命令可以命令完成后不會保持有效。返回狀態是列表的退出狀態。{list; }list只是在當前的shell環境中執行。列表必須以換行符或分號結尾。這稱為組命令。返回狀態是列表的退出狀態。請注意,與元字符(和)不同,{和}是保留字,必須出現在允許保留字被識別的地方。識別的。由于它們不會導致單詞分隔,因此必須通過空格或其他shell元字符將它們與列表分開。((表達))根據ARITHMETIC EVALUATION下面描述的規則評估表達式。如果表達式的值不為零,則返回狀態為0;否則返回狀態為1.這與let“expression”完全相同。[[表達]]根據條件表達式表達式的求值,返回0或1的狀態。表達式由CONDI-下面描述的原色組成 - TIONAL EXPRESSIONS。不對[[和]]之間的單詞執行單詞拆分和路徑名擴展; 波浪擴展,參數和變量擴展,執行算術擴展,命令替換,進程替換和引用刪除。諸如-f之類的條件運算符必須不加引號才能被識別作為初選。與[[,<和>運算符一起使用時,使用當前語言環境按字典順序排序。當使用==和!=運算符時,運算符右側的字符串被視為一個模式,并根據下面描述的模式進行匹配匹配。如果啟用了shell選項nocasematch,則執行匹配而不考慮字母字符的情況。如果是字符串,則返回值為0匹配(==)或不匹配(!=)模式,否則為1。可以引用模式的任何部分以強制它作為字符串匹配。可以使用另一個二元運算符=?,其優先級與==和!=相同。使用時,運算符右側的字符串被視為a擴展正則表達式并相應地匹配(如在正則表達式(3)中)。如果字符串與模式匹配,則返回值為0,否則返回1。如果經常表達式在語法上是不正確的,條件表達式的返回值是2.如果啟用了shell選項nocasematch,則執行匹配關于字母字符的情況。可以引用模式的任何部分以強制它作為字符串匹配。子字符串與括號內的子字符串匹配正則表達式中的壓力保存在數組變量BASH_REMATCH中。索引為0的BASH_REMATCH元素是字符串匹配的部分整個正則表達式。索引為n的BASH_REMATCH元素是與第n個帶括號的子表達式匹配的字符串部分。可以使用以下運算符組合表達式,按優先級遞減順序列出:(表達)返回表達式的值。這可以用于覆蓋運算符的正常優先級。!表達如果表達式為false,則為True。expression1 && expression2如果expression1和expression2都為true,則為True。expression1 || 表達式2如果expression1或expression2為true,則為True。&&和|| 如果expression1的值足以確定整個條件表達式的返回值,則運算符不會計算expression2。名稱[[in [word ...]]; ]列表; DONE擴展后面的單詞列表,生成項目列表。變量名依次設置到該列表的每個元素,并且每次都執行列表。如果省略in字,for命令對每個設置的位置參數執行一次列表(參見下面的參數)。返回狀態是退出狀態執行的最后一個命令。如果后續項目的擴展導致空列表,則不執行任何命令,返回狀態為0。for((expr1; expr2; expr3)); 做清單; DONE首先,根據算術評估下面描述的規則評估算術表達式expr1。然后算術表達式expr2進行評估反復進行,直到評估為零。每次expr2計算為非零值時,執行列表并計算算術表達式expr3。如果有的話表達式被省略,它的行為就好像它的計算結果為1.返回值是執行列表中最后一個命令的退出狀態,如果是任何一個,則返回false表達式無效。選擇名稱[在單詞]; 做清單; DONE擴展后面的單詞列表,生成項目列表。擴展單詞集打印在標準錯誤上,每個單詞前面都有一個數字。如果在word中省略,打印位置參數(參見下面的參數)。然后顯示PS3提示并從標準輸入讀取一行。如果line由與顯示的單詞之一對應的數字組成,然后name的值設置為該單詞。如果該行為空,則單詞和提示符為又玩了。如果讀取EOF,則命令完成。讀取的任何其他值都會將name設置為null。讀取的行保存在變量REPLY中。清單是在每次選擇之后執行,直到執行break命令。select的退出狀態是列表中執行的最后一個命令的退出狀態,如果沒有,則為零mands被執行了。[[(] pattern [| pattern] ...)列表中的案例單詞;; ] ... esaccase命令首先擴展word,并嘗試依次使用與路徑名擴展相同的匹配規則將其與每個模式匹配(請參閱路徑名擴展)下面)。使用波浪擴展,參數和變量擴展,算術替換,命令替換,過程替換和引用來擴展該詞去除。檢查的每個模式都使用波形擴展,參數和變量擴展,算術替換,命令替換和過程替換來擴展。形式予以。如果啟用了shell選項nocasematch,則執行匹配而不考慮字母字符的情況。找到匹配后,相關執行自選列表。如果;; 使用運算符,在第一個模式匹配后不會嘗試后續匹配。使用;代替;; 導致執行繼續與下一組模式相關聯的列表。使用;;代替;; 導致shell測試語句中的下一個模式列表(如果有)和在成功匹配時執行任何關聯列表。如果沒有模式匹配,則退出狀態為零。否則,它是執行的最后一個命令的退出狀態名單。如果列表; 然后列出; [elif list; 然后列出; ] ... [else list; ] fi執行if列表。如果其退出狀態為零,則執行then列表。否則,每個elif列表依次執行,如果其退出狀態為零,則執行相應的列表并完成命令。否則,執行else列表(如果存在)。退出狀態是最后一個退出狀態執行命令,如果沒有條件測試,則為零。而list-1; 做list-2; DONE直到list-1; 做list-2; DONE只要列表list-1中的最后一個命令返回退出狀態為零,while命令就會連續執行列表list-2。until命令是相同的到while命令,除了測試被否定; 只要list-1中的最后一個命令返回非零退出狀態,就會執行list-2。退出狀態while和until命令是list-2中執行的最后一個命令的退出狀態,如果沒有執行則返回零。
協進程 ? coprocess是一個shell命令,前面是coproc保留字。協同進程在子shell中異步執行,就像命令已以&結束一樣 ? 控制操作符,在執行的shell和協同進程之間建立雙向管道。
協同進程的格式是:coproc [NAME]命令[重定向]這將創建一個名為NAME的協同進程。如果未提供NAME,則默認名稱為COPROC。如果command是一個簡單的命令,則不得提供NAME(見上文); 除此以外,它被解釋為簡單命令的第一個單詞。執行coproc時,shell會在上下文中創建一個名為NAME的數組變量(請參閱下面的數組)正在執行的shell。命令的標準輸出通過管道連接到執行shell中的文件描述符,該文件描述符分配給NAME [0]。命令的標準輸入通過管道連接到執行shell中的文件描述符,并且該文件描述符被分配給NAME [1]。這個管道建立了在命令指定的任何重定向之前(請參閱下面的REDIRECTION)。文件描述符可以用作shell命令和使用標準的重定向的參數單詞擴展。為執行協同進程而生成的shell的進程ID可用作變量NAME_PID的值。wait builtin命令可能用于等待協處理器終止。協同進程的返回狀態是命令的退出狀態。
殼函數定義 ? shell函數是一個被稱為簡單命令的對象,它使用一組新的位置參數執行復合命令。Shell函數聲明為 ? 如下:
name()compound-command [重定向]函數名[()]復合命令[重定向]這定義了一個名為name的函數。保留字功能是可選的。如果提供了功能保留字,則括號是可選的。的身體function是復合命令compound-command(參見上面的Compound命令)。該命令通常是{和}之間的命令列表,但可以是任何命令在上面的復合命令下列出。只要將name指定為簡單命令的名稱,就會執行compound-command。任何重定向(請參閱重定向在執行該功能時執行定義功能時指定的)。除非發生語法錯誤,否則函數定義的退出狀態為零或者已經存在具有相同名稱的只讀函數。執行時,函數的退出狀態是正文中執行的最后一個命令的退出狀態。(參見下面的功能。)
評論 ? 在非交互式shell中,或者在內置shopt的interactive_comments選項的交互式shell中(參見下面的SHELL BUILTIN命令), ? 使用#導致該行以及該行上的所有剩余字符被忽略。未啟用interactive_comments選項的交互式shell不允許 ? 評論。默認情況下,interactive_comments選項在交互式shell中處于啟用狀態。
QUOTING ? 引用用于刪除shell中某些字符或單詞的特殊含義。引用可用于禁用特殊字符的特殊處理,以預先 ? 使保留字不被識別,并防止參數擴展。
上面在定義下列出的每個元字符對shell具有特殊含義,如果要表示它,則必須引用它。當使用命令歷史擴展工具時(參見下面的歷史擴展),必須引用歷史擴展字符,通常為!以防止歷史記錄擴張。有三種引用機制:轉義字符,單引號和雙引號。未引用的反斜杠(\)是轉義字符。它保留了下一個字符的字面值,但<newline>除外。如果是\ <換行符>對出現,反斜杠本身沒有引用,\ <newline>被視為一個行繼續(即,它從輸入流中刪除并被有效忽略)。用單引號括起字符可以保留引號中每個字符的字面值。單引號之間可能不會出現單引號,即使在前面引用也是如此通過反斜杠。用雙引號括起字符會保留引號內所有字符的字面值,但$,`,\除外,并且在啟用歷史記錄擴展時,!字符$和`在雙引號中保留其特殊含義。反斜杠只有在遵循下列特征之一時才保留其特殊含義ters:$,`,“,\或<newline>。雙引號可以用雙引號引用,前面加一個反斜杠。如果啟用,將執行歷史記錄擴展一個!出現在雙引號中的是使用反斜杠轉義的。之前的反斜杠!沒有刪除。在雙引號中,特殊參數*和@具有特殊含義(參見下面的參數)。$'string'形式的單詞是專門處理的。單詞擴展為字符串,替換為ANSI C標準指定的反斜杠轉義字符。反斜杠轉義序列(如果存在)按如下方式解碼:警報(鈴聲)\ b退格。\ E\ E逃脫角色\ f表格飼料\ n新行\ r \ n回車\ t水平標簽\ v垂直標簽\\反斜杠單引號“雙引號\ nnnn八位字符,其值為八進制值nnn(一到三位數)\ xHH八位字符,其值為十六進制值HH(一個或兩個十六進制數字)\ uHHHH Unicode(ISO / IEC 10646)字符,其值為十六進制值HHHH(一到四個十六進制數字)\ UHHHHHHHHUnicode(ISO / IEC 10646)字符,其值為十六進制值HHHHHHHH(一到八個十六進制數字)\ cx是control-x字符擴展結果是單引號,好像美元符號不存在一樣。帶有美元符號($“string”)的雙引號字符串將導致根據當前語言環境轉換字符串。如果當前語言環境是C或POSIX,則美元符號被忽略。如果翻譯并替換字符串,則替換為雙引號。
參數 ? 參數是存儲值的實體。它可以是特殊參數下面列出的名稱,數字或特殊字符之一。變量是一個參數 ? 用名字表示。變量具有值和零個或多個屬性。使用declare builtin命令分配屬性(請參閱SHELL BUILTIN COM中的聲明) ? MANDS)。
如果已為其分配了值,則會設置該參數。空字符串是有效值。設置變量后,只能使用unset builtin命令取消設置(參見SHELL BUILTIN COMMANDS如下)。可以通過表單的聲明來分配變量名稱= [值]如果未給出值,則為變量分配空字符串。所有值都進行波形擴展,參數和變量擴展,命令替換,算術擴展和報價刪除(參見下面的擴展)。如果變量的整數屬性已設置,則即使$((...))也將值計算為算術表達式不使用擴展(參見下面的算術擴展)。除了“$ @”之外,不執行單詞拆分,如下面特殊參數下所述。路徑名不進行擴展。賦值語句也可以作為別名,聲明,排版,導出,只讀和本地內置命令的參數出現。在賦值語句為shell變量或數組索引賦值的上下文中,+ =運算符可用于追加或添加到變量的prev-價值。當+ =應用于已設置整數屬性的變量時,將值計算為算術表達式并添加到變量的當前值值,也被評估。當使用復合賦值將+ =應用于數組變量時(請參閱下面的數組),變量的值不會被取消(就像使用時一樣)=),并且新值將附加到數組,從大于數組的最大索引(對于索引數組)開始,或作為附加鍵值對添加到數組中ciative數組。應用于字符串值變量時,會擴展值并將其附加到變量的值。
位置參數 ? 位置參數是由一個或多個數字表示的參數,而不是單個數字0.位置參數是從shell的參數分配的。 ? 調用,可以使用set builtin命令重新分配。可能無法使用賦值語句將位置參數分配給它們。位置參數是時間 - ? 執行shell函數時,rarily被替換(參見下面的功能)。
當展開由多個數字組成的位置參數時,必須將其括在大括號中(參見下面的擴展)。
特殊參數 ? shell專門處理幾個參數。這些參數只能被引用; 不允許分配給他們。 ? 從一個開始擴展到位置參數。當擴展發生在雙引號內時,它會擴展為具有每個參數值的單個單詞 ? 由IFS特殊變量的第一個字符分隔。也就是說,“$ ”相當于“$ 1c $ 2c ...”,其中c是IFS變量值的第一個字符。 ? 能夠。如果未設置IFS,則參數由空格分隔。如果IFS為null,則參數將在不插入分隔符的情況下連接。 ? @從一個開始擴展到位置參數。當擴展發生在雙引號內時,每個參數都會擴展為單獨的單詞。也就是說,“$ @”是 ? 相當于“$ 1”“$ 2”...如果雙引號擴展發生在一個單詞中,則第一個參數的擴展與原始的起始部分相連 ? nal word,并且最后一個參數的擴展與原始單詞的最后部分連接。當沒有位置參數時,“$ @”和$ @展開到 ? 沒有(即,他們被刪除)。 ? #擴展為十進制的位置參數數。 ? ?擴展到最近執行的前臺管道的退出狀態。 ? - 擴展為調用時指定的當前選項標志,set builtin命令或shell本身設置的那些(例如-i選項)。 ? $擴展為shell的進程ID。在()子shell中,它擴展為當前shell的進程ID,而不是子shell。 ? !擴展到最近執行的后臺(異步)命令的進程ID。 ? 0擴展為shell或shell腳本的名稱。這是在shell初始化時設置的。如果使用命令文件調用bash,則將$ 0設置為該名稱 ? 文件。如果使用-c選項啟動bash,則將$ 0設置為要執行的字符串之后的第一個參數(如果存在)。否則,它被設置為 ? 用于調用bash的文件名,由參數zero指定。 ? _在shell啟動時,設置為用于調用在環境或參數列表中傳遞的正在執行的shell或shell腳本的絕對路徑名。隨后, ? 擴展后擴展到上一個命令的最后一個參數。同時設置為用于調用已執行并放置在環境中的每個命令的完整路徑名 ? 導出到該命令。檢查郵件時,此參數保存當前正在檢查的郵件文件的名稱。
殼變量 ? 以下變量由shell設置:
BASH擴展為用于調用此bash實例的完整文件名。BASHOPTS以冒號分隔的已啟用shell選項列表。列表中的每個單詞都是shopt內置命令的-s選項的有效參數(請參閱SHELL BUILTIN命令下面)。BASHOPTS中出現的選項是shopt報告的選項。如果此變量在bash啟動時的環境中,則每個shell選項都在列表將在讀取任何啟動文件之前啟用。此變量是只讀的。BASHPID擴展到當前bash進程的進程ID。這在某些情況下不同于$$,例如不需要bash重新初始化的子shell化的。BASH_ALIASES一個關聯數組變量,其成員對應于別名內置維護的別名內部列表。添加到此數組的元素顯示在別名列表; 取消設置數組元素會導致從別名列表中刪除別名。BASH_ARGC一個數組變量,其值是當前bash執行調用堆棧的每個幀中的參數數。當前子例程的參數數量(使用。或source執行的shell函數或腳本)位于堆棧的頂部。執行子程序時,會傳遞傳遞的參數數量BASH_ARGC。shell僅在處于擴展調試模式時才設置BASH_ARGC(請參閱下面內置shopt的extdebug選項的說明)BASH_ARGV包含當前bash執行調用堆棧中所有參數的數組變量。最后一個子程序調用的最后一個參數位于頂部堆; 初始調用的第一個參數位于底部。執行子程序時,提供的參數將被推送到BASH_ARGV。外殼設置BASH_ARGV僅在擴展調試模式下(參見下面內置shopt的extdebug選項說明)BASH_CMDS一個關聯數組變量,其成員對應于由哈希內置維護的命令的內部哈希表。出現添加到此數組的元素在哈希表中; unsetting數組元素導致從哈希表中刪除命令。BASH_COMMAND當前正在執行或即將執行的命令,除非shell正在執行命令作為陷阱的結果,在這種情況下,它是命令執行 - 在陷阱的時候。BASH_EXECUTION_STRING-c調用選項的命令參數。BASH_LINENO一個數組變量,其成員是源文件中的行號,其中調用了FUNCNAME的每個相應成員。$ {BASH_LINENO [$ i]}是中的行號源文件($ {BASH_SOURCE [$ i + 1]})其中調用$ {FUNCNAME [$ i]}(如果在另一個shell函數中引用,則為$ {BASH_LINENO [$ i-1]})。使用LINENO獲取當前行號。BASH_REMATCH一個數組變量,其成員由=?二元運算符分配給[[條件命令。索引為0的元素是字符串匹配的部分整個正則表達式。索引為n的元素是與第n個帶括號的子表達式匹配的字符串部分。此變量是只讀的。BASH_SOURCE一個數組變量,其成員是源文件名,其中定義了FUNCNAME數組變量中相應的shell函數名。shell函數$ {FUNCNAME [$ i]}在$ {BASH_SOURCE [$ i]}文件中定義,并從$ {BASH_SOURCE [$ i + 1]}調用。BASH_SUBSHELL每次生成子shell或子shell環境時增加1。初始值為0。BASH_VERSINFO一個只讀數組變量,其成員包含此bash實例的版本信息。分配給數組成員的值如下:BASH_VERSINFO [0]主要版本號(發行版)。BASH_VERSINFO [1]次要版本號(版本)。BASH_VERSINFO [2]補丁級別。BASH_VERSINFO [3]構建版本。BASH_VERSINFO [4]發布狀態(例如,beta1)。BASH_VERSINFO [5] MACHTYPE的值。BASH_VERSION擴展為描述此bash實例版本的字符串。COMP_CWORD包含當前光標位置的單詞$ {COMP_WORDS}的索引。此變量僅在可編程補充調用的shell函數中可用。設施(見下面的可編程完成)。COMP_KEY用于調用當前完成函數的鍵(或鍵序列的最終鍵)。COMP_LINE當前命令行。此變量僅在可編程完成工具調用的shell函數和外部命令中可用(請參閱可編程完成下面)。COMP_POINT當前光標位置相對于當前命令開頭的索引。如果當前光標位置在當前命令的末尾,則此變量的值等于$ {#COMP_LINE}。此變量僅在可編程完成調用的shell函數和外部命令中可用設施(見下面的可編程完成)。COMP_TYPE設置為與導致調用完成函數的嘗試完成類型相對應的整數值:TAB,正常完成,?,用于列出連續標簽之后的完成,!,用于列出部分單詞完成的備選方案,@,如果單詞未被修改則列出完成,或%,用于菜單補充灰。此變量僅在可編程完成工具調用的shell函數和外部命令中可用(請參閱下面的可編程完成)。COMP_WORDBREAKS執行單詞完成時,readline庫將其視為單詞分隔符的字符集。如果COMP_WORDBREAKS未設置,則會失去其特殊的適當性 - 關系,即使它隨后被重置。COMP_WORDS一個數組變量(參見下面的數組),由當前命令行中的各個單詞組成。該行被分成單詞,因為readline將使用它來分割它COMP_WORDBREAKS如上所述。此變量僅在可編程完成工具調用的shell函數中可用(請參閱可編程完成下面)。COPROC一個數組變量(參見下面的數組),用于保存文件描述符以輸出和輸入未命名的協同進程(參見上面的Coprocesses)。DIRSTACK包含目錄堆棧當前內容的數組變量(請參閱下面的數組)。目錄按照它們顯示的順序出現在堆棧中dirs builtin。分配給此數組變量的成員可用于修改堆棧中已有的目錄,但必須使用pushd和popd內置函數來添加并刪除目錄。對此變量的賦值不會更改當前目錄。如果未設置DIRSTACK,它將丟失其特殊屬性,即使它是后續重置。EUID擴展為當前用戶的有效用戶ID,在shell啟動時初始化。這個變量是只讀的。FUNCNAME一個數組變量,包含當前在執行調用堆棧中的所有shell函數的名稱。索引為0的元素是當前正在執行的任何元素shell函數。最底部的元素(索引最高的元素)是“main”。此變量僅在執行shell函數時存在。分配給FUNCNAME無效并返回錯誤狀態。如果未設置FUNCNAME,則會丟失其特殊屬性,即使它隨后被重置。此變量可與BASH_LINENO和BASH_SOURCE一起使用。FUNCNAME的每個元素在BASH_LINENO和BASH_SOURCE中都有相應的元素來描述調用堆。例如,$ {FUNCNAME [$ i]}是從行號$ {BASH_LINENO [$ i]}的$ {BASH_SOURCE [$ i + 1]}調用的。內置呼叫者顯示當前呼叫堆棧使用此信息。GROUPS一個數組變量,包含當前用戶所屬的組列表。對GROUPS的分配無效并返回錯誤狀態。如果是GROUPS未設置,即使隨后重置,它也會失去其特殊屬性。HISTCMD當前命令的歷史記錄編號或歷史記錄列表中的索引。如果未設置HISTCMD,它將失去其特殊屬性,即使它隨后被重置。主機名自動設置為當前主機的名稱。HOSTTYPE自動設置為唯一描述正在執行bash的計算機類型的字符串。默認值取決于系統。LINENO每次引用此參數時,shell都會在腳本中替換表示當前順序行號(以1開頭)的十進制數或功能。當不在腳本或函數中時,替換值不保證有意義。如果LINENO未設置,即使它失去了它的特殊屬性隨后重置。MACHTYPE自動設置為完全描述執行bash的系統類型的字符串,采用標準GNU cpu-company-system格式。默認為系統 - 依賴。MAPFILE創建一個數組變量(請參閱下面的數組),用于保存未提供變量名時內置文件讀取的文本。OLDPWD cd命令設置的上一個工作目錄。OPTARG getopts builtin命令處理的最后一個選項參數的值(參見下面的SHELL BUILTIN命令)。OPTIND getopts builtin命令要處理的下一個參數的索引(參見下面的SHELL BUILTIN命令)。OSTYPE自動設置為一個字符串,描述執行bash的操作系統。默認值取決于系統。PIPESTATUS一個數組變量(參見下面的數組),其中包含最近執行的前臺管道(可能包含)中的進程的退出狀態值列表只有一個命令)。PPID shell的父進程ID。這個變量是只讀的。PWD cd命令設置的當前工作目錄。RANDOM每次引用此參數時,都會生成0到32767之間的隨機整數。可以通過賦值來初始化隨機數序列隨機。如果未設置RANDOM,即使隨后重置,它也會失去其特殊屬性。READLINE_LINEreadline行緩沖區的內容,用于“bind -x”(參見下面的SHELL BUILTIN命令)。READLINE_POINT插入點在readline行緩沖區中的位置,與“bind -x”一起使用(請參閱下面的SHELL BUILTIN命令)。REPLY在沒有提供參數時設置為read builtin命令讀取的輸入行。SECONDS每次引用此參數時,都會返回自返回shell調用以來的秒數。如果為SECONDS分配了值,則返回的值為quent references是分配后的秒數加上分配的值。如果SECONDS未設置,它將失去其特殊屬性,即使它是subse-好意重置。SHELLOPTS以冒號分隔的已啟用shell選項列表。列表中的每個單詞都是set builtin命令的-o選項的有效參數(請參閱SHELL BUILTIN命令下面)。SHELLOPTS中出現的選項是由set -o報告的選項。如果此變量在bash啟動時的環境中,則每個shell選項都在列表將在讀取任何啟動文件之前啟用。此變量是只讀的。SHLVL每次啟動bash實例時增加1。UID擴展為當前用戶的用戶標識,在shell啟動時初始化。這個變量是只讀的。shell使用以下變量。在某些情況下,bash會為變量分配默認值; 這些情況如下所述。BASH_ENV如果在bash執行shell腳本時設置了此參數,則其值將被解釋為包含初始化shell的命令的文件名,如?/ .bashrc中所示。BASH_ENV的值在被解釋為文件名之前需要進行參數擴展,命令替換和算術擴展。PATH不習慣搜索結果文件名。BASH_XTRACEFD如果設置為與有效文件描述符對應的整數,則bash會將set -x啟用時生成的跟蹤輸出寫入該文件描述符。文件當取消設置BASH_XTRACEFD或分配新值時,將關閉描述符。取消設置BASH_XTRACEFD或為其分配空字符串會導致發送跟蹤輸出到標準錯誤。請注意,將BASH_XTRACEFD設置為2(標準錯誤文件描述符)然后取消設置將導致標準錯誤被關閉。CDPATH cd命令的搜索路徑。這是一個以冒號分隔的目錄列表,其中shell查找cd命令指定的目標目錄。一個樣本值為“。:?:/ usr”。列由select select命令用于確定打印選擇列表時的終端寬度。收到SIGWINCH后自動設置。COMPREPLY一個數組變量,bash讀取由可編程完成工具調用的shell函數生成的可能完成(參見Programmable Com-請注意以下內容)。EMACS如果bash在shell以值“t”開始時在環境中找到此變量,則它假定shell在Emacs shell緩沖區中運行并禁用行編輯。ENV類似于BASH_ENV; 在POSIX模式下調用shell時使用。FCEDIT fc內置命令的默認編輯器。FIGNORE執行文件名完成時要忽略的以冒號分隔的后綴列表(請參閱下面的READLINE)。一個文件名,其后綴與FIGNORE中的一個條目匹配從匹配的文件名列表中排除。示例值為“.o:?”。FUNCNEST如果設置為大于0的數值,則定義最大函數嵌套級別。超過此嵌套級別的函數調用將導致當前命令中止。GLOBIGNORE以冒號分隔的模式列表,用于定義要由路徑名擴展忽略的文件名集。如果文件名也與路徑名擴展模式匹配匹配GLOBIGNORE中的一個模式,它將從匹配列表中刪除。HISTCONTROL以冒號分隔的值列表,用于控制命令在歷史列表中的保存方式。如果值列表包含ignorespace,則以空格開頭的行字符未保存在歷史記錄列表中。ignoredups的值導致不保存與先前歷史記錄條目匹配的行。ignoreboth的值是short-為忽略空間和ignoredups的手。erasedups的值導致與該當前行匹配的所有先前行在該行之前從歷史列表中刪除保存。忽略上面列表中沒有的任何值。如果未設置HISTCONTROL,或者未包含有效值,則shell解析器讀取的所有行都將保存在歷史列表,受HISTIGNORE的價值限制。未測試多行復合命令的第二行和后續行,并將其添加到歷史記錄中無論HISTCONTROL的值如何。HISTFILE保存命令歷史記錄的文件的名稱(請參閱下面的歷史記錄)。默認值為?/ .bash_history。如果未設置,則在保存時不保存命令歷史記錄交互式shell退出。HISTFILESIZE歷史文件中包含的最大行數。為此變量分配值時,如有必要,通過刪除最舊的文件來截斷歷史文件條目,包含不超過該行數。默認值為500.在交互式寫入歷史文件后,歷史文件也會被截斷為此大小shell退出。HISTIGNORE以冒號分隔的模式列表,用于決定應在歷史列表中保存哪些命令行。每個模式都錨定在行的開頭必須匹配整行(不附加隱式`*')。在應用HISTCONTROL指定的檢查后,將針對該行測試每個模式。在阿迪-對于正常的shell模式匹配字符,`&'匹配以前的歷史記錄行。`&'可以使用反斜杠進行轉義; 之前刪除了反斜杠嘗試比賽。多行復合命令的第二行和后續行未經過測試,無論HISTIG的值如何,都會添加到歷史記錄中NORE。HISTSIZE命令歷史記錄中要記住的命令數(請參閱下面的歷史記錄)。默認值為500。HISTTIMEFORMAT如果此變量已設置且不為null,則其值將用作strftime(3)的格式字符串,以打印與由此顯示的每個歷史記錄條目關聯的時間戳。歷史建立。如果設置了此變量,則會將時間戳記寫入歷史記錄文件,以便可以跨shell會話保留它們。這使用了歷史評論用于區分時間戳與其他歷史記錄行的字符。HOME當前用戶的主目錄; cd builtin命令的默認參數。執行波浪擴展時也使用此變量的值。HOSTFILE包含與/ etc / hosts格式相同的文件名,當shell需要完成主機名時應該讀取該文件的名稱。可能的主機名列表 - 在shell運行時可能會改變tions; 更改值后,下次嘗試完成主機名時,bash會將新文件的內容添加到現有清單。如果設置了HOSTFILE但沒有值,或者沒有命名可讀文件,bash會嘗試讀取/ etc / hosts以獲取可能的主機名列表落成。取消設置HOSTFILE時,將清除主機名列表。IFS內部字段分隔符,用于在擴展后進行單詞拆分,并使用read builtin命令將行拆分為單詞。默認值為``<空間> <標簽> <換行符> ''。IGNOREEOF控制交互式shell在接收EOF字符作為唯一輸入時的操作。如果設置,則該值是必須的連續EOF字符數在bash退出之前輸入作為輸入行的第一個字符。如果變量存在但沒有數值,或者沒有值,則默認值為10.如果它不存在,EOF表示shell的輸入結束。INPUTRCreadline啟動文件的文件名,覆蓋默認的?/ .inputrc(參見下面的READLINE)。LANG用于確定未使用以LC_開頭的變量專門選擇的任何類別的區域設置類別。LC_ALL此變量將覆蓋LANG的值以及指定區域設置類別的任何其他LC_變量。LC_COLLATE此變量確定排序路徑名擴展結果時使用的歸類順序,并確定范圍表達式的行為,等價類和路徑名擴展和模式匹配中的整理序列。LC_CTYPE此變量確定字符的解釋以及路徑名擴展和模式匹配中字符類的行為。LC_MESSAGES此變量確定用于轉換前綴為$的雙引號字符串的語言環境。LC_NUMERIC此變量確定用于數字格式的區域設置類別。LINES select復合命令用于確定打印選擇列表的列長度。收到SIGWINCH后自動設置。MAIL如果此參數設置為文件或目錄名稱且未設置MAILPATH變量,則bash會通知用戶郵件到達指定文件或Maildir格式目錄。MAILCHECK指定bash檢查郵件的頻率(以秒為單位)。默認值為60秒。當需要檢查郵件時,shell會在顯示主郵件之前執行此操作提示。如果未設置此變量,或將該值設置為大于或等于零的數值,則shell將禁用郵件檢查。MAILPATH要檢查郵件的以冒號分隔的文件名列表。當郵件到達特定文件時要打印的消息可以通過分離文件來指定帶有“?”的消息的名稱。在消息文本中使用時,$ _將擴展為當前郵件文件的名稱。例:MAILPATH ='/ var / mail / bfox?“你有郵件”:?/ shell-mail?“$ _有郵件!”'Bash為此變量提供默認值,但它使用的用戶郵件文件的位置取決于系統(例如,/ var / mail / $ USER)。OPTERR如果設置為值1,bash將顯示getopts builtin命令生成的錯誤消息(請參閱下面的SHELL BUILTIN命令)。OPTERR每次初始化為1調用shell或執行shell腳本。PATH命令的搜索路徑。它是以冒號分隔的目錄列表,其中shell查找命令(請參閱下面的命令執行)。零長度(null)PATH值中的目錄名稱表示當前目錄。空目錄名稱可以顯示為兩個相鄰的冒號,或者作為初始冒號或尾隨冒號。該默認路徑是系統相關的,由安裝bash的管理員設置。一個常見的值是``/ usr / gnu / bin:/ usr / local / bin:/ usr / ucb:/ bin:/ usr / bin''。POSIXLY_CORRECT如果此變量在bash啟動時處于環境中,則shell在讀取啟動文件之前進入posix模式,就像--posix調用選項已經提供。如果在shell運行時設置它,則bash啟用posix模式,就像命令set -o posix已被執行一樣。PROMPT_COMMAND如果設置,則在發出每個主要提示之前將該值作為命令執行。PROMPT_DIRTRIM如果設置為大于零的數字,則該值將用作展開\ w和\ W提示字符串轉義時要保留的尾隨目錄組件的數量(見下面的提示)。刪除的字符將替換為省略號。PS1此參數的值已擴展(請參閱下面的PROMPTING)并用作主要提示字符串。默認值為``\ s- \ v \ $''。PS2此參數的值與PS1一樣展開,并用作輔助提示字符串。默認為“>”。PS3此參數的值用作select命令的提示符(請參閱上面的SHELL GRAMMAR)。PS4此參數的值與PS1一樣展開,并且在執行跟蹤期間顯示每個命令bash之前打印該值。PS4的第一個角色必要時多次復制以指示多個間接級別。默認為“+”。SHELL shell的完整路徑名保存在此環境變量中。如果在shell啟動時未設置它,bash會為其分配當前的完整路徑名用戶的登錄shell。時間格式此參數的值用作格式字符串,指定應如何顯示以時間保留字為前綴的管道的時序信息。%字符引入了一個轉義為時間值或其他信息的轉義序列。逃逸序列及其含義如下; 該大括號表示可選部分。%%一個字面%。%[p] [l] R經過的時間,以秒為單位。%[p] [l] U在用戶模式下花費的CPU秒數。%[p] [l] S在系統模式下花費的CPU秒數。%P CPU百分比,計算方式為(%U +%S)/%R。可選p是指定精度的數字,小數點后的小數位數。值為0會導致小數點或分數無效放。最多可以指定小數點后的三個位置; p大于3的值更改為3.如果未指定p,則使用值3。可選l指定MMmSS.FFs格式的更長格式,包括分鐘。p的值確定是否包括該分數。如果未設置此變量,則bash的行為就像它具有$'\ nreal \ t%3lR \ nuser \ t%3lU \ nsys%3lS'的值。如果該值為null,則不顯示任何計時信息。一個顯示格式字符串時添加尾隨換行符。TMOUT如果設置為大于零的值,則TMOUT將被視為讀取內置的默認超時。如果在TMOUT之后輸入未到達,則select命令終止輸入來自終端的秒數。在交互式shell中,該值被解釋為在發出主要數據后等待輸入的秒數提示。如果輸入未到達,Bash會在等待該秒數后終止。TMPDIR如果設置,bash使用其值作為bash為shell使用創建臨時文件的目錄的名稱。auto_resume此變量控制shell如何與用戶和作業控件交互。如果設置了此變量,則不帶重定向的單字簡單命令將被視為恢復現有停工的候選人。療法e為無歧義允許; 如果有一個以鍵入的字符串開頭的多個作業,則該作業最多最近訪問被選中。在此上下文中,已停止作業的名稱是用于啟動它的命令行。如果設置為exact,則必須提供字符串完全匹配已停止作業的名稱; 如果設置為substring,則提供的字符串需要匹配已停止作業名稱的子字符串。子串值pro-提供類似于%的功能?作業標識符(參見下面的JOB CONTROL)。如果設置為任何其他值,則提供的字符串必須是已停止作業的前綴名稱; 這提供了類似于%字符串作業標識符的功能。histchars控制歷史擴展和標記化的兩個或三個字符(參見下面的歷史擴展)。第一個字符是歷史擴展字符,表示歷史擴展開始的字符,通常是“!”。第二個字符是快速替換字符,用作速記重新運行上一個輸入的命令,在命令中用一個字符串替換另一個字符串。默認為“^”。可選的第三個字符是字符表示當作為單詞的第一個字符找到時,該行的其余部分是注釋,通常是“#”。歷史評論字符導致歷史記錄替代要跳過該線上剩余的單詞的tution。它不一定會導致shell解析器將該行的其余部分視為注釋。
數組 ? Bash提供一維索引和關聯數組變量。任何變量都可以用作索引數組; declare builtin將顯式聲明一個數組。 ? 對數組的大小沒有最大限制,也沒有要求成員被索引或連續分配的要求。索引數組使用整數引用 ? (包括算術表達式)并且基于零; 使用任意字符串引用關聯數組。
如果使用語法name [subscript] = value分配任何變量,則會自動創建索引數組。下標被視為算術表達式必須評估一個數字。如果下標求值為小于零的數字,則將其用作大于數組最大索引的偏移量(因此下標為-1)指的是數組的最后一個元素)。要顯式聲明索引數組,請使用declare -a name(請參閱下面的SHELL BUILTIN命令)。聲明-a name [下標]也是公認; 下標被忽略。使用declare -A name創建關聯數組。可以使用declare和readonly builtins為數組變量指定屬性。每個屬性都適用于數組的所有成員。數組被賦值為使用格式名稱=(value1 ... valuen)的復合賦值,其中每個值的格式為[subscript] = string。索引數組賦值沒有需要括號和下標。分配給索引數組時,如果提供了可選括號和下標,則將該索引分配給; 否則指數分配的元素是語句分配的最后一個索引加一。索引從零開始。分配給關聯數組時,下標是必需的。聲明內置也接受此語法。可以使用上面引入的名稱[subscript] = value語法來指定各個數組元素。可以使用$ {name [subscript]}引用數組的任何元素。需要大括號以避免與路徑名擴展沖突。如果下標是@或*,那么這個詞擴展到名稱的所有成員。這些下標僅在單詞出現在雙引號內時有所不同。如果單詞是雙引號,$ {name [*]}會擴展為單個單詞將每個數組成員的值用IFS特殊變量的第一個字符分隔,$ {name [@]}將name的每個元素展開為一個單獨的單詞。當有沒有數組成員,$ {name [@]}擴展為空。如果雙引號擴展發生在一個單詞中,則第一個參數的擴展與開頭連接原始單詞的一部分,最后一個參數的擴展與原始單詞的最后一部分相連。這類似于特殊的擴展參數*和@(參見上面的特殊參數)。$ {#name [下標]}擴展為$ {name [下標]}的長度。如果下標是*或@,則擴展名為數組中的元素。引用不帶下標的數組變量等效于引用下標為0的數組。如果已為下標指定值,則認為數組變量已設置。空字符串是有效值。未設置的內置函數用于銷毀數組。unset name [subscript]在索引下標處銷毀數組元素。必須注意避免引起不必要的副作用通過路徑名擴展。取消設置名稱,其中name是數組,或取消設置name [subscript],其中下標為*或@,刪除整個數組。declare,local和readonly內置函數都接受-a選項來指定索引數組,并使用-A選項來指定關聯數組。如果提供了兩個選項,-A優先。read builtin接受-a選項,將從標準輸入讀取的單詞列表分配給數組。set和declare內置顯示數組值以允許它們作為賦值重用的方式。
擴張 ? 在將命令行拆分為單詞后,將在命令行上執行擴展。進行了七種擴展:支撐擴展,波浪擴展,參數和 ? 變量擴展,命令替換,算術擴展,字拆分和路徑名擴展。
擴展的順序是:括號擴展,波浪擴展,參數,變量和算術擴展以及命令替換(以從左到右的方式完成),單詞拆分和路徑名擴展。在可以支持它的系統上,還有一個額外的擴展可用:進程替換。只有大括號擴展,分詞和路徑名擴展才能改變擴展的單詞數; 其他擴展將單個單詞擴展為單個單詞。該唯一的例外是“$ @”和“$ {name [@]}”的擴展,如上所述(參見PARAMETERS)。
支持擴張 ? 支撐擴展是一種可以生成任意字符串的機制。此機制類似于路徑名擴展,但生成的文件名不需要存在。 ? 要擴展的模式采用可選前導碼的形式,后跟一系列以逗號分隔的字符串或一對括號之間的序列表達式, ? 然后是可選的附言。前導碼以大括號中包含的每個字符串為前綴,然后將postscript附加到每個結果字符串, ? 從左到右擴展。
Brace擴展可以嵌套。每個展開的字符串的結果都沒有排序; 保持從左到右的順序。例如,{d,c,b} e擴展為“ade ace abe”。序列表達式采用{x..y [.. incr]}的形式,其中x和y是整數或單個字符,incr是可選的增量,是整數。當整數如果提供,表達式將擴展到x和y之間的每個數字,包括0和y。提供的整數可以以0為前綴,以強制每個術語具有相同的寬度。什么時候無論是x還是y都以零開頭,shell會嘗試強制所有生成的術語包含相同數量的數字,必要時填充零填充。當人物是如果提供,表達式將按字典順序在x和y之間擴展到每個字符。請注意,x和y必須屬于同一類型。當增量是支持合計,它被用作每個術語之間的差異。根據需要,默認增量為1或-1。在任何其他擴展之前執行大括號擴展,并且在結果中保留對其他擴展特殊的任何字符。這是嚴格的文字。Bash沒有將任何句法解釋應用于擴展的上下文或大括號之間的文本。正確形成的大括號擴展必須包含不帶引號的開括號和右大括號,以及至少一個不帶引號的逗號或有效的序列表達式。任何錯誤形成支撐擴展保持不變。一個{或者,可以用反斜杠引用,以防止它被視為括號表達式的一部分。避免與參數沖突擴展,字符串$ {不被認為有資格進行大括號擴展。當要生成的字符串的公共前綴比上例中的更長時,此構造通常用作速記:mkdir / usr / local / src / bash / {old,new,dist,bugs}要么chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}支撐擴展引入了與sh的歷史版本的輕微不兼容。sh不會特別當它們作為單詞的一部分出現時打開或關閉括號,并將它們保存在輸出中。由于大括號擴展,Bash從單詞中刪除大括號。例如,輸入sh作為文件{1,2}的單詞在中顯示相同輸出。在通過bash擴展后,相同的單詞輸出為file1 file2。如果需要與sh嚴格兼容,請使用+ B選項啟動bash或禁用大括號使用set命令的+ B選項進行擴展(參見下面的SHELL BUILTIN命令)。
Tilde擴張 ? 如果一個單詞以不帶引號的波形符(`?')開頭,則第一個不帶引號的斜杠之前的所有字符(或者所有字符,如果沒有未加引號的斜杠)都是 ? 支持波浪號前綴。如果沒有引用tilde-prefix中的字符,則代字號后面的波浪號前綴中的字符將被視為可能的登錄名 ? 名稱。如果此登錄名是空字符串,則將波形符替換為shell參數HOME的值。如果未設置HOME,則執行用戶的主目錄 ? 相反,shell被替換。否則,tilde-prefix將替換為與指定登錄名關聯的主目錄。
如果tilde-prefix是“?+”,則shell變量PWD的值將替換tilde-prefix。如果tilde-prefix是“? - ”,則shell變量OLDPWD的值(如果是)設置,被替換。如果在波浪號前綴中波浪號后面的字符由數字N組成,可選地以“+”或“ - ”為前綴,則替換波形符前綴使用目錄堆棧中的相應元素,因為它將以使用tilde-prefix作為參數調用的內置結構顯示。如果字符跟隨 - 在波浪號前綴中的波浪號由一個沒有前導“+”或“ - ”的數字組成,假定為“+”。如果登錄名無效,或者代字號擴展失敗,則該字不變。檢查每個變量賦值是否緊跟在:或第一個=之后的未加引號的波浪號前綴。在這些情況下,還執行波浪擴展。所以,在PATH,MAILPATH和CDPATH的賦值中,可以使用帶有波浪號的文件名,shell會分配擴展值。
參數擴展 ? `$'字符引入了參數擴展,命令替換或算術擴展。要展開的參數名稱或符號可以用大括號括起來 ? 是可選的,但用于保護變量以便從緊跟在其后面的字符擴展,這可以被解釋為名稱的一部分。
當使用大括號時,匹配的結束括號是第一個沒有被反斜杠或帶引號的字符串轉義的`}',而不是嵌入式算術擴展中的,強制替換或參數擴展。$ {}參數參數的值被替換。當參數是具有多個數字的位置參數或參數后跟a時,需要括號不得將其解釋為其名稱的一部分的字符。如果參數的第一個字符是感嘆號(!),則引入變量間接的級別。Bash使用從其余部分形成的變量的值參數作為變量的名稱; 然后展開此變量,并將該值用于替換的其余部分,而不是參數本身的值。這個被稱為間接擴張。例外情況是下面描述的$ {!prefix *}和$ {!name [@]}的擴展。感嘆號必須緊跟著左支撐以引入間接。在下面的每種情況中,單詞都受波形擴展,參數擴展,命令替換和算術擴展的影響。當不執行子字符串擴展時,使用下面記錄的表單,bash測試未設置或為null的參數。省略冒號導致僅對a進行測試未設置的參數。$ {參數:-word}使用默認值。如果參數未設置或為null,則替換單詞的擴展。否則,參數的值將被替換。$ {參數:=詞}分配默認值。如果參數未設置或為null,則將字的擴展分配給參數。然后替換參數的值。位置參數 - 不能以這種方式分配ters和特殊參數。$ {參數:?單詞}如果為空或未設置則顯示錯誤。如果參數為null或未設置,則將單詞的擴展(或者如果單詞不存在則為該效果的消息)寫入標準錯誤和shell,如果不是交互式,則退出。否則,參數的值將被替換。$ {參數:+單詞}使用替代值。如果參數為null或未設置,則不替換任何內容,否則將替換word的擴展。$ {參數:偏移}$ {參數:偏移量:長度}子串擴展。從offset指定的字符開始擴展為參數的最大長度字符。如果省略length,則展開為子字符串參數從offset指定的字符開始。length和offset是算術表達式(參見下面的ARITHMETIC EVALUATION)。如果偏移評估為a如果數字小于零,則該值用作參數值末尾的偏移量。如果length的計算結果小于零,且參數不是@而不是索引或關聯數組,它被解釋為從參數值的末尾而不是多個字符的偏移,并且擴展是兩個偏移之間的字符。如果參數為@,則結果是從offset開始的長度位置參數。如果參數是索引數組名稱子由@或*編寫,結果是以$ {parameter [offset]}開頭的數組的長度成員。相對于大于1的負偏移指定數組的最大索引。應用于關聯數組的子串擴展會產生未定義的結果。請注意,必須分隔負偏移量從冒號到至少一個空間,以避免與: - 擴展混淆。除非使用位置參數,否則子串索引是從零開始的在哪種情況下,索引默認從1開始。如果offset為0,并且使用了位置參數,則會在列表中添加$ 0作為前綴。$ {!前綴*}$ {!前綴@}名稱匹配前綴。擴展為名稱以prefix開頭的變量的名稱,由IFS特殊變量的第一個字符分隔。使用@時并且擴展名出現在雙引號內,每個變量名稱都會擴展為單獨的單詞。$ {!名稱[@]}$ {!名稱[*]}數組鍵列表。如果name是數組變量,則展開到名稱中指定的數組索引(鍵)列表。如果name不是數組,則如果設置了name,則展開為0否則為null。當使用@并且擴展名出現在雙引號內時,每個鍵都會擴展為單獨的單詞。$ {#參數}參數長度。參數值的字符長度被替換。如果參數是*或@,則替換值是位置參數的數量 - ETERS。如果parameter是由*或@下標的數組名,則替換的值是數組中元素的數量。$ {參數#字}$ {參數##字}刪除匹配的前綴模式。這個詞被擴展為產生一個模式,就像路徑名擴展一樣。如果模式匹配參數值的開頭那么,擴展的結果是參數的擴展值,具有最短的匹配模式(“#”情況)或最長的匹配模式(``##''case)已刪除。如果參數是@或*,則模式刪除操作依次應用于每個位置參數,并且擴展是結果列表。如果參數是使用@或*下標的數組變量,則模式刪除操作依次應用于數組的每個成員,并且擴展為結果清單。$ {參數%字}$ {參數%%詞}刪除匹配的后綴模式。這個詞被擴展為產生一個模式,就像路徑名擴展一樣。如果模式匹配展開的尾部參數的值,那么擴展的結果是具有最短匹配模式(“%”的情況)或最長匹配的參數的擴展值模式(``%%''案例)已刪除。如果參數是@或*,則模式刪除操作依次應用于每個位置參數,并且擴展為結果清單。如果參數是使用@或*下標的數組變量,則模式刪除操作依次應用于數組的每個成員,并且擴展是結果列表。$ {參數/模式/字符串}模式替換。擴展模式以生成模式,就像路徑名擴展一樣。參數被擴展并且模式與其最長匹配value被替換為string。如果pattern以/開頭,則pattern的所有匹配都將替換為string。通常只替換第一場比賽。如果模式以#開頭,它必須在參數的擴展值的開頭匹配。如果模式以%開頭,則它必須在參數的擴展值的末尾匹配之三。如果string為null,則刪除pattern的匹配,并且可以省略/ following模式。如果參數是@或*,則應用替換操作每個位置參數依次,擴展是結果列表。如果參數是使用@或*下標的數組變量,則替換操作為依次應用于數組的每個成員,擴展是結果列表。$ {參數M模式}$ {參數^^模式}$ {參數,模式}$ {參數,,模式}案例修改。此擴展修改參數中字母字符的大小寫。擴展模式以生成模式,就像在路徑名擴展中一樣錫永。^運算符將匹配模式的小寫字母轉換為大寫; ,運算符將匹配的大寫字母轉換為小寫。^^和,,擴展 - sions轉換擴展值中的每個匹配字符; ^和,擴展匹配并僅轉換擴展值中的第一個字符。如果模式是省略,它被視為一個?,它匹配每個字符。如果參數是@或*,則將大小寫修改操作應用于每個位置參數轉,擴展是結果列表。如果參數是使用@或*下標的數組變量,則將大小寫修改操作應用于每個成員依次是數組,擴展是結果列表。
命令替換 ? 命令替換允許輸出命令來替換命令名稱。有兩種形式:
$(命令)要么`command`Bash通過執行命令并用命令的標準輸出替換命令替換來執行擴展,刪除任何尾隨換行符。嵌入式換行不會被刪除,但在分詞時可能會刪除它們。命令替換$(cat文件)可以用等效但更快的$(<file)替換。當使用舊式反引號形式的替換時,反斜杠保留其字面含義,除非后跟$,`或\。第一個反引號前面沒有反斜杠終止命令替換。使用$(命令)表單時,括號之間的所有字符組成命令; 沒有人特別對待。命令替換可以嵌套。要在使用反引號形式時進行嵌套,請使用反斜杠轉義內部反引號。如果替換出現在雙引號內,則不會對結果執行單詞拆分和路徑名擴展。
算術擴展 ? 算術擴展允許評估算術表達式和結果的替換。算術擴展的格式是:
$((表達式))該表達式被視為在雙引號內,但括號內的雙引號未被特別處理。表達式中的所有標記都經歷了參數 - 擴展,字符串擴展,命令替換和引用刪除。算術擴展可以嵌套。評估根據算術評估下列出的規則進行。如果表達式無效,bash會打印一條消息,指示失敗并且沒有子發生了侮辱。
流程替代 ? 支持命名管道(FIFO)的系統或命名打開文件的/ dev / fd方法支持進程替換。它采用<(list)或>(list)的形式。該 ? 進程列表運行時其輸入或輸出連接到FIFO或/ dev / fd中的某個文件。此文件的名稱作為參數傳遞給當前命令作為結果 ? 擴張。如果使用>(列表)表單,寫入文件將提供列表輸入。如果使用<(list)表單,則應讀取作為參數傳遞的文件 ? 獲取列表的輸出。
可用時,進程替換與參數和變量擴展,命令替換和算術擴展同時執行。
單詞分裂 ? shell掃描參數擴展,命令替換和算術擴展的結果,這些結果在雙引號內沒有出現用于分詞。
shell將IFS的每個字符視為分隔符,并將其他擴展的結果拆分為這些字符上的單詞。如果未設置IFS,或其值為正好<space> <tab> <newline>,默認情況下,忽略前面擴展結果開頭和結尾的<space>,<tab>和<newline>序列,并且任何不在開頭或結尾的IFS字符序列都用于分隔單詞。如果IFS的值不是默認值,那么空格字符的序列 - 只要空白字符的值為IFS(IFS空白字符),就會在單詞的開頭和結尾忽略ters空格和制表符。任何角色在IFS中,不是IFS空格,以及任何相鄰的IFS空白字符,用于分隔字段。一系列IFS空白字符也被視為一個分隔符國際熱核實驗堆。如果IFS的值為null,則不會發生分詞。保留顯式空參數(“”或“”)。將刪除由于沒有值的參數的擴展而產生的不帶引號的隱式空參數。如果參數 - 沒有值的ter在雙引號內展開,null參數結果并保留。請注意,如果不發生擴展,則不執行拆分。
路徑名擴展 ? 分詞后,除非設置了-f選項,否則bash會掃描每個單詞中的字符*,?和[。如果出現其中一個字符,則認為該字 ? 作為模式,并替換為與模式匹配的按字母順序排序的文件名列表。如果找不到匹配的文件名,則shell選項nullglob不是 ? 啟用后,單詞保持不變。如果設置了nullglob選項,并且未找到匹配項,則刪除該單詞。如果設置了failglob shell選項,則不匹配 ? 發現,打印出錯誤消息并且不執行該命令。如果啟用了shell選項nocaseglob,則執行匹配而不考慮alpha-的情況 ? betic characters。當一個模式用于路徑名擴展時,必須明確匹配名稱開頭或緊跟斜杠后面的字符“。”。 ? 除非設置了shell選項dotglob。匹配路徑名時,必須始終明確匹配斜杠字符。在其他情況下,不會處理“。”字符 ? 特別。有關nocaseglob,nullglob,failglob和dotglob shell選項的說明,請參閱SHELL BUILTIN COMMANDS下面的shopt說明。
GLOBIGNORE shell變量可用于限制與模式匹配的文件名集。如果設置了GLOBIGNORE,則每個匹配的文件名也匹配其中一個GLOBIGNORE中的模式將從匹配列表中刪除。設置GLOBIGNORE時,文件名“。”和“..”將始終被忽略,而不是null。但是,設置GLO-BIGNORE到非null值具有啟用dotglob shell選項的效果,因此所有其他以“。”開頭的文件名都將匹配。獲得舊的行為忽略以“。”開頭的文件名,使“。*”成為GLOBIGNORE中的一種模式。未設置GLOBIGNORE時,將禁用dotglob選項。模式匹配除了下面描述的特殊模式字符之外,模式中出現的任何字符都與其自身匹配。NUL字符可能不會出現在模式中。背面 - 斜線逃脫以下角色; 匹配時丟棄轉義反斜杠。如果要按字面匹配,則必須引用特殊模式字符。特殊模式字符具有以下含義:*匹配任何字符串,包括空字符串。啟用globstar shell選項時,*在路徑名擴展上下文中使用,使用兩個相鄰的*因為單個模式將匹配所有文件以及零個或多個目錄和子目錄。如果后跟一個/,則兩個相鄰的*將僅匹配目錄和子目錄。?匹配任何單個字符。[...]匹配任何一個附帶的字符。用連字符分隔的一對字符表示范圍表達式; 任何在這兩者之間排序的角色使用當前區域設置的整理順序和字符集的字符匹配。如果[后面的第一個字符是!或者^然后任何未包含的字符都匹配。范圍表達式中字符的排序順序由當前區域設置和LC_COLLATE的值確定shell變量,如果設置。A - 可以通過將其包括在集合中的第一個或最后一個字符來匹配。A]可以通過將其包括為第一個特征來匹配在集合中。在[和]中,可以使用語法[:class:]指定字符類,其中class是POSIX標準中定義的以下類之一:alnum alpha ascii空白cntrl數字圖表下部打印punct空間上部字xdigit字符類匹配屬于該類的任何字符。單詞字符類匹配字母,數字和字符_。在[和]中,可以使用語法[= c =]指定等價類,該語法匹配具有相同歸類權重的所有字符(由當前語言環境)作為字符c。在[和]中,語法[.symbol。]匹配整理符號符號。可識別多個擴展模式匹配運算符。在以下描述中,模式列表是由|分隔的一個或多個模式的列表。復合拍可以使用以下子模式中的一個或多個來形成燕鷗:?(模式列表)匹配給定模式的零次或一次出現*(模式列表)匹配給定模式的零次或多次出現+(模式列表)匹配給定模式的一次或多次出現@(模式列表)匹配給定模式之一如果使用內置shopt啟用了extglob shell選項,則還會識別以下模式匹配運算符:!(模式列表)匹配除了給定模式之外的任何內容
引用刪除 ? 在前面的擴展之后,將刪除未由上述擴展之一產生的字符\,'和“的所有未引用的出現。
REDIRECTION ? 在執行命令之前,可以使用shell解釋的特殊表示法重定向其輸入和輸出。重定向也可用于打開和關閉文件 ? 對于當前的shell執行環境。以下重定向運算符可以在簡單命令之前或出現在任何位置,也可以跟隨命令。Redirec- ? tions按照它們出現的順序從左到右處理。
可以在文件描述符號之前的每個重定向可以改為在{varname}形式的單詞之后。在這種情況下,對于每個重定向運算符除外>& - 和<& - ,shell將分配大于10的文件描述符并將其分配給varname。如果>& - 或<& - 前面有{varname},則varname的值定義要關閉的文件描述符。在以下描述中,如果省略文件描述符編號,并且重定向操作符的第一個字符是<,則重定向是指標準輸入(文件描述符0)。如果重定向運算符的第一個字符是>,則重定向引用標準輸出(文件描述符1)。除非另有說明,否則以下描述中的重定向運算符后面的單詞將進行括號擴展,波形擴展,參數擴展,mand替換,算術擴展,引用刪除,路徑名擴展和單詞拆分。如果它擴展為多個單詞,bash會報告錯誤。請注意,重定向的順序很重要。例如,命令ls> dirlist 2>&1在命令時將標準輸出和標準錯誤都指向文件dirlistls 2>&1> dirlist僅將標準輸出指向文件dirlist,因為在將標準輸出重定向到dirlist之前,標準錯誤與標準輸出重復。Bash在重定向中使用時會處理多個文件名,如下表所述:的/ dev / FD / FD如果fd是有效整數,則重復文件描述符fd。的/ dev /標準輸入文件描述符0是重復的。的/ dev /標準輸出文件描述符1是重復的。的/ dev /標準錯誤文件描述符2是重復的。的/ dev / TCP /主機/端口如果host是有效的主機名或Internet地址,并且port是整數端口號或服務名,則bash嘗試打開到相應的TCP連接插座。的/ dev / UDP /主機/端口如果host是有效的主機名或Internet地址,并且port是整數端口號或服務名,則bash嘗試打開UDP連接到相應的插座。無法打開或創建文件會導致重定向失敗。應謹慎使用使用大于9的文件描述符的重定向,因為它們可能與shell在內部使用的文件描述符沖突。
重定向輸入 ? 輸入的重定向導致打開名稱來自word擴展的文件,以便讀取文件描述符n或標準輸入(文件描述符0),如果 ? n未指定。
重定向輸入的一般格式是:[N] <字
重定向輸出 ? 輸出的重定向導致打開名稱來自word擴展的文件,以便在文件描述符n或標準輸出(文件描述符1)上進行寫入 ? 如果沒有指定n。如果文件不存在則創建; 如果確實存在則將其截斷為零大小。
重定向輸出的一般格式是:[N]>字如果重定向運算符是>,并且已啟用set builtin的noclobber選項,則如果名稱由擴展名稱生成的文件,則重定向將失敗單詞存在并且是常規文件。如果重定向運算符是> |,或者重定向運算符是>并且未啟用set builtin命令的noclobber選項,即使由word命名的文件存在,也會嘗試重定向。
附加重定向輸出 ? 以這種方式重定向輸出會導致打開名稱來自word擴展的文件,以便附加到文件描述符n或標準輸出 ? (文件描述符1)如果未指定n。如果該文件不存在,則創建該文件。
附加輸出的一般格式是:[N] >>字
重定向標準輸出和標準錯誤 ? 此構造允許將標準輸出(文件描述符1)和標準錯誤輸出(文件描述符2)重定向到名稱為擴展的文件 ? 的字。
重定向標準輸出和標準錯誤有兩種格式:&>字和>&字在這兩種形式中,第一種是優選的。這在語義上等同于>字2>&1
附加標準輸出和標準錯誤 ? 此構造允許將標準輸出(文件描述符1)和標準錯誤輸出(文件描述符2)附加到名稱為擴展的文件 ? 字。
附加標準輸出和標準錯誤的格式為:&>>字這在語義上等同于>>字2>&1
這里的文件 ? 這種類型的重定向指示shell從當前源讀取輸入,直到看到只包含分隔符(沒有尾隨空白)的行。所有的線條 ? 然后讀取到該點作為命令的標準輸入。
here-documents的格式是:<< [ - ]字這里文檔分隔符不對字執行參數擴展,命令替換,算術擴展或路徑名擴展。如果引用單詞中的任何字符,則分隔符為在單詞上刪除引號的結果,并且不會展開here-document中的行。如果單詞不加引號,則here-document的所有行都受到參數擴展的影響 - sion,命令替換和算術擴展。在后一種情況下,將忽略字符序列\ <newline>,并且\必須用于引用字符\,$和`。如果重定向運算符是<< - ,則從輸入行和包含分隔符的行中刪除所有前導制表符。這允許shell中的文檔腳本以自然方式縮進。
這里的弦樂 ? 這里文檔的一個變體,格式是:
<<<字單詞被擴展并在其標準輸入上提供給命令。
復制文件描述符 ? 重定向運算符
[N] <&字用于復制輸入文件描述符。如果word擴展為一個或多個數字,則由n表示的文件描述符將成為該文件描述符的副本。如果word中的數字不指定打開輸入的文件描述符,發生重定向錯誤。如果word求值為 - ,則關閉文件描述符n。如果未指定n,則使用標準輸入(文件描述符0)。運營商[N]>&字與重復的輸出文件描述符類似地使用。如果未指定n,則使用標準輸出(文件描述符1)。如果單詞中的數字未指定文件描述符打開輸出,發生重定向錯誤。作為一種特殊情況,如果省略n,并且word不會擴展為一個或多個數字,則標準輸出和標準如前所述,錯誤被重定向。
移動文件描述符 ? 重定向運算符
[N] <&digit-如果未指定n,則將文件描述符數字移動到文件描述符n或標準輸入(文件描述符0)。數字在復制到n后關閉。同樣,重定向運算符[N]>&digit-如果未指定n,則將文件描述符數字移動到文件描述符n或標準輸出(文件描述符1)。
打開閱讀和寫作的文件描述符 ? 重定向運算符
[N] <>字導致名稱為word擴展的文件在文件描述符n上讀取和寫入時打開,如果未指定n則在文件描述符0上打開。如果文件不存在,它被創建。
ALIASES ? 別名允許在將字符串用作簡單命令的第一個字時替換字符串。shell維護一個可以設置和取消設置的別名列表 ? 使用alias和unalias內置命令(參見下面的SHELL BUILTIN命令)。如果不加引號,則檢查每個簡單命令的第一個單詞以查看它是否具有別名。如果 ? 所以,該單詞被別名的文本替換。上面列出的字符/,$,`和=以及任何shell元字符或引號字符可能不會出現在 ? 別名。替換文本可以包含任何有效的shell輸入,包括shell元字符。替換文本的第一個單詞是針對別名測試的,但是一個單詞 ? 與擴展的別名相同的內容不會再次展開。這意味著,例如,可以將ls別名為ls -F,而bash不會嘗試遞歸 ? 擴展替換文本。如果別名值的最后一個字符為空,則還會檢查別名后面的下一個命令字的別名擴展。
使用alias命令創建和列出別名,并使用unalias命令刪除別名。在替換文本中沒有使用參數的機制。如果需要參數,則應使用shell函數(請參閱下面的函數)。當shell不是交互式時,不會擴展別名,除非使用shopt設置expand_aliases shell選項(請參閱SHELL BUILTIN COM下的shopt說明)MANDS下面)。關于別名的定義和使用的規則有些令人困惑。在執行任何命令之前,Bash始終讀取至少一個完整的輸入行那條線。讀取命令時會擴展別名,而不會在執行時擴展別名。因此,出現在與另一個命令相同的行上的別名定義不會占用效果,直到讀取下一行輸入。該行上別名定義后面的命令不受新別名的影響。這種行為也是一個問題功能被執行。讀取函數定義時擴展別名,而不是在執行函數時擴展,因為函數定義本身就是復合函數普通話。因此,在執行該函數之后,函數中定義的別名才可用。為安全起見,請始終將別名定義放在單獨的行中,并且不要在復合命令中使用別名。對于幾乎所有目的,別名都被shell函數取代。
功能 ? 如上所述在SHELL GRAMMAR中定義的shell函數存儲一系列命令以供稍后執行。當shell函數的名稱用作簡單的com- ? mand name,執行與該函數名關聯的命令列表。函數在當前shell的上下文中執行; 沒有創建新進程 ? 解釋它們(與shell腳本的執行形成對比)。執行函數時,函數的參數將成為函數的位置參數 ? 執行。更新特殊參數#以反映更改。特殊參數0不變。FUNCNAME變量的第一個元素設置為的名稱 ? 函數執行時的函數。
shell執行環境的所有其他方面在函數和調用者之間是相同的,但有以下例外:DEBUG和RETURN陷阱(請參閱描述)除了為函數提供了trace屬性之外,不會繼承下面的SHELL BUILTIN命令內置的陷阱)(參見聲明內置的描述)使用set builtin啟用了-o functrace shell選項(在這種情況下,所有函數都繼承了DEBUG和RETURN陷阱),并且ERR陷阱不是繼承 - 除非啟用了-o errtrace shell選項。可以使用local builtin命令聲明函數本地的變量。通常,變量及其值在函數和調用者之間共享。FUNCNEST變量,如果設置為大于0的數值,則定義最大函數嵌套級別。超出限制的函數調用會導致整個com-要求中止。如果在函數中執行內置命令返回,則函數完成,并在函數調用后使用下一個命令繼續執行。任何關聯的命令在執行恢復之前執行RETURN陷阱。當函數完成時,位置參數和特殊參數#的值將恢復為在函數執行之前它們具有的值。可以使用declare或typeset builtin命令的-f選項列出函數名稱和定義。聲明或排版的-F選項將列出函數名稱only(如果啟用了extdebug shell選項,則可選擇使用源文件和行號)。可以導出函數,以便子殼自動定義它們使用-f選項導出內置。可以使用unset內置的-f選項刪除函數定義。注意shell函數和變量用相同的名稱可能會導致傳遞給shell的子項的環境中有多個具有相同名稱的條目。如果這可能導致問題,應該小心。函數可以是遞歸的。FUNCNEST變量可用于限制函數調用堆棧的深度并限制函數調用的數量。默認情況下,沒有對遞歸調用的數量施加限制。
算術評估 ? 在某些情況下,shell允許計算算術表達式(參見let和declare builtin命令和算術擴展)。評估完成 ? 在固定寬度整數中沒有檢查溢出,但除以0被捕獲并標記為錯誤。運算符及其優先級,關聯性和值 ? 與C語言相同。以下運算符列表分組為等優先運算符的級別。級別按先前減少的順序列出 ? 信心。
id ++ id--變量后增量和后減量++ id --id變量預增量和預減量- +一元減號和加號!?邏輯和按位否定**取冪* /%乘法,除法,余數+ - 加法,減法<< >>左右按位移位<=> = <>對照==!=平等和不平等&按位AND^按位異或| 按位OR&&邏輯AND|| 邏輯或EXPR EXPR:EXPR條件運算符= * = / =%= + = - = << = >> =&= ^ = | =分配expr1,expr2逗號允許Shell變量作為操作數; 在計算表達式之前執行參數擴展。在表達式中,shell變量也可以引用不使用參數擴展語法的名稱。null或unset的shell變量在按名稱引用時計算結果為0,而不使用參數擴展syn-稅。變量的值在引用時被計算為算術表達式,或者當使用declare -i給出整數屬性的變量時被賦予一個值。null值的計算結果為0. shell變量不需要打開其整數屬性即可在表達式中使用。前導0的常量被解釋為八進制數。前導0x或0X表示十六進制。否則,數字采用[base#] n形式,其中可選基數為a表示算術基數的2到64之間的十進制數,n是該基數的數字。如果省略base#,則使用基數10。大于9的數字是由小寫字母,大寫字母,@和_按順序表示。如果base小于或等于36,則可以使用小寫和大寫字母可變地代表10到35之間的數字。按優先順序評估運算符。首先評估括號中的子表達式,并可以覆蓋上面的優先級規則。
有條件的表達 ? 條件表達式由[[compound命令和test和[builtin命令]用于測試文件屬性并執行字符串和算術比較。 ? 表達式由以下一元或二元原色形成。如果其中一個原色的任何文件參數的格式為/ dev / fd / n,則文件描述符n為 ? 檢查。如果其中一個原色的文件參數是/ dev / stdin,/ dev / stdout或/ dev / stderr之一,則分別檢查文件描述符0,1或2。
除非另有說明,否則對文件進行操作的原色遵循符號鏈接并在鏈接的目標上操作,而不是鏈接本身。與[[,<和>運算符一起使用時,使用當前語言環境按字典順序排序。測試命令使用ASCII排序進行排序。-一份文件如果文件存在則為真。-b文件如果文件存在則為真,并且是塊特殊文件。-c文件如果文件存在則為真,并且是字符特殊文件。-d文件如果文件存在且為目錄,則為True。-e文件如果文件存在則為真。-f文件如果文件存在且為常規文件,則為True。-g文件如果文件存在且為set-group-id,則為True。-h文件如果文件存在且為符號鏈接,則為真。-k文件如果文件存在且設置了“粘滯”位,則為真。-p文件如果文件存在且為命名管道(FIFO),則為真。-r文件如果文件存在且可讀,則為真。-s文件如果文件存在且大小大于零,則為真。-t fd如果文件描述符fd打開并引用終端,則為真。-u文件如果文件存在且其set-user-id位已設置,則為True。-w文件如果文件存在且可寫,則為True。-x文件如果文件存在且可執行,則為True。-G文件如果文件存在并且由有效組ID擁有,則為True。-L文件如果文件存在且為符號鏈接,則為真。-N文件如果文件存在且自上次讀取以來已被修改,則為真。-O文件如果文件存在且由有效用戶標識擁有,則為True。-S文件如果文件存在且為套接字,則為真。file1 -ef file2如果file1和file2引用相同的設備和inode編號,則為True。file1 -nt file2如果file1比file2更新(或根據修改日期),或者file1存在而file2不存在,則為True。file1 -ot file2如果file1早于file2,或者file2存在且file1不存在,則為True。-o optname如果啟用了shell選項optname,則為True。請參閱下面的set builtin的-o選項說明下的選項列表。-v varname如果設置了shell變量varname,則為True(已分配值)。-z字符串如果字符串的長度為零,則為True。串-n string如果字符串的長度不為零,則為True。string1 == string2string1 = string2如果字符串相等則為True。=應與POSIX一致性的測試命令一起使用。string1!= string2如果字符串不相等則為True。string1 <string2如果string1按字典順序在string2之前排序,則為True。string1> string2如果string1按字典順序在string2之后排序,則為True。arg1 OP arg2OP是-eq,-ne,-lt,-le,-gt或-ge之一。如果arg1等于,不等于,小于,小于或等于,則這些算術二元運算符返回true,分別大于,或大于或等于arg2。Arg1和arg2可以是正整數或負整數。
簡單的命令擴展 ? 執行簡單命令時,shell將從左到右執行以下擴展,分配和重定向。
1.解析器標記為變量賦值(命令名稱前面的那些)和重定向的單詞將保存以供以后處理。2.擴展不是變量賦值或重定向的單詞。如果擴展后仍有任何單詞,則第一個單詞將被視為命令的名稱其余的詞是爭論。3.重定向如上所述在REDIRECTION下進行。4.每個變量賦值中的=之后的文本經歷了波浪擴展,參數擴展,命令替換,算術擴展和之前的引用刪除被分配給變量。如果未生成命令名稱,則變量賦值會影響當前的shell環境。否則,將變量添加到已執行命令的環境中不要影響當前的shell環境。如果任何分配嘗試將值分配給只讀變量,則會發生錯誤,并且命令以非零狀態。如果沒有命令名稱結果,則執行重定向,但不影響當前的shell環境。重定向錯誤導致命令以非零sta退出土族。如果在擴展后留下命令名稱,則執行如下所述。否則,該命令退出。如果其中一個擴展包含一個命令替換 - ,該命令的退出狀態是執行的最后一個命令替換的退出狀態。如果沒有命令替換,則命令以狀態退出零。
命令執行 ? 將命令拆分為單詞后,如果它生成簡單命令和可選參數列表,則執行以下操作。
如果命令名稱不包含斜杠,則shell會嘗試找到它。如果存在該名稱的shell函數,則如上所述在FUNC中調用該函數。系統蒸發散。如果名稱與函數不匹配,shell將在shell builtins列表中搜索它。如果找到匹配項,則調用該內置項。如果名稱既不是shell函數也不是內置函數,并且不包含斜杠,則bash會在PATH的每個元素中搜索包含可執行文件的目錄。名稱。Bash使用哈希表來記住可執行文件的完整路徑名(請參閱下面的SHELL BUILTIN命令下的哈希)。完全搜索PATH中的目錄是僅當在哈希表中找不到該命令時才執行。如果搜索不成功,shell將搜索名為command_not_found_handle的已定義shell函數。如果該函數存在,則使用原始命令和原始命令的參數作為其參數調用它,并且函數的退出狀態變為退出狀態的殼。如果未定義該函數,則shell將輸出錯誤消息并返回退出狀態127。如果搜索成功,或者命令名稱包含一個或多個斜杠,則shell在單獨的執行環境中執行指定的程序。參數0已設置到給定的名稱,并將命令的其余參數設置為給定的參數,如果有的話。如果由于文件不是可執行格式而導致此執行失敗,并且該文件不是目錄,則假定它是shell腳本,即包含shell命令的文件。生成子shell以執行它。這個子shell重新初始化,因此效果就好像調用了一個新shell來處理腳本一樣,異常由父母記住的命令的位置(參見SHELL BUILTIN COMMANDS下面的哈希)由孩子保留。如果程序是以#!開頭的文件,則第一行的其余部分指定程序的解釋程序。shell在operat-上執行指定的解釋器不自行處理此可執行格式的系統。解釋器的參數由解釋器名稱后面的單個可選參數組成程序的第一行,后跟程序的名稱,后跟命令參數,如果有的話。
命令執行環境 ? shell有一個執行環境,它包含以下內容:
·在調用時由shell繼承的打開文件,由提供給exec內置的重定向修改·當前工作目錄由cd,pushd或popd設置,或由shell在調用時繼承·文件創建模式掩碼,由umask設置或從shell的父級繼承·陷阱設置的當前陷阱·由變量賦值設置的shell參數,或者從環境中shell的父級設置或繼承的shell參數·shell函數在執行期間定義或從shell的父級環境中繼承·調用時啟用的選項(默認情況下或使用命令行參數)或set·由shopt啟用的選項·使用別名定義的shell別名·各種進程ID,包括后臺作業,$$的值和PPID的值當要執行除內置函數或shell函數之外的簡單命令時,將在包含以下內容的單獨執行環境中調用它。除非 - 錯誤地指出,值是從shell繼承的。·shell的打開文件,以及由命令重定向指定的任何修改和添加·當前的工作目錄·文件創建模式掩碼·標記為導出的shell變量和函數,以及為該命令導出的變量,在環境中傳遞·shell捕獲的陷阱被重置為從shell的父級繼承的值,并忽略shell忽略的陷阱在此單獨環境中調用的命令不會影響shell的執行環境。命令替換,用括號分組的命令和異步命令在子shell環境中調用,該環境是shell環境的副本,除了shell捕獲的陷阱將重置為shell在調用時從其父級繼承的值。作為管道的一部分調用的內置命令是也在子shell環境中執行。對子shell環境所做的更改不會影響shell的執行環境。衍生為執行命令替換的子shell繼承父shell的-e選項的值。當不處于posix模式時,bash會清除-e選項。炮彈。如果命令后面跟著&且作業控件未激活,則該命令的缺省標準輸入是空文件/ dev / null。否則,調用的命令繼承 - 它是由重定向修改的調用shell的文件描述符。
環境 ? 調用程序時,會給出一個稱為環境的字符串數組。這是名稱 - 值對的列表,格式為name = value。
shell提供了幾種操作環境的方法。在調用時,shell會掃描自己的環境,并自動為每個找到的名稱創建一個參數標記它以導出到子進程。執行的命令繼承環境。export和declare -x命令允許將參數和函數添加到和從環境中刪除。如果修改了環境中參數的值,則新值將成為環境的一部分,替換舊值。環境任何執行的命令繼承的都包含shell的初始環境,其值可以在shell中修改,少于unset命令刪除的任何對,加上通過export和declare -x命令添加任何內容。任何簡單命令或函數的環境可以通過在其前面加上參數賦值來臨時擴充,如上面參數中所述。這些轉讓 - 語句僅影響該命令所見的環境。如果設置了-k選項(請參閱下面的set builtin命令),那么所有參數賦值都將放置在命令的環境中,而不僅僅是那些在命令之前的命令。命名。當bash調用外部命令時,變量_將設置為命令的完整文件名,并在其環境中傳遞給該命令。
退出狀態 ? 執行命令的退出狀態是waitpid系統調用或等效函數返回的值。然而,退出狀態介于0到255之間,正如所解釋的那樣 ? 在下面,shell可能會特別使用125以上的值。shell builtins和復合命令的退出狀態也僅限于此范圍。在某些情況下, ? shell將使用特殊值來指示特定的故障模式。
出于shell的目的,以零退出狀態退出的命令已成功。退出狀態為零表示成功。非零退出狀態表示失敗。當命令終止于致命信號N時,bash使用128 + N的值作為退出狀態。如果未找到命令,則為執行該命令而創建的子進程將返回狀態127.如果找到命令但不可執行,則返回狀態為126。如果命令因擴展或重定向期間的錯誤而失敗,則退出狀態大于零。Shell builtin命令如果成功則返回狀態0(true),如果執行時發生錯誤則返回非零(false)。所有內置函數都返回2的退出狀態表明用法不正確。Bash本身返回最后執行的命令的退出狀態,除非發生語法錯誤,在這種情況下,它以非零值退出。另見內置出口com-下面的要求。
SIGNALS ? 當bash是交互式的時候,在沒有任何陷阱的情況下,它會忽略SIGTERM(因此kill 0不會殺死交互式shell),并且會捕獲并處理SIGINT(以便 ? 等待內置是可中斷的)。在所有情況下,bash都會忽略SIGQUIT。如果作業控制生效,bash將忽略SIGTTIN,SIGTTOU和SIGTSTP。
由bash運行的非內置命令將信號處理程序設置為shell從其父級繼承的值。當作業控制無效時,異步命令除了這些繼承的處理程序之外,還忽略SIGINT和SIGQUIT。由于命令替換而運行的命令忽略鍵盤生成的作業控制信號SIGT-TIN,SIGTTOU和SIGTSTP。收到SIGHUP后,shell默認退出。在退出之前,交互式shell會將SIGHUP重新發送到所有正在運行或已停止的作業。停止的工作發送給SIGCONT確保他們收到SIGHUP。為了防止shell將信號發送到特定作業,應該使用disown builtin從jobs表中刪除它(參見下面的SHELL BUILTIN命令)或使用disown -h標記為不接收SIGHUP。如果已使用shopt設置了huponexit shell選項,則當交互式登錄shell退出時,bash會向所有作業發送SIGHUP。如果bash正在等待命令完成并收到已設置陷阱的信號,則在命令完成之前不會執行該陷阱。當bash是通過等待內置等待異步命令,接收已設置陷阱的信號將導致等待內置立即返回退出狀態大于128,緊接著執行陷阱。
工作控制 ? 作業控制是指有選擇地停止(暫停)進程的執行并在稍后繼續(恢復)它們的執行的能力。用戶通常使用 ? 這個工具通過操作系統內核的終端驅動程序和bash共同提供的交互式界面。
shell將作業與每個管道相關聯。它保留當前正在執行的作業的表,可以使用jobs命令列出。當bash開始工作asyn-(在后臺),它打印出一條如下所示的線:[1] 25647指示此作業是作業編號1,并且與此作業關聯的管道中的最后一個進程的進程ID是25647.單個中的所有進程管道是同一個工作的成員。Bash使用作業抽象作為工作控制的基礎。為了便于實現作業控制的用戶界面,操作系統維護當前終端進程組ID的概念。這個成員進程組(進程組ID等于當前終端進程組ID的進程)接收鍵盤生成的信號,如SIGINT。這些過程是據說是在前臺。后臺進程是進程組ID與終端進程不同的進程; 這些過程不受鍵盤生成的信號的影響。只允許前臺進程讀取,或者如果用戶使用stty tostop指定,則寫入終端。嘗試從中讀取的后臺進程(當stty tostop生效時寫入)終端由內核的終端驅動程序發送SIGTTIN(SIGTTOU)信號,除非被捕獲,否則暫停該進程。如果運行bash的操作系統支持作業控制,則bash包含使用它的工具。在a時鍵入暫停字符(通常為^ Z,Control-Z)進程正在運行導致該進程停止并將控制權返回給bash。鍵入延遲暫停字符(通常為^ Y,Control-Y)會導致進程當它試圖從終端讀取輸入時停止,并且控制返回到bash。然后,用戶可以使用bg命令來操作該作業的狀態在后臺繼續它,fg命令在前臺繼續它,或者kill命令來殺死它。A ^ Z立即生效,并具有附加的一面導致掛起輸出和預先輸出的效果被丟棄。有很多方法可以引用shell中的作業。字符%引入了作業規范(jobspec)。作業號n可以稱為%n。一份工作也可能使用用于啟動它的名稱的前綴,或使用出現在其命令行中的子字符串來引用。例如,%ce指的是停止的作業。如果是前綴匹配多個作業,bash報告錯誤。另一方面,使用%?ce指的是在其命令行中包含字符串ce的任何作業。如果子串匹配不止一個工作,bash報告錯誤。符號%%和%+指的是當前作業的shell概念,它是在前臺停止時的最后一個作業或者在后臺開始。可以使用% - 引用上一個作業。如果只有一個作業,%+和% - 都可以用來引用該作業。在輸出中為了工作(例如,job命令的輸出),當前作業總是標記為+,而前一個作業標記為 - 。單個%(沒有隨附的工作規范 - ification)也指當前的工作。簡單地命名一個作業可以用來將它帶到前臺:%1是``fg%1'的同義詞,將作業1從后臺帶到前臺。同樣,``%1&''在后臺恢復作業1,相當于“bg%1”。當作業改變狀態時,shell立即學習。通常情況下,bash會在報告作業狀態更改之前等待打印提示,以免發生中斷任何其他輸出。如果啟用了set builtin命令的-b選項,bash會立即報告此類更改。SIGCHLD上的任何陷阱都是針對每個孩子執行的退出。如果在作業停止時嘗試退出bash(或者,如果使用內置的shopt啟用了checkjobs shell選項,則運行),shell會輸出警告消息,如果啟用了checkjobs選項,則列出作業及其狀態。然后可以使用jobs命令檢查其狀態。如果第二次嘗試退出如果沒有插入命令,shell不會打印另一個警告,并且任何已停止的作業都將終止。
PROMPTING ? 交互式執行時,bash在準備好讀取命令時顯示主提示PS1,在需要更多輸入時顯示輔助提示PS2以完成a ? 命令。Bash允許通過插入一些反斜杠轉義的特殊字符來自定義這些提示字符串,這些特殊字符按如下方式解碼: ? \ a一個ASCII鈴鐺字符(07) ? \ d“工作日月日期”格式的日期(例如,“Tue May 26”) ? \ d {格式} ? 格式傳遞給strftime(3),結果插入到提示字符串中; 空格式導致特定于語言環境的時間表示。該 ? 大括號是必需的 ? \ e ASCII轉義字符(033) ? \ h主機名最多為第一個`。' ? \ H主機名 ? \ j目前由shell管理的作業數量 ? \ l shell的終端設備名稱的基本名稱 ? \ n換行 ? \ r \ n回車 ? \ s shell的名稱,$ 0的基本名稱(最終斜杠后面的部分) ? 以24小時HH:MM:SS格式顯示當前時間 ? \ T當前時間為12小時HH:MM:SS格式 ? \ @當前時間為12小時上午/下午格式 ? \當前時間為24小時HH:MM格式 ? \ u當前用戶的用戶名 ? \ v bash的版本(例如,2.00) ? \ v發布bash,版本+補丁級別(例如,2.00.0) ? \ w當前工作目錄,$ HOME縮寫為tilde(使用PROMPT_DIRTRIM變量的值) ? \ W當前工作目錄的基本名稱,$ HOME縮寫為波浪號 ? \!此命令的歷史編號 ? \#此命令的命令編號 ? \ $如果有效UID為0,則為#,否則為$ ? \ nnn對應八進制數nnn的字符 ? 一個反斜杠 ? \ [開始一系列非打印字符,可用于將終端控制序列嵌入到提示中 ? ]結束一系列非打印字符
命令編號和歷史編號通常不同:命令的歷史編號是其在歷史列表中的位置,其中可能包括從中恢復的命令歷史文件(參見下面的HISTORY),而命令編號是當前shell會話期間執行的命令序列中的位置。字符串后解碼后,通過參數擴展,命令替換,算術擴展和引用刪除進行擴展,具體取決于promptvars shell選項的值(請參閱在SHELL BUILTIN COMMANDS下面的shopt命令的描述)。
READLINE ? 這是在使用交互式shell時處理讀取輸入的庫,除非在shell調用時給出了--noediting選項。行時編輯也用于 ? 使用-e選項讀取內置函數。默認情況下,行編輯命令與Emacs的命令類似。還提供vi風格的線編輯界面。線 ? 可以使用-o emacs或-o vi選項隨時啟用編輯內置編輯(請參閱下面的SHELL BUILTIN命令)。在shell之后關閉行編輯 ? 運行時,使用+ o emacs或+ o vi選項來設置內置。
Readline表示法 ? 在本節中,Emacs樣式表示法用于表示擊鍵。控制鍵由C鍵表示,例如,Cn表示Control-N。類似地,元鍵表示為 ? M鍵,所以Mx表示Meta-X。(在沒有元鍵的鍵盤上,Mx表示ESC x,即按Esc鍵然后按x鍵。這使ESC成為元前綴。 ? MCx表示ESC-Control-x,或按Esc鍵,然后在按住x鍵的同時按住Control鍵。)
Readline命令可以給出數字參數,通常用作重復計數。然而,有時,這是論證的重要標志。通過一個在向前方向上作用的命令的負參數(例如,kill-line)導致該命令以向后方向動作。其行為與爭論的命令與此不同的是下面提到的。當命令被描述為殺死文本時,保存已刪除的文本以供將來檢索(yanking)。被殺死的文本保存在殺戮戒指中。連續殺人使文本被累積到一個單元中,可以一次全部拉出。不殺死文本的命令將kill ring上的文本塊分開。
讀取線初始化 ? 通過將命令放入初始化文件(inputrc文件)來自定義Readline。此文件的名稱取自INPUTRC變量的值。如果說 ? 變量未設置,默認為?/ .inputrc。當啟動使用readline庫的程序時,將讀取初始化文件,以及鍵綁定和變量 ? 已設定。readline初始化文件中只允許幾個基本結構。空行被忽略。以#開頭的行是注釋。線開始 - ? 用$表示條件結構。其他行表示鍵綁定和變量設置。
可以使用inputrc文件更改默認的鍵綁定。使用此庫的其他程序可能會添加自己的命令和綁定。例如,放置M-Control-u:普遍參數要么C-Meta-u:普遍論證進入inputrc將使MCu執行readline命令universal-argument。識別以下符號字符名稱:RUBOUT,DEL,ESC,LFD,NEWLINE,RET,RETURN,SPC,SPACE和TAB。除了命令名之外,readline還允許將鍵綁定到按下鍵時插入的字符串(宏)。
Readline鍵綁定 ? 用于控制inputrc文件中的鍵綁定的語法很簡單。所需要的只是命令的名稱或宏的文本以及宏的鍵序列 ? 應該受到約束。可以使用以下兩種方式之一指定名稱:作為符號鍵名稱,可能使用Meta-或Control-前綴,或作為鍵序列。
使用表單keyname:function-name或macro時,keyname是用英語拼寫的鍵的名稱。例如:Control-u:通用參數Meta-Rubout:反向殺戮詞Control-o:“>輸出”在上面的例子中,Cu綁定到函數universal-argument,M-DEL綁定到函數reverse-kill-word,而Co綁定運行宏表示的右側(即將文本“輸出”插入行)。在第二種形式中,“keyseq”:function-name或macro,keyseq與上面的keyname不同,因為表示整個鍵序列的字符串可以通過放置雙引號內的序列。可以使用某些GNU Emacs樣式鍵轉義,如下例所示,但無法識別符號字符名稱。“\ Cu”:普遍論證“\ Cx \ Cr”:重新讀取-init-file“\ e [11~”:“功能鍵1”在此示例中,Cu再次綁定到函數universal-argument。Cx Cr綁定到函數re-read-init-file,并且ESC [1 1~必須插入文本``功能鍵1''。完整的GNU Emacs樣式轉義序列是\ C-控制前綴\ M-元前綴\ e逃避角色\\反斜杠\“文字”\'文字'除了GNU Emacs樣式轉義序列之外,還有第二組反斜杠轉義:警報(鈴聲)\ b退格\ d刪除\ f表格飼料\ n換行\ r \ n回車\ t水平標簽\ v垂直標簽\ nnnn八位字符,其值為八進制值nnn(一到三位數)\ xHH八位字符,其值為十六進制值HH(一個或兩個十六進制數字)輸入宏的文本時,必須使用單引號或雙引號來表示宏定義。假設未加引號的文本是函數名稱。在宏體中,上面描述的反斜杠轉義擴展了。反斜杠將引用宏文本中的任何其他字符,包括“和”。Bash允許使用bind builtin命令顯示或修改當前的readline鍵綁定。可以在交互式使用期間通過使用來切換編輯模式set builtin命令的-o選項(參見下面的SHELL BUILTIN命令)。
Readline變量 ? Readline具有可用于進一步定制其行為的變量。可以在inputrc文件中使用表單語句設置變量
設置變量名稱值除非另有說明,否則readline變量可以取值On或Off(不考慮大小寫)。忽略無法識別的變量名稱。讀取變量值時為空或null值,“on”(不區分大小寫),“1”等于On。所有其他值等同于Off。變量及其默認值為:鐘式(可聽)控制當readline想要敲響終端鈴時發生的事情。如果設置為none,則readline永遠不會響鈴。如果設置為可見,則readline使用可見鈴聲如果有的話。如果設置為可聽,則readline嘗試響鈴終端的鈴聲。bind-tty-special-chars(On)如果設置為On,則readline嘗試將內核終端驅動程序專門處理的控制字符綁定到其readline等效項。comment-begin(``#'')執行readline insert-comment命令時插入的字符串。此命令綁定到emacs模式下的M-#和vi命令模式下的#。完成 - 忽略 - 案例(關閉)如果設置為On,則readline以不區分大小寫的方式執行文件名匹配和完成。completion-prefix-display-length(0)無需修改即可顯示的可能完成列表的公共前綴的字符長度。設置為大于零的值時,常見在顯示可能的完成時,超過此值的前綴將替換為省略號。completion-query-items(100)這確定何時查詢用戶查看由possible-completions命令生成的可能完成的數量。它可以設置為任何整數值大于或等于零。如果可能的完成次數大于或等于該變量的值,則詢問用戶是否他希望看到他們; 否則他們只是在終端上列出。convert-meta(On)如果設置為On,readline將通過剝離第8位并為轉義字符加前綴(將in字符轉換為第8位設置為ASCII鍵序列的字符效果,使用轉義作為元前綴)。禁用完成(關閉)如果設置為On,則readline將禁止字完成。完成字符將插入到行中,就像它們已映射到自插入一樣。編輯模式(emacs)控制readline是否以一組類似于Emacs或vi的鍵綁定開頭。編輯模式可以設置為emacs或vi。echo-control-characters(開)設置為On時,在表示支持它的操作系統上,readline回顯與鍵盤生成的信號對應的字符。啟用鍵盤(關閉)設置為On時,readline將在調用時嘗試啟用應用程序鍵盤。某些系統需要此功能才能啟用箭頭鍵。enable-meta-key(On)設置為On時,readline將嘗試啟用終端聲稱在調用時支持的任何元修飾鍵。在許多終端上,元密鑰用于發送八位字符。expand-tilde(關閉)如果設置為On,則當readline嘗試單詞完成時執行波形擴展。歷史保留點(關閉)如果設置為“開”,則歷史記錄代碼會嘗試將點放在使用previous-history或next-history檢索的每個歷史記錄行的相同位置。歷史大小(0)設置歷史列表中保存的最大歷史條目數。如果設置為零,則歷史列表中的條目數不受限制。水平滾動模式(關閉)當設置為On時,使readline使用單行顯示,當輸入長于屏幕寬度時,在單個屏幕行上水平滾動輸入而不是包裝到新的行。input-meta(關閉)如果設置為On,則readline將啟用8位輸入(即,它不會從其讀取的字符中剝離高位),無論終端聲稱它是什么可以支持。名稱meta-flag是此變量的同義詞。isearch-terminators(``C- [C-J'')應該終止增量搜索而不隨后將該字符作為命令執行的字符串。如果沒有給出這個變量a值,字符ESC和CJ將終止增量搜索。keymap(emacs)設置當前的readline鍵映射。有效鍵映射名稱的集合是emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-command和vi-insert。vi相當于VI-命令; emacs相當于emacs-standard。默認值為emacs; 編輯模式的值也會影響默認的鍵盤映射。標記目錄(開)如果設置為On,則已完成的目錄名稱會附加斜杠。mark-modified-lines(Off)如果設置為“開”,則已修改的歷史記錄行將顯示前一個星號(*)。mark-symlinked-directories(Off)如果設置為On,則作為目錄的符號鏈接的已完成名稱會附加斜杠(取決于mark-directories的值)。match-hidden-files(On)此變量設置為On時,會使readline匹配名稱以“。”開頭的文件。執行文件名完成時(隱藏文件)。如果設置為Off,則領先`。' 必須由用戶提供要完成的文件名。menu-complete-display-prefix(關閉)如果設置為“開”,菜單完成將在循環列表之前顯示可能的完成列表的公共前綴(可能為空)。output-meta(關閉)如果設置為On,則readline將顯示直接設置第8位的字符,而不是帶有元前綴的轉義序列。頁面完成(開)如果設置為On,則readline使用內部更類似的尋呼機一次顯示一組可能的完成。水平打印完成(關閉)如果設置為On,則readline將顯示匹配按字母順序水平排序的匹配,而不是屏幕下方。revert-all-at-newline(關閉)如果設置為On,則readline將在執行accept-line返回之前撤消對歷史行的所有更改。默認情況下,可以修改和保留歷史記錄行單個撤消列表調用readline。show-all-if-ambiguous(Off)這會改變完成函數的默認行為。如果設置為On,則具有多個可能完成的單詞會導致匹配立即列出而不是響鈴。show-all-if-unmodified(Off)這會以類似于show-all-if-ambiguous的方式更改完成函數的默認行為。如果設置為On,則具有多個可能的com-在沒有任何可能的部分完成的情況下(可能的完成不共享公共前綴)導致匹配立即列出而不是響鈴鐘聲。跳過完成文本(關閉)如果設置為On,則在將單個匹配插入到行中時,這會改變默認的完成行為。它只在中間執行完成時才有效字。如果啟用,則readline不會在完成單詞后面的字符之后插入字符,所以單詞fol-低位光標不重復。visible-stats(關閉)如果設置為On,則在列出可能的完成時,會將表示stat(2)報告的文件類型的字符附加到文件名。
Readline條件構造 ? Readline實現了與C預處理器的條件編譯功能類似的功能,允許執行鍵綁定和變量設置 ? 作為測試的結果。使用了四種解析器指令。
$ if $ if結構允許基于編輯模式,正在使用的終端或使用readline的應用程序進行綁定。測試文本延伸至線的終點; 隔離它不需要任何字符。mode $ if指令的mode =形式用于測試readline是處于emacs還是vi模式。這可以與set keymap命令一起使用例如,僅當readline以emacs模式開始時才在emacs-standard和emacs-ctlx鍵映射中設置綁定。術語術語=表單可用于包括特定于終端的鍵綁定,可能用于綁定終端的功能鍵輸出的鍵序列。關于這個詞在第一個 - 之前,對終端的全名和終端名稱的部分測試=的右側。這允許太陽匹配兩者例如,sun和sun-cmd。應用應用程序構造用于包括特定于應用程序的設置。每個使用readline庫的程序都會設置應用程序名稱,并且ization文件可以測試特定值。這可用于將鍵序列綁定到對特定程序有用的函數。例如,以下內容命令添加一個引用bash中當前或上一個單詞的鍵序列:$如果Bash#引用當前或上一個單詞“\ C-xq”:“\ eb \”\ ef \“”$ ENDIF$ endif此命令,如上例所示,終止$ if命令。$ else如果測試失敗,則執行$ if指令的此分支中的命令。$包括該指令將單個文件名作為參數,并從該文件中讀取命令和綁定。例如,以下指令將讀取/ etc / inputrc:$ include / etc / inputrc
搜索 ? Readline提供了用于搜索包含指定字符串的行的命令歷史記錄(請參閱下面的HISTORY)的命令。有兩種搜索模式:增量和 ? 非增量。
在用戶鍵入搜索字符串之前開始增量搜索。當鍵入搜索字符串的每個字符時,readline將顯示下一個條目到目前為止匹配字符串的歷史記錄。增量搜索僅需要所需的字符數來查找所需的歷史記錄條目。人物中存在的人物isearch-terminators變量的值用于終止增量搜索。如果尚未為該變量分配Escape和Control-J字符的值將終止增量搜索。Control-G將中止增量搜索并恢復原始行。搜索終止時,包含的歷史條目搜索字符串成為當前行。要在歷史記錄列表中查找其他匹配條目,請根據需要鍵入Control-S或Control-R。這將在歷史記錄中向后或向前搜索下一個條目匹配 - 到目前為止輸入的搜索字符串。綁定到readline命令的任何其他鍵序列將終止搜索并執行該命令。例如,換行符將 - 修改搜索并接受該行,從而從歷史列表中執行命令。Readline會記住最后一個增量搜索字符串。如果鍵入兩個Control-R而沒有任何插入字符定義新的搜索字符串,則記住任何搜索使用字符串。在開始搜索匹配的歷史記錄行之前,非增量搜索會讀取整個搜索字符串。搜索字符串可以由用戶鍵入或者是搜索字符串的一部分當前行的內容。
Readline命令名稱 ? 以下是命令的名稱列表以及它們綁定的默認鍵序列。沒有附帶鍵序列的命令名稱不受限制 ? 默認。在以下描述中,point指的是當前光標位置,而mark指的是set-mark命令保存的光標位置。之間的文字 ? 點和標記稱為區域。
移動命令 ? 行首(Ca) ? 移動到當前行的開頭。 ? 行尾(Ce) ? 移到行尾。 ? forward-char(Cf) ? 向前移動一個角色。 ? 反向字符(Cb) ? 移回一個角色。 ? 前向詞(Mf) ? 前進到下一個單詞的結尾。單詞由字母數字字符(字母和數字)組成。 ? 后向詞(Mb) ? 移回當前或上一個單詞的開頭。單詞由字母數字字符(字母和數字)組成。 ? 殼正向詞 ? 前進到下一個單詞的結尾。單詞由非引用的shell元字符分隔。 ? 殼反向詞 ? 移回當前或上一個單詞的開頭。單詞由非引用的shell元字符分隔。 ? 透明屏幕(Cl) ? 清除屏幕,將當前行保留在屏幕頂部。使用參數,刷新當前行而不清除屏幕。 ? 重繪電流線 ? 刷新當前行。
操縱歷史的命令 ? 接受(換行,返回) ? 無論光標在哪里,都接受該行。如果此行非空,請根據HISTCONTROL變量的狀態將其添加到歷史列表中。如果 ? line是已修改的歷史記錄行,然后將歷史記錄行還原為其原始狀態。 ? 前歷史(Cp) ? 從歷史列表中獲取上一個命令,然后在列表中返回。 ? 次歷史(Cn) ? 從歷史列表中獲取下一個命令,在列表中向前移動。 ? 歷史起點(M- <) ? 移至歷史記錄的第一行。 ? 歷史終結(M->) ? 移動到輸入歷史記錄的末尾,即當前輸入的行。 ? 反向搜索歷史(Cr) ? 從當前行開始向后搜索,并根據需要在歷史記錄中“向上”移動。這是增量搜索。 ? 前向搜索歷史(Cs) ? 從當前行開始向前搜索,并根據需要在歷史記錄中“向下”移動。這是增量搜索。 ? 非增量反向搜索歷史(Mp) ? 使用非增量搜索用戶提供的字符串向后搜索從當前行開始的歷史記錄。 ? 非增量前向搜索歷史(Mn) ? 使用非增量搜索用戶提供的字符串向前搜索歷史記錄。 ? 歷史搜索前進 ? 在歷史記錄中搜索當前行的起點和點之間的字符串。這是一種非增量搜索。 ? 歷史搜索落后 ? 在歷史記錄中向后搜索當前行的開頭和點之間的字符串。這是一種非增量搜索。 ? yank-nth-arg(MCy) ? 將第一個參數插入上一個命令(通常是前一行的第二個字)。使用參數n,插入前一個第n個單詞 ? 命令(上一個命令中的單詞以單詞0開頭)。負參數插入上一個命令末尾的第n個單詞。一旦參數n為 ? 在計算中,提取參數就好像已經指定了“!n”歷史擴展一樣。 ? yank-last-arg(M-。,M-) ? 將最后一個參數插入上一個命令(上一個歷史記錄條目的最后一個單詞)。使用數字參數,行為與yank-nth-arg完全相同。連續 ? 調用yank-last-arg后退回歷史列表,依次插入每行的最后一個單詞(或參數指定的單詞)。任何 ? 提供給這些連續調用的數字參數決定了在歷史記錄中移動的方向。一個負面的論點改變了他的方向 - ? 保守黨(后退或前鋒)。歷史擴展工具用于提取最后一個參數,就好像已經指定了“!$”歷史擴展一樣。 ? 殼擴展線(MCe) ? 像shell一樣擴展行。這將執行別名和歷史記錄擴展以及所有shell單詞擴展。有關描述,請參閱下面的歷史擴展 ? 歷史擴張的歷史。 ? 歷史擴展線(M- ^) ? 在當前行上執行歷史記錄擴展。有關歷史記錄擴展的說明,請參閱下面的歷史記錄擴展。 ? 魔術空間 ? 在當前行上執行歷史記錄擴展并插入空格。有關歷史記錄擴展的說明,請參閱下面的歷史記錄擴展。 ? 別名擴展線 ? 在當前行上執行別名擴展。有關別名擴展的說明,請參見上面的ALIASES。 ? 歷史和別名擴展線 ? 在當前行上執行歷史記錄和別名擴展。 ? insert-last-argument(M-。,M-) ? yank-last-arg的同義詞。 ? 操作并獲得下一個(Co) ? 接受當前行以執行并從歷史記錄中獲取相對于當前行的下一行以進行編輯。任何參數都會被忽略。 ? 編輯執行命令(C-xC-e) ? 在當前命令行上調用編輯器,并將結果作為shell命令執行。Bash嘗試調用$ VISUAL,$ EDITOR和emacs作為編輯器 ? 訂購。
更改文本的命令 ? delete-char(Cd) ? 刪除點上的字符。如果point位于行的開頭,則行中沒有字符,并且鍵入的最后一個字符未綁定 ? delete-char,然后返回EOF。 ? backward-delete-char(Rubout) ? 刪除光標后面的字符。給定數字參數時,將刪除的文本保存在kill ring上。 ? 前后 - 刪除 - 木炭 ? 刪除光標下的字符,除非光標位于行的末尾,在這種情況下,光標后面的字符將被刪除。 ? 引用插入(Cq,Cv) ? 將逐字輸入的下一個字符添加到行中。例如,這是如何插入像Cq這樣的字符。 ? tab-insert(Cv TAB) ? 插入制表符。 ? 自插入(a,b,A,1,!,...) ? 插入鍵入的字符。 ? 轉置字符(Ct) ? 在角點前方向拖動角色,然后向前移動角色。如果point位于該行的末尾,那么這將轉換為兩者 ? 點之前的字符。否定論點沒有效果。 ? 轉置詞(Mt) ? 在點之前拖過單詞之前的單詞,也將點移動到該單詞之上。如果point位于該行的末尾,則會轉換最后兩個單詞 ? 這條線。 ? upcase-word(Mu) ? 大寫當前(或后續)單詞。使用否定參數,大寫前一個單詞,但不要移動點。 ? downcase-word(M1) ? 小寫當前(或后續)單詞。使用否定參數,小寫前一個單詞,但不要移動點。 ? 大寫字(Mc) ? 將當前(或后續)單詞大寫。使用否定參數,將前一個詞大寫,但不要移動點。 ? 覆蓋模式 ? 切換覆蓋模式。使用顯式正數字參數,切換到覆蓋模式。使用顯式非正數字參數,切換到插入 ? 模式。此命令僅影響emacs模式; vi模式會以不同方式覆蓋。每次調用readline()都以插入模式啟動。在覆蓋模式下,字符綁定 ? 自我插入在點處替換文本而不是將文本推向右側。綁定到backward-delete-char的字符用a替換點之前的字符 ? 空間。默認情況下,此命令未綁定。
殺戮和Yanking ? 殺線(Ck) ? 將文本從點到終止。 ? 反向殺線(Cx Rubout) ? 向后殺到行的開頭。 ? unix-line-discard(Cu) ? 從點向后殺死到行的開頭。被殺死的文本保存在kill-ring中。 ? 殺,整線 ? 殺死當前行上的所有字符,無論在哪里。 ? 殺字(Md) ? 從點到當前單詞的結尾,或者如果在單詞之間,到下一個單詞的結尾。字邊界與前向字使用的邊界相同。 ? 反向殺詞(M-Rubout) ? 殺掉點后面的詞。字邊界與后向字使用的邊界相同。 ? shell-kill-word(Md) ? 從點到當前單詞的結尾,或者如果在單詞之間,到下一個單詞的結尾。字邊界與shell-forward-word使用的邊界相同。 ? shell-backward-kill-word(M-Rubout) ? 殺掉點后面的詞。字邊界與shell-backward-word使用的邊界相同。 ? unix-word-rubout(Cw) ? 使用空格作為單詞邊界,殺掉單詞后面的單詞。被殺死的文本保存在kill-ring中。 ? UNIX的文件名,擦去 ? 使用空格和斜線字符作為單詞邊界,將單詞后面的單詞殺死。被殺死的文本保存在kill-ring中。 ? 刪除 - 水平空間(M- \) ? 刪除點周圍的所有空格和制表符。 ? 殺區 ? 殺死當前區域的文本。 ? 復制區域作為殺 ? 將區域中的文本復制到kill緩沖區。 ? 復制反向詞 ? 將點前的單詞復制到kill buffer。單詞邊界與后向單詞相同。 ? 復制正向詞 ? 將以下單詞復制到kill buffer。單詞邊界與前向單詞相同。 ? 猛拉(Cy) ? 將殺戮戒指的頂部放入緩沖點。 ? yank-pop(我的) ? 旋轉殺環,并猛拉新的頂部。只能在yank或yank-pop之后工作。
數字參數 ? 數字參數(M-0,M-1,...,M--) ? 將此數字添加到已累積的參數中,或啟動新參數。M--開始一個負面的論點。 ? 通用參數的 ? 這是指定參數的另一種方法。如果此命令后跟一個或多個數字,可選地帶有前導減號,則這些數字定義參數。 ? 如果該命令后跟數字,則再次執行universal-argument將結束數字參數,否則將被忽略。作為一種特殊情況,如果是這個命令 ? 緊接著是一個既不是數字也不是減號的字符,下一個命令的參數計數乘以4。參數計數是ini ? 因此,第一次執行此函數會使參數計數為4,第二次使參數計數為16,依此類推。
完成 ? 完成(TAB) ? 嘗試在點之前對文本執行完成。Bash嘗試完成將文本視為變量(如果文本以$開頭),用戶名(如果是文本 ? 以?)開頭,主機名(如果文本以@開頭)或命令(包括別名和函數)依次開始。如果這些都不產生匹配,則文件名完成 ? 嘗試。 ? 可能完成(M-?) ? 在點之前列出文本的可能完成情況。 ? 插入完成(M- *) ? 在可能完成生成的點之前插入文本的所有完成。 ? 菜單完成 ? 與完成類似,但用可能的完成列表中的單個匹配替換要完成的單詞。重復執行菜單完成步驟 ? 通過可能的完成列表,依次插入每個匹配。在完成列表的最后,響鈴響起(根據鐘式設置) ? 并恢復原始文本。n的參數在匹配列表中向前移動n個位置; 可以使用否定參數向后移動 ? 名單。此命令旨在綁定到TAB,但默認情況下不綁定。 ? 菜單完成后向 ? 與菜單完成相同,但在可能的完成列表中向后移動,就像菜單完成被賦予了否定參數一樣。這個命令是 ? 默認情況下不綁定。 ? 刪除 - 炭或列表 ? 如果不在行的開頭或結尾(如delete-char),則刪除光標下的字符。如果在行尾,行為與可能的行為相同 ? pletions。默認情況下,此命令未綁定。 ? 完整文件名(M- /) ? 在點之前的文本上嘗試完成文件名。 ? 可能的文件名完成次數(Cx /) ? 在點之前列出文本的可能完成,將其視為文件名。 ? 完整用戶名(M-~) ? 在點之前嘗試完成文本,將其視為用戶名。 ? 可能的用戶名完成次數(Cx~) ? 在點之前列出文本的可能完成,將其視為用戶名。 ? 完全變量(M- $) ? 在點之前嘗試完成文本,將其視為shell變量。 ? 可能變量完成(Cx $) ? 在點之前列出文本的可能完成,將其視為shell變量。 ? 完整主機名(M- @) ? 在點之前嘗試完成文本,將其視為主機名。 ? 可能的主機名完成次數(Cx @) ? 在點之前列出文本的可能完成,將其視為主機名。 ? 完成命令(M-!) ? 在點之前嘗試完成文本,將其視為命令名稱。命令完成嘗試將文本與別名,保留字,shell函數匹配 ? tions,shell builtins,最后是可執行文件名,按順序排列。 ? 可能的命令完成(Cx!) ? 在點之前列出文本的可能完成,將其視為命令名稱。 ? 動態完整歷史(M-TAB) ? 在點之前嘗試完成文本,將文本與歷史列表中的行進行比較,以獲得可能的完成匹配。 ? dabbrev-擴大 ? 嘗試在點之前的文本上完成菜單,將文本與歷史列表中的行進行比較,以獲得可能的完成匹配。 ? 完成括號(M- {) ? 執行文件名完成并插入括號內的可能完成列表,以便shell可以使用該列表(參見上面的Brace Expansion)。
鍵盤宏 ? start-kbd-macro(Cx() ? 開始保存鍵入當前鍵盤宏的字符。 ? end-kbd-macro(Cx)) ? 停止保存鍵入當前鍵盤宏的字符并存儲定義。 ? call-last-kbd-macro(Cx e) ? 重新執行最后定義的鍵盤宏,方法是使宏中的字符顯示為在鍵盤上鍵入。
雜 ? re-read-init-file(Cx Cr) ? 讀入inputrc文件的內容,并合并在那里找到的任何綁定或變量賦值。 ? 中止(Cg) ? 中止當前編輯命令并振鈴終端鈴(取決于鈴聲設置)。 ? do-uppercase-version(Ma,Mb,Mx,...) ? 如果元化字符x為小寫,請運行綁定到相應大寫字符的命令。 ? 前綴元(ESC) ? Metafy下一個字符輸入。ESC f相當于Meta-f。 ? 撤消(C-_,Cx Cu) ? 增量撤消,分別記住每一行。 ? 恢復線(先生) ? 撤消對此行所做的所有更改。這就像執行undo命令足夠多次以將行返回到其初始狀態。 ? 波浪擴展(M-&) ? 對當前單詞執行波浪擴展。 ? 設定標記(C- @,M- <空格>) ? 將標記設置為該點。如果提供了數字參數,則標記將設置為該位置。 ? 交換點和標記(Cx Cx) ? 用標記交換點。當前光標位置設置為保存位置,舊光標位置保存為標記。 ? 字符搜索(C-]) ? 讀取一個字符,并將點移動到該字符的下一個匹配項。否定計數搜索先前發生的事件。 ? 字符搜索后退(MC-]) ? 讀取一個字符,并將點移動到該字符的上一個匹配項。否定計數搜索后續發生的事件。 ? 跳過-CSI-序列 ? 讀取足夠多的字符以使用多鍵序列,例如為Home和End等鍵定義的序列。此類序列以控制序列指示符(CSI)開頭, ? 通常ESC- [。如果此序列綁定到“\ [”,則生成此類序列的鍵將無效,除非明確綁定到readline命令,而不是插入 - ? 將雜散字符放入編輯緩沖區。默認情況下,這是未綁定的,但通常綁定到ESC- [。 ? 插入注釋(M-#) ? 如果沒有數字參數,則會在當前行的開頭插入readline comment-begin變量的值。如果提供了數字參數,則為此 ? 命令用作切換:如果行開頭的字符與comment-begin的值不匹配,則插入值,否則輸入字符 ? comment-begin從行的開頭刪除。在任何一種情況下,都接受該行,就像輸入換行符一樣。comment-begin的默認值 ? 導致此命令使當前行成為shell注釋。如果數字參數導致刪除注釋字符,則該行將由執行 ? 貝殼。 ? 全球字(Mg) ? 點之前的單詞被視為路徑名擴展的模式,隱式附加星號。此模式用于生成匹配文件列表 ? 可能的完成名稱。 ? glob-expand-word(Cx *) ? 點之前的單詞被視為路徑名擴展的模式,并插入匹配文件名列表,替換單詞。如果是數字參數 ? 如果提供,則在路徑名擴展之前附加星號。 ? glob-list-expansions(Cx g) ? 將顯示由glob-expand-word生成的擴展列表,并重新繪制該行。如果提供了數字參數,則為星號 ? 在路徑名擴展之前附加。 ? 翻斗功能 ? 將所有函數及其鍵綁定打印到readline輸出流。如果提供了數字參數,則輸出的格式可以是這樣 ? 成為inputrc文件的一部分。 ? 翻斗變量 ? 將所有可設置的readline變量及其值打印到readline輸出流。如果提供了數字參數,則以這種方式格式化輸出 ? 它可以成為inputrc文件的一部分。 ? 翻斗宏 ? 打印綁定到宏的所有readline鍵序列及其輸出的字符串。如果提供了數字參數,則輸出的格式將使其格式化 ? 可以成為inputrc文件的一部分。 ? display-shell-version(Cx Cv) ? 顯示有關當前bash實例的版本信息。
可編程完成 ? 當嘗試使用完整內置函數定義完成規范(compspec)的命令的參數時,單詞完成(參見SHELL ? 下面的BUILTIN命令),調用可編程完成工具。
首先,識別命令名稱。如果命令字是空字符串(在空行的開頭嘗試完成),則使用-E定義任何compspec使用完成選項。如果已為該命令定義了compspec,則compspec用于生成該單詞的可能完成列表。如果命令word是完整路徑名,首先搜索完整路徑名的compspec。如果沒有找到完整路徑名的compspec,則嘗試查找compspec在最后的斜線之后的部分。如果這些搜索沒有導致compspec,則使用-D選項完成定義的任何compspec都將用作默認值。找到compspec后,它將用于生成匹配單詞列表。如果未找到compspec,則完成上面所述的默認bash完成 - 執行。首先,使用compspec指定的操作。僅返回以完成的單詞為前綴的匹配。當-f或-d選項用于文件時 - 名稱或目錄名稱完成后,shell變量FIGNORE用于過濾匹配項。接下來生成由路徑名擴展模式指定到-G選項的任何完成。模式生成的單詞不需要與正在完成的單詞匹配。GLOBIGNORE shell變量不用于過濾匹配項,但使用了FIGNORE變量。接下來,將考慮指定為-W選項的參數的字符串。首先使用IFS特殊變量中的字符將字符串拆分為分隔符。貝殼報價很榮幸。然后使用括號擴展,波浪擴展,參數和變量擴展,命令替換和算術擴展來擴展每個單詞如上所述在擴展中。使用上面在Word Splitting下描述的規則拆分結果。擴展的結果是前綴匹配的單詞正在完成,匹配的單詞成為可能的完成。生成這些匹配項后,將調用使用-F和-C選項指定的任何shell函數或命令。當調用命令或函數時,COMP_LINE,COMP_POINT,COMP_KEY和COMP_TYPE變量分配值如上所述在Shell變量下。如果正在調用shell函數,則為COMP_WORDS和COMP_CWORD變量也設置。調用函數或命令時,第一個參數是參數完成的命令的名稱,第二個參數參數是正在完成的單詞,第三個參數是在當前命令行上完成的單詞之前的單詞。沒有過濾生成的com-反對完成的詞語被執行; 函數或命令在生成匹配時具有完全的自由度。首先調用使用-F指定的任何函數。該函數可以使用任何shell工具,包括下面描述的compgen,來生成匹配。它必須將可能的完成放在COMPREPLY數組變量中。接下來,在與命令替換等效的環境中調用使用-C選項指定的任何命令。它應該打印一個完成列表,每行一個,到標準輸出。如有必要,可以使用反斜杠來轉義換行符。生成所有可能的完成后,將使用-X選項指定的任何過濾器應用于列表。過濾器是用于路徑名擴展的模式;模式中的a&替換為正在完成的單詞的文本。文字&可以用反斜杠逃脫; 在嘗試匹配之前刪除反斜杠。任何與模式匹配的完成都將從列表中刪除。領先!否定了這種模式; 在這種情況下,任何與模式不匹配的完成都將被刪除。最后,將使用-P和-S選項指定的任何前綴和后綴添加到完成列表的每個成員,并將結果返回到readline完成代碼作為可能的完成列表。如果先前應用的操作未生成任何匹配項,并且在定義compspec時提供了-o dirnames選項以完成,則目錄名稱完成為嘗試。如果在定義compspec時提供-o plusdirs選項以完成,則嘗試完成目錄名稱,并將任何匹配添加到另一個的結果中動作。默認情況下,如果找到compspec,它生成的任何內容都將作為完整的可能完成集返回到完成代碼。默認的bash完成不是嘗試,并禁用文件名完成的readline默認值。如果在定義compspec時提供了-o bashdefault選項以完成,則bash默認如果compspec不生成匹配,則嘗試完成。如果在定義compspec時提供-o default選項以完成,則readline的默認選項為如果compspec(以及,如果嘗試,默認的bash完成)不生成匹配,則將執行。當compspec指示需要完成目錄名稱時,可編程完成函數強制readline將斜杠附加到已完成的名稱,這些名稱是sym-bolic鏈接到目錄,受標記目錄readline變量值的限制,無論mark-symlinked-directories readline變量的設置如何。有一些動態修改完成的支持。當與使用完整-D指定的默認完成結合使用時,這非常有用。這是可能的對于作為完成處理程序執行的shell函數,表示應該通過返回124的退出狀態來重試完成。如果shell函數返回124,并更改與正在嘗試完成的命令相關的compspec(作為執行該函數時的第一個參數提供),可編程的pletion從頭開始重新啟動,嘗試為該命令找到新的compspec。這允許在完成時動態構建一組完成嘗試,而不是一次性加載。例如,假設有一個compspec庫,每個都保存在與命令名對應的文件中,以下默認完成函數將動態加載完成:_completion_loader(){。“/etc/bash_completion.d/$1.sh”> / dev / null 2>&1 &&返回124}完成-D -F _completion_loader
歷史 ? 啟用set builtin的-o history選項后,shell將提供對命令歷史記錄的訪問,該命令歷史記錄是先前鍵入的命令列表。HISTSIZE的價值 ? 變量用作要保存在歷史列表中的命令數。保存最后一個HISTSIZE命令的文本(默認為500)。shell將每個命令存儲在 ? 參數和變量擴展之前的歷史列表(參見上面的EXPANSION)但是在執行歷史擴展之后,受shell變量HISTIGNORE的值的限制 ? 和HISTCONTROL。
在啟動時,歷史記錄從變量HISTFILE(默認為?/ .bash_history)命名的文件中初始化。如果nec-,則截斷由HISTFILE值命名的文件essary,包含不超過HISTFILESIZE值指定的行數。讀取歷史文件時,以歷史注釋字符開頭的行緊接著一個數字被解釋為前一個歷史記錄行的時間戳。可選擇顯示這些時間戳,具體取決于HIST的值 - TIMEFORMAT變量。當交互式shell退出時,最后的$ HISTSIZE行將從歷史列表復制到$ HISTFILE。如果啟用了histappend shell選項(請參閱在下面的SHELL BUILTIN COMMANDS下對shopt的描述),這些行被附加到歷史文件中,否則將覆蓋歷史文件。如果未設置HISTFILE,或如果歷史文件不可寫,則不保存歷史記錄。如果設置了HISTTIMEFORMAT變量,則會將時間戳寫入歷史文件,并使用歷史記錄編寫可以在shell會話中保留它們。這使用歷史注釋字符來區分時間戳與其他歷史記錄行。保存后歷史記錄,歷史文件被截斷為包含不超過HISTFILESIZE行。如果未設置HISTFILESIZE,則不執行截斷。內置命令fc(參見下面的SHELL BUILTIN命令)可用于列出或編輯和重新執行歷史列表的一部分。內置的歷史可能用于dis-播放或修改歷史列表并操縱歷史文件。使用命令行編輯時,搜索命令在每個提供訪問權限的編輯模式下可用歷史清單。shell允許控制在歷史列表中保存哪些命令。可以將HISTCONTROL和HISTIGNORE變量設置為使shell僅保存一部分輸入的命令。cmdhist shell選項(如果啟用)會導致shell嘗試在同一歷史記錄條目中保存多行命令的每一行,并添加一個必要時冒號以保持句法正確性。lithist shell選項使shell使用嵌入的換行符而不是分號來保存命令。看到有關設置和取消設置shell選項的信息,請參閱SHELL BUILTIN COMMANDS下面內置的shopt的說明。
歷史擴張 ? shell支持歷史記錄擴展功能,類似于csh中的歷史記錄擴展。本節介紹可用的語法功能。這個功能是 ? 默認情況下為交互式shell啟用,并且可以使用set builtin命令的+ H選項禁用(請參閱下面的SHELL BUILTIN命令)。非交互式shell ? 默認不執行歷史記錄擴展。
歷史擴展將歷史列表中的單詞引入輸入流,使得重復命令變得容易,將前一個命令的參數插入到當前輸入行,或快速修復以前命令中的錯誤。在讀取完整行之后,在shell將其分解為單詞之前立即執行歷史記錄擴展。它分兩部分進行。首先是確定在替換期間使用歷史列表中的哪一行。第二種是選擇該行的部分以包含在當前行中。從中選擇的行歷史是事件,并且該行的部分是單詞。各種修飾符可用于操縱所選單詞。這條線被打破了單詞與讀取輸入時的方式相同,因此用引號括起來的幾個由元字符分隔的單詞被認為是一個單詞。歷史擴展是介紹 - 由歷史擴張人物的外觀決定,這是!默認情況下。只有反斜杠(\)和單引號才能引用歷史記錄擴展字符。如果在歷史擴展字符后立即找到,則幾個字符會禁止歷史擴展,即使它沒有引用:空格,制表符,換行符,回車符和=。如果啟用了extglob shell選項,(也將禁止擴展。可以使用內置shopt設置的幾個shell選項來定制歷史擴展的行為。如果啟用了histverify shell選項(請參閱說明如下所示的shopt內置),并且正在使用readline,歷史替換不會立即傳遞給shell解析器。而是將擴展的行重新加載到readline編輯緩沖區用于進一步修改。如果正在使用readline,并且啟用了histreedit shell選項,則將重新加載失敗的歷史記錄替換進入readline編輯緩沖區進行校正。history builtin命令的-p選項可用于查看歷史擴展在使用之前將執行的操作。-s對內置歷史記錄的選項可用于將命令添加到歷史列表的末尾而不實際執行它們,以便它們可用于后續調用。shell允許控制歷史擴展機制使用的各種字符(參見Shell變量下面的histchars描述)。shell使用了歷史記錄注釋字符,用于在編寫歷史文件時標記歷史時間戳。
活動指示人 ? 事件指示符是對歷史列表中命令行條目的引用。除非參考是絕對的,否則事件與歷史中的當前位置相關 ? 名單。
!啟動歷史記錄替換,除非后跟空格,換行符,回車符,=或(當使用內置shopt啟用extglob shell選項時)。!n請參閱命令行n。!-n請參閱當前命令減去n。!請參閱上一個命令。這是`!-1'的同義詞。!串請參閱以字符串開頭的歷史列表中當前位置之前的最新命令。!?串[?]請參閱包含字符串的歷史記錄列表中當前郵件之前的最新命令。尾隨?如果跟隨字符串,則可以省略通過換行符。^ ^ STRING1 ^字符串2快速替換。重復上一個命令,將string1替換為string2。相當于``!!:s / string1 / string2 /''(參見下面的修飾符)。!#到目前為止輸入的整個命令行。
Word指示符 ? Word指示符用于從事件中選擇所需的單詞。答:將事件規范與單詞指示符分開。如果單詞指示符可以省略 ? 以^,$,, - 或%開頭。單詞從行的開頭編號,第一個單詞用0(零)表示。單詞被插入當前行 ? 由單個空格分隔。
0(零)第0個字。對于shell,這是命令字。n第n個字。^第一個參數。也就是說,單詞1。$最后一個論點。%這個詞匹配最近的`?string?' 搜索。xy各種單詞; `-y'縮寫為'0-y'。*所有的話,但第0。這是“1- $”的同義詞。如果事件中只有一個單詞,則使用*不是錯誤; 返回空字符串那種情況。x *縮寫x- $。x-縮寫x- $喜歡x *,但省略了最后一個單詞。如果提供的字指示符沒有事件規范,則將上一個命令用作事件。
修飾符 ? 在可選的單詞指示符之后,可能會出現一個或多個以下修飾符的序列,每個修飾符前面都有一個“:”。
h刪除尾隨文件名組件,只留下頭部。t刪除所有前導文件名組件,留下尾部。r刪除表單.xxx的尾隨后綴,保留基本名稱。e刪除除尾隨后綴之外的所有內容。p打印新命令但不執行它。引用替換的單詞,逃避進一步的替換。x引用替換單詞與q一樣,但在空白和換行符處分成單詞。S /老/新/在事件行中替換new為第一次出現的old。可以使用任何分隔符代替/。最終分隔符是可選的,如果它是最后一個字符 - 事件線之一。可以使用單個反斜杠以舊的和新的引用分隔符。如果&出現在新的,它將被舊的替換。一個反斜杠就會引用&。如果old為null,則將其設置為最后一個舊的替換,或者,如果沒有發生先前的歷史記錄替換,則為!?string [?]搜索中的最后一個字符串。&重復之前的替換。g導致在整個事件行上應用更改。它與`:s'(例如,`:gs / old / new /')或`:&'一起使用。如果與`:s'一起使用,任何分隔符都可以用于代替/,如果它是事件行的最后一個字符,則最終分隔符是可選的。a可以用作g的同義詞。G對事件行中的每個單詞應用以下`s'修飾符一次。
SHELL BUILTIN命令 ? 除非另有說明,否則本節中記錄的每個內置命令都是接受選項 - 接受 - 表示選項的結束。:,真的,假的, ? 并且測試內置不接受選項而不接受 - 特別是。exit,logout,break,continue,let和shift builtins接受并處理以...開頭的參數 ? - 無需 - 。其他接受參數但未指定為接受選項的內置函數解釋以 - 作為無效選項和require開頭的參數 ? - 防止這種解釋。 ? :[arg uments] ? 沒有效果; 除擴展參數和執行任何指定的重定向之外,該命令不執行任何操作。返回零退出代碼。
。文件名[參數]源文件名[參數]在當前shell環境中從filename讀取并執行命令,并返回從filename執行的最后一個命令的退出狀態。如果文件名沒有包含斜杠,PATH中的文件名用于查找包含filename的目錄。在PATH中搜索的文件不需要是可執行的。當bash不在時posix模式,如果在PATH中找不到文件,則搜索當前目錄。如果關閉shopt builtin命令的sourcepath選項,則PATH不會搜索。如果提供了任何參數,則在執行文件名時它們將成為位置參數。否則,位置參數不變。該返回狀態是腳本中退出的最后一個命令的狀態(如果沒有執行命令,則為0),如果找不到或無法讀取文件名,則返回false。別名[-p] [name [= value] ...]沒有參數的別名或帶-p選項的別名在標準輸出上以別名name = value的形式打印別名列表。提供參數時,別名為為每個給出其值的名稱定義。當別名展開時,值的尾隨空格會導致檢查下一個單詞的別名替換。對于每一個參數列表中沒有提供值的名稱,將打印別名的名稱和值。除非給出沒有別名的名稱,否則別名返回true已定義。bg [jobspec ...]在后臺恢復每個暫停的作業jobspec,就好像它是以&開頭的一樣。如果jobspec不存在,則使用shell的當前作業概念。BGjobspec返回0,除非在禁用作業控制時運行,或者在啟用作業控制的情況下運行時,未找到任何指定的jobspec或在沒有作業控制的情況下啟動特倫。綁定[-m keymap] [-lpsvPSV]bind [-m keymap] [-q function] [-u function] [-r keyseq]bind [-m keymap] -f filenamebind [-m keymap] -x keyseq:shell-commandbind [-m keymap] keyseq:function-name綁定readline-command顯示當前讀取鍵和函數綁定,將鍵序列綁定到readline函數或宏,或設置readline變量。每個非選項參數都是a命令,因為它將出現在.inputrc中,但每個綁定或命令必須作為單獨的參數傳遞; 例如,''\ Cx \ Cr“:重新讀取-init-file'。選項,如果支持合作,具有以下含義:-m keymap使用keymap作為后續綁定影響的鍵映射。可接受的鍵映射名稱是emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-move,vi-command和vi-insert。vi相當于vi-command; emacs相當于emacs-standard。-l列出所有readline函數的名稱。-p以可重新讀取的方式顯示readline函數名稱和綁定。-P列出當前的readline函數名稱和綁定。-s顯示綁定到宏的readline鍵序列以及它們輸出的字符串,以便可以重新讀取它們。-S顯示綁定到宏的readline鍵序列及其輸出的字符串。-v以可重新讀取的方式顯示readline變量名稱和值。-V列出當前的readline變量名稱和值。-f文件名從文件名中讀取鍵綁定。-q功能查詢哪些鍵調用命名函數。-u功能取消綁定綁定到指定函數的所有鍵。-r keyseq刪除keyseq的所有當前綁定。-x keyseq:shell-command導致在輸入keyseq時執行shell命令。執行shell-command時,shell將READLINE_LINE變量設置為readline行緩沖區和READLINE_POINT變量到插入點的當前位置。如果執行的命令更改了READLINE_LINE的值或者READLINE_POINT,這些新值將反映在編輯狀態中。除非給出無法識別的選項或發生錯誤,否則返回值為0。休息[n]從for,while,until或select循環中退出。如果指定了n,則中斷n個級別。n必須≥1。如果n大于封閉循環的數量,則全部退出封閉循環。當n≤0時,返回值不為零; 否則,break返回0值。內置shell-builtin [參數]執行指定的shell內置,傳遞參數,并返回其退出狀態。這在定義名稱與shell相同的函數時很有用內置,保留功能內置功能。cd builtin通常以這種方式重新定義。如果是shell-builtin,則返回狀態為false不是shell內置命令。來電者[expr]返回任何活動子例程調用的上下文(shell函數或使用。或source builtins執行的腳本)。如果沒有expr,調用者將顯示行號和當前子程序調用的源文件名。如果提供非負整數作為expr,則調用者顯示行號,子例程名稱和源文件對應于當前執行調用堆棧中的該位置。例如,可以使用該額外信息來打印堆棧跟蹤。目前的框架是除非shell沒有執行子例程調用或者expr不對應于調用堆棧中的有效位置,否則返回值為0。cd [-L | [-P [-e]]] [dir]將當前目錄更改為dir。變量HOME是默認目錄。變量CDPATH定義包含dir的目錄的搜索路徑。替代CDPATH中的目錄名用冒號(:)分隔。CDPATH中的空目錄名與當前目錄相同,即“。”。如果dir以斜線開頭(/),然后不使用CDPATH。-P選項表示使用物理目錄結構而不是遵循符號鏈接(另請參閱set builtin的-P選項)命令); -L選項強制遵循符號鏈接。如果-e選項隨-P提供,并且當前工作目錄無法成功確定成功更改目錄后,cd將返回不成功的狀態。 - 的參數相當于$ OLDPWD。如果是非空目錄名稱使用CDPATH,或者如果 - 是第一個參數,并且目錄更改成功,則新工作目錄的絕對路徑名將寫入標準輸出。如果目錄已成功更改,則返回值為true; 否則是假的。命令[-pVv]命令[arg ...]使用args運行命令可以抑制正常的shell函數查找。僅執行在PATH中找到的內置命令或命令。如果給出-p選項,則使用PATH的默認值執行搜索命令,保證找到所有標準實用程序。如果提供-V或-v選項,則a打印命令的描述。-v選項會生成一個單詞,指示用于調用命令的命令或文件名; -V選項pro-更詳細的描述。如果提供了-V或-v選項,則在找到命令時退出狀態為0,否則為1。如果沒有提供任何選項和發生錯誤或無法找到命令,退出狀態為127.否則,命令builtin的退出狀態是命令的退出狀態。compgen [選項] [字]根據選項生成可能的單詞完成匹配,這可能是完整內置程序接受的任何選項,但-p和-r除外,并且將匹配寫入標準輸出。使用-F或-C選項時,可編程完成工具設置的各種shell變量雖然可用,沒有有用的價值。匹配將以與可編程完成代碼直接從具有相同標志的完成規范生成它們相同的方式生成。如果指定了單詞,則僅顯示匹配單詞的那些完成。除非提供了無效選項,否則返回值為true,或者未生成任何匹配項。完成[-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command][-X filterpat] [-P prefix] [-S suffix] name [name ...]完成-pr [-DE] [name ...]指定應如何完成每個名稱的參數。如果提供了-p選項,或者未提供任何選項,則會打印現有的完成規范一種允許它們作為輸入重用的方法。-r選項刪除每個名稱的完成規范,如果沒有提供名稱,則刪除所有完成規范 - 蒸發散。-D選項表示剩余的選項和操作應該適用于``default''命令完成; 也就是說,嘗試完成命令以前沒有完成任何完成。-E選項表示剩余的選項和操作應該適用于``empty''命令完成; 那是,在空行上嘗試完成。上面在可編程完成時描述了在嘗試完成單詞時應用這些完成規范的過程。其他選項(如果指定)具有以下含義。應引用-G,-W和-X選項的參數(如果需要,還有-P和-S選項)在調用完整的內置函數之前保護它們不被擴展。-o comp-optioncomp-option控制compspec行為的幾個方面,而不僅僅是簡單生成完成。comp-option可能是以下之一:bashdefault如果compspec沒有生成匹配項,則執行其余的默認bash完成。default如果compspec不生成匹配項,則使用readline的默認文件名完成。dirnames中如果compspec沒有生成匹配項,則執行目錄名稱完成。文件名告訴readline compspec生成文件名,因此它可以執行任何特定于文件名的處理(比如在目錄名稱中添加斜杠,特殊字符,或抑制尾隨空格)。旨在與shell函數一起使用。nospace告訴readline不要在行尾添加一個空格(默認值)。plusdirs在生成compspec定義的任何匹配項之后,嘗試完成目錄名稱,并將任何匹配項添加到另一個匹配項的結果中動作。- 行動該操作可以是以下之一,以生成可能的完成列表:別名別名。也可以指定為-a。arrayvar數組變量名。綁定Readline鍵綁定名稱。builtin shell內置命令的名稱。也可以指定為-b。命令命令。也可以指定為-c。目錄目錄名稱。也可以指定為-d。殘已禁用的shell內置命令的名稱。enabled已啟用的shell內置命令的名稱。export導出的shell變量的名稱。也可以指定為-e。file文件名。也可以指定為-f。功能shell函數的名稱。組名稱組。也可以指定為-g。HELPTOPIC幫助內置的幫助主題。主機名主機名,取自HOSTFILE shell變量指定的文件。作業名稱,如果作業控制處于活動狀態。也可以指定為-j。關鍵字Shell保留字。也可以指定為-k。如果作業控制處于活動狀態,則運行正在運行的作業的名稱服務服務名稱。也可以指定為-s。setopt set builtin的-o選項的有效參數。shopt內置的shopt接受的Shell選項名稱。信號信號名稱。如果作業控制處于活動狀態,則停止已停止作業的名稱。用戶用戶名。也可以指定為-u。變量所有shell變量的名稱。也可以指定為-v。-C命令命令在子shell環境中執行,其輸出用作可能的完成。-F功能shell函數函數在當前shell環境中執行。完成后,可以從COM的值中檢索可能的完成PREPLY數組變量。-G globpat擴展路徑名擴展模式globpat以生成可能的完成。-P前綴在應用所有其他選項后,在每個可能的完成開始時添加前綴。-S后綴在應用所有其他選項后,后綴將附加到每個可能的完成。-W wordlist使用IFS特殊變量中的字符作為分隔符將單詞列表拆分,并擴展每個結果單詞。可能的完成是結果列表中與完成的單詞匹配的成員。-X filterpatfilterpat是用于路徑名擴展的模式。它應用于前面的選項和參數生成的可能完成列表,以及從列表中刪除每個完成匹配filterpat。領先!在filterpat中否定了模式; 在這種情況下,任何完成都不匹配filterpat已移除。返回值為true,除非提供了無效選項,提供了除-p或-r之外的選項而沒有使用name參數,嘗試刪除com-對于沒有規范的名稱的pletion規范,或添加完成規范時發生錯誤。compopt [-o選項] [-DE] [+ o選項] [名稱]根據選項修改每個名稱的完成選項,如果沒有提供名稱,則修改當前執行的完成選項。如果沒有給出選項,則顯示每個名稱或當前完成的完成選項。option的可能值是對上述完整內置函數有效的值。-D選項表示剩余的選項應該適用于``default''命令完成; 也就是說,在沒有完成任務的命令上嘗試完成已定義。-E選項表示其余選項應適用于“空”命令完成; 也就是說,在空白行上嘗試完成。除非提供了無效選項,否則返回值為true,嘗試修改不存在完成規范的名稱的選項,或者發生輸出錯誤。繼續[n]繼續封閉for,while,until或select循環的下一次迭代。如果指定了n,則在第n個封閉循環處繼續。n必須≥1。如果n更大比封閉循環的數量,最后一個封閉循環(“頂級”循環)恢復。當在循環內執行continue時,返回值為非n小于0時為零; 否則,繼續返回0值。當在循環外執行continue時,返回值為0。聲明[-aAfFgilrtux] [-p] [name [= value] ...]typeset [-aAfFgilrtux] [-p] [name [= value] ...]聲明變量和/或賦予它們屬性。如果沒有給出名稱,則顯示變量的值。-p選項將顯示的屬性和值每個名字。當-p與名稱參數一起使用時,將忽略其他選項。當提供-p而沒有名稱參數時,它將顯示屬性和值具有由附加選項指定的屬性的所有變量。如果-p沒有提供其他選項,declare將顯示屬性和值所有shell變量。-f選項將顯示限制為shell函數。-F選項禁止顯示函數定義; 只有功能打印名稱和屬性。如果使用shopt啟用了extdebug shell選項,則會顯示定義函數的源文件名和行號同樣。-F選項表示-f。-g選項強制在全局范圍內創建或修改變量,即使在shell函數中執行declare也是如此。在所有其他情況下都會被忽略。以下選項可用于將輸出限制為具有指定屬性的變量或提供變量屬性:-a每個名稱都是一個索引數組變量(參見上面的數組)。-A每個名稱都是一個關聯數組變量(參見上面的數組)。-f僅使用函數名稱。-i將變量視為整數; 當為變量賦值時,執行算術評估(參見上面的算術評估)。-l為變量賦值時,所有大寫字符都將轉換為小寫。大寫屬性已禁用。-r只讀名稱。然后,這些名稱不能通過后續賦值語句指定值或取消設置。-t為每個名稱指定trace屬性。跟蹤函數從調用shell繼承DEBUG和RETURN陷阱。trace屬性沒有特殊含義變量。-u為變量賦值時,所有小寫字符都將轉換為大寫。小寫屬性已禁用。-x標記要通過環境導出到后續命令的名稱。使用“+”而不是“ - ”會關閉屬性,但+ a可能不會用于銷毀數組變量,而+ r不會刪除只讀屬性屬性。在函數中使用時,除了提供-g選項外,將每個名稱設置為local,與local命令一樣,如果變量名后跟= value,則變量的值設置為value。除非遇到無效選項,否則返回值為0,嘗試使用``-f foo = bar''定義函數,嘗試將值賦給readonly變量,嘗試在不使用復合賦值語法的情況下為數組變量賦值(請參閱上面的數組),其中一個名稱不是有效的shell變量名,試圖關閉readonly變量的readonly狀態,嘗試轉向關閉數組變量的數組狀態,或嘗試使用-f顯示不存在的函數。dirs [+ n] [-n] [-clpv]如果沒有選項,則顯示當前記住的目錄列表。默認顯示位于一行,目錄名稱以空格分隔。目錄使用pushd命令添加到列表中; popd命令從列表中刪除條目。+ n顯示從沒有選項調用時dirs顯示的列表左側開始計數的第n個條目,從零開始。-n顯示從沒有選項調用時dirs顯示的列表右側開始計數的第n個條目,從零開始。-c通過刪除所有條目來清除目錄堆棧。-l生成更長的列表; 默認列表格式使用代字號表示主目錄。-p打印目錄堆棧,每行一個條目。-v打印目錄堆棧,每行一個條目,在每個條目前面添加其索引在堆棧中。除非提供了無效選項或超出目錄堆棧末尾的n個索引,否則返回值為0。disown [-ar] [-h] [jobspec ...]如果沒有選項,則會從活動作業表中刪除每個jobspec。如果jobspec不存在,并且既不提供-a也不提供-r,那么shell的概念是租用工作被使用。如果給出-h選項,則不會從表中刪除每個jobspec,但會對其進行標記,以便在shell收到時不會將SIGHUP發送到作業SIGHUP。如果不存在jobspec,并且既未提供-a選項也未提供-r選項,則使用當前作業。如果未提供jobspec,則-a選項表示刪除或標記所有工作; 沒有jobspec參數的-r選項將操作限制為正在運行的作業。除非jobspec未指定有效作業,否則返回值為0。echo [-neE] [arg ...]輸出args,用空格分隔,后跟換行符。返回狀態始終為0.如果指定了-n,則抑制尾隨換行符。如果是-e選項給出了以下反斜杠轉義字符的解釋。-E選項禁用這些轉義字符的解釋,即使在sys-tems默認解釋它們。xpg_echo shell選項可用于動態確定echo是否擴展這些轉義字符默認。echo不解釋 - 意味著選項的結束。echo解釋以下轉義序列:警報(鈴聲)\ b退格\ c抑制進一步的輸出。\ E\ E逃脫角色\ f表格飼料\ n新行\ r \ n回車\ t水平標簽\ v垂直標簽\\反斜杠\ nnnnn八位字符,其值為八進制值nnn(零到三個八進制數字)\ xHH八位字符,其值為十六進制值HH(一個或兩個十六進制數字)\ uHHHH Unicode(ISO / IEC 10646)字符,其值為十六進制值HHHH(一到四個十六進制數字)\ UHHHHHHHHUnicode(ISO / IEC 10646)字符,其值為十六進制值HHHHHHHH(一到八個十六進制數字)啟用[-a] [-dnps] [-f filename] [name ...]啟用和禁用內置shell命令。禁用內置允許執行與內置shell同名的磁盤命令,而無需指定完整路徑名,即使shell通常在磁盤命令之前搜索內置命令。如果使用-n,則禁用每個名稱; 否則,名稱已啟用。對于例如,要使用通過PATH而不是shell內置版本找到的測試二進制文件,運行``enable -n test''。-f選項表示加載新的內置命令在支持動態加載的系統上,來自共享對象文件名的名稱。-d選項將刪除先前使用-f加載的內置函數。如果沒有名稱參數給定,或者如果提供-p選項,則打印shell builtins列表。如果沒有其他選項參數,則列表包含所有已啟用的shell內置函數。如果-n提供,只打印禁用的內置。如果提供了-a,則打印的列表包括所有內置函數,并指示是否已啟用每個內置函數。如果提供-s,輸出僅限于POSIX特殊內置。除非名稱不是內置shell或加載新的錯誤,否則返回值為0內置于共享對象。評估[arg ...]args被讀取并連接成一個命令。然后shell讀取并執行此命令,并將其退出狀態作為值返回評價 如果沒有args或只有null參數,則eval返回0。exec [-cl] [-a name] [command [arguments]]如果指定了command,則替換shell。沒有創建新進程。參數成為命令的參數。如果提供了-l選項,則為shell在傳遞給命令的第0個參數的開頭放置一個破折號。這是login(1)的作用。-c選項導致命令以空的環境執行ronment。如果提供了-a,則shell將name作為第0個參數傳遞給執行的命令。如果由于某種原因無法執行命令,則為非交互式shell退出,除非啟用了shell選項execfail,在這種情況下它會返回失敗。如果無法執行文件,則交互式shell將返回失敗。如果如果未指定command,則任何重定向在當前shell中生效,返回狀態為0.如果存在重定向錯誤,則返回狀態為1。退出[n]導致shell退出狀態為n。如果省略n,則退出狀態是最后執行的命令的狀態。在shell之前執行EXIT上的陷阱納茨。export [-fn] [name [= word]] ...export -p提供的名稱標記為自動導出到后續執行的命令的環境。如果給出-f選項,則名稱引用函數。如果沒有給出名稱,或者如果提供了-p選項,則會打印在此shell中導出的所有名稱的列表。-n選項導致export屬性從每個名字中刪除。如果變量名后跟= word,則變量的值設置為word。export返回退出狀態為0,除非無效遇到選項,其中一個名稱不是有效的shell變量名稱,或者-f提供的名稱不是函數。fc [-e ename] [-lnr] [first] [last]fc -s [pat = rep] [cmd]修復命令。在第一種形式中,從歷史列表中選擇從頭到尾的一系列命令。可以將first和last指定為字符串(以找到以該字符串開頭的最后一個命令)或作為數字(歷史列表的索引,其中負數用作當前命令編號的偏移量)。如果未指定last,則將其設置為當前用于列出的命令(以便``fc -l -10''打印最后10個命令),否則設置為first。如果不是指定將其設置為上一個用于編輯的命令,將-16設置為列表。-n選項在列出時禁止命令編號。-r選項反轉命令的順序。如果給出-l選項,則列出命令標準輸出。否則,將在包含這些命令的文件上調用ename給出的編輯器。如果未給出ename,則FCEDIT變量的值為如果未設置FCEDIT,則使用EDITOR的值。如果兩個變量都未設置,則使用vi。編輯完成后,將回顯并執行編輯的命令。在第二種形式中,在每個pat實例被rep替換之后重新執行命令。與此一起使用的一個有用的別名是``r =“fc -s”'',因此鍵入``r cc''運行以“cc”開頭的最后一個命令,輸入“r”重新執行最后一個命令。如果使用第一個表單,則返回值為0,除非遇到無效選項或第一個或最后一個指定歷史記錄行超出范圍。如果-e選項是支持plied,返回值是執行的最后一個命令的值,如果命令的臨時文件發生錯誤,則返回失敗。如果使用第二種形式,則返回狀態是重新執行的命令的狀態,除非cmd未指定有效的歷史記錄行,在這種情況下fc將返回失敗。fg [jobspec]在前臺恢復jobspec,并使其成為當前作業。如果jobspec不存在,則使用shell的當前作業概念。返回值是命令置于前臺,如果在禁用作業控制時運行,或者在啟用作業控制的情況下運行,如果jobspec未指定有效作業或jobspec指定在沒有作業控制的情況下啟動的作業。getopts optstring name [args]shell過程使用getopts來解析位置參數。optstring包含要識別的選項字符; 如果一個字符后跟一個冒號,該選項應該有一個參數,該參數應該用空格分隔。冒號和問號字符不得用作選項字符 - TER值。每次調用它時,getopts都會將下一個選項放在shell變量名中,如果名稱不存在則初始化名稱,以及下一個參數的索引被處理成變量OPTIND。每次調用shell或shell腳本時,OPTIND都會初始化為1。當一個選項需要一個參數時,getopts將該參數放入變量OPTARG中。shell不會自動重置OPTIND; 它必須在多次調用getopts之間手動重置如果要使用一組新參數,則調用相同的shell。遇到選項結束時,getopts將以大于零的返回值退出。OPTIND設置為第一個非選項參數的索引,名稱為調成 ?。getopts通常會解析位置參數,但如果在args中給出了更多參數,則getopts會解析這些參數。getopts可以通過兩種方式報告錯誤。如果optstring的第一個字符是冒號,則使用靜默錯誤報告。在正常操作中,診斷消息是遇到無效選項或缺少選項參數時打印。如果變量OPTERR設置為0,則不會顯示任何錯誤消息,即使第一個也是如此optstring的字符不是冒號。如果看到無效選項,請使用getopts嗎?進入名稱,如果不是沉默,則打印錯誤消息并取消設置OPTARG。如果getopts是靜默的,那么選項字符找到放在OPTARG中,不打印任何診斷消息。如果找不到必需的參數,并且getopts不是靜默的,則會在名稱中放置一個問號(?),取消設置OPTARG,并打印一條診斷消息。如果getopts是靜默的,然后冒號(:)放在名稱中,OPTARG設置為找到的選項字符。如果找到指定或未指定的選項,則getopts返回true。如果遇到選項結尾或發生錯誤,則返回false。hash [-lr] [-p filename] [-dt] [name]每次調用哈希時,命令名稱的完整路徑名都是通過搜索$ PATH中的目錄并記住來確定的。以前記得的任何路徑 - 名稱被丟棄。如果提供了-p選項,則不執行路徑搜索,并且filename用作命令的完整文件名。-r選項導致貝殼忘了所有記住的位置。-d選項使shell忘記每個名稱的記憶位置。如果提供-t選項,則完整路徑 - 打印每個名稱對應的名稱。如果使用-t提供了多個名稱參數,則在散列完整路徑名之前打印名稱。-l選項導致輸出以可以重用為輸入的格式顯示。如果沒有給出參數,或者只提供了-l,則有關記憶命令的信息是打印。除非找不到名稱或提供了無效選項,否則返回狀態為true。幫助[-dms] [模式]顯示有關內置命令的有用信息。如果指定了pattern,help會提供有關匹配模式的所有命令的詳細幫助; 否則所有的幫助打印內置和外殼控制結構。-d顯示每個模式的簡短描述-m以類似聯機幫助頁的格式顯示每個模式的描述-s僅顯示每個模式的簡短用法概要除非沒有命令匹配模式,否則返回狀態為0。歷史[n]歷史-c歷史-d offset歷史記錄-anrw [文件名]歷史-p arg [arg ...]歷史-s arg [arg ...]如果沒有選項,則顯示帶有行號的命令歷史列表。用*列出的行已被修改。n的參數僅列出最后n行。如果shell變量HISTTIMEFORMAT已設置且不為null,它用作strftime(3)的格式字符串,以顯示與每個顯示的歷史記錄關聯的時間戳條目。在格式化的時間戳和歷史記錄行之間不打印中間空白。如果提供了filename,則將其用作歷史文件的名稱; 如果不,使用HISTFILE的值。選項(如果提供)具有以下含義:-c通過刪除所有條目來清除歷史列表。-d offset刪除位置偏移處的歷史記錄條目。-a將“新”歷史記錄行(自當前bash會話開始以來輸入的歷史記錄行)附加到歷史記錄文件。-n將尚未從歷史文件中讀取的歷史記錄行讀入當前歷史記錄列表。這些是從一開始就附加到歷史文件的行當前的bash會話。-r讀取歷史文件的內容并將其用作當前歷史記錄。-w將當前歷史記錄寫入歷史文件,覆蓋歷史文件的內容。-p對以下args執行歷史記錄替換,并在標準輸出上顯示結果。不將結果存儲在歷史列表中。每個arg必須引用以禁用正常的歷史記錄擴展。-s將args作為單個條目存儲在歷史列表中。在添加args之前,將刪除歷史列表中的最后一個命令。如果設置了HISTTIMEFORMAT變量,則將與每個歷史條目關聯的時間戳信息寫入歷史記錄文件,并標記歷史記錄字符。讀取歷史文件時,以歷史注釋字符開頭,后面緊跟數字的行將被解釋為時間戳以前的歷史記錄。除非遇到無效選項,否則返回值為0,讀取或寫入歷史文件時發生錯誤,無效偏移量為作為-d的參數提供,或者作為-p參數提供的歷史擴展失敗。工作[-lnprs] [jobspec ...]jobs -x命令[args ...]第一個表單列出了活動作業。選項具有以下含義:-l除正常信息外,還列出進程ID。-n僅顯示自上次向用戶通知其狀態以來狀態已更改的作業的信息。-p僅列出作業進程組組長的進程ID。-r將輸出限制為正在運行的作業。-s將輸出限制為已停止的作業。如果給出了jobspec,則輸出僅限于有關該作業的信息。返回狀態為0,除非遇到無效選項或無效的jobspec支持合股。如果提供了-x選項,則作業將替換在命令或args中找到的任何jobspec以及相應的進程組ID,并執行命令傳遞args,返回 - 退出狀態。殺[-s sigspec | -n signum | -sigspec] [pid | jobspec] ...kill -l [sigspec | EXIT_STATUS]將由sigspec或signum命名的信號發送到由pid或jobspec命名的進程。sigspec是一個不區分大小寫的信號名稱,如SIGKILL(有或沒有SIG前綴)或信號編號; signum是一個信號編號。如果sigspec不存在,則假定為SIGTERM。-l的參數列出了信號名稱。如果有的話給出-l時提供參數,列出與參數對應的信號的名稱,返回狀態為0. exit_status參數為-l是指定由信號終止的進程的信號編號或退出狀態的編號。如果至少有一個信號成功,則kill返回true發送錯誤,如果發生錯誤或遇到無效選項,則返回false。讓arg [arg ...]每個arg都是要評估的算術表達式(參見上面的算術評估)。如果最后一個arg的計算結果為0,則返回1; 否則返回0。local [option] [name [= value] ...]對于每個參數,將創建名為name的局部變量,并為其指定值。該選項可以是聲明接受的任何選項。在本地使用本地時函數,它使變量名具有僅限于該函數及其子函數的可見范圍。沒有操作數,本地寫入局部變量列表到標準輸出。不在函數內時使用local是錯誤的。除非在函數外部使用local,否則返回狀態為0,無效名稱為提供,或名稱是只讀變量。logout退出登錄shell。mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]讀取標準輸入到索引數組變量數組的行,或者如果提供了-u選項,則從文件描述符fd讀取行。變量MAPFILE是默認值陣列。選項(如果提供)具有以下含義:-n復制大多數計數行。如果count為0,則復制所有行。-O開始分配索引源處的數組。默認索引為0。-s丟棄讀取的第一個計數行。-t從每行讀取中刪除尾部換行符。-u從文件描述符fd而不是標準輸入中讀取行。-C每次讀取量子線時評估回調。-c選項指定量子。-c指定每次調用回調之間讀取的行數。如果在沒有-c的情況下指定-C,則默認量程為5000.當評估回調時,將為其提供要分配的下一個數組元素的索引和行要作為附加參數分配給該元素。在讀取行但在分配數組元素之前評估回調。如果未提供顯式原點,則mapfile將在分配之前清除數組。除非提供了無效的選項或選項參數,數組無效或不可分配,或者數組不是索引數組,否則mapfile會成功返回。popd [-n] [+ n] [-n]從目錄堆棧中刪除條目。如果沒有參數,則從堆棧中刪除頂級目錄,然后執行cd到新的頂級目錄。爭論,如果支持合作,具有以下含義:-n當從堆棧中刪除目錄時,禁止正常更改目錄,以便僅操作堆棧。+ n刪除dirs顯示的列表左側的第n個條目,從零開始。例如:``popd +0''刪除第一個目錄,``popd +1''第二。-n從d開頭的列表右側刪除第n個條目,從零開始。例如:``popd -0''刪除最后一個目錄,``popd -1''倒數第二個。如果popd命令成功,也會執行dirs,返回狀態為0.如果遇到無效選項,popd返回false,該目錄stack為空,指定了不存在的目錄堆棧條目,或者目錄更改失敗。printf [-v var] format [arguments]在格式的控制下將格式化的參數寫入標準輸出。-v選項導致將輸出分配給變量var而不是被打印到標準輸出。格式是一個字符串,它包含三種類型的對象:普通字符,簡單地復制到標準輸出,字符轉義序列,其中轉換并復制到標準輸出和格式規范,每個規范都會導致打印下一個連續的參數。除了標準printf(1)格式規范,printf解釋以下擴展:%b導致printf在相應的參數中擴展反斜杠轉義序列(除了\ c終止輸出,\',\“和\?中的反斜杠不是已刪除,以\ 0開頭的八進制轉義符最多可包含四位數字。%q使printf以可以重用為shell輸入的格式輸出相應的參數。%(datefmt)筆導致printf輸出使用datefmt作為strftime(3)的格式字符串得到的日期時間字符串。相應的參數是一個整數表示發送自紀元以來的秒數。可以使用兩個特殊參數值:-1表示當前時間,-2表示shell的時間被調用。非字符串格式說明符的參數被視為C常量,但允許使用前導加號或減號,并且如果前導字符是單個或雙引號,該值是以下字符的ASCII值。必要時重用該格式以使用所有參數。如果格式需要的參數多于提供的參數,則額外的格式規范表現為如果提供了適當的零值或空字符串。成功時返回值為零,失敗時返回值為非零。pushd [-n] [+ n] [-n]pushd [-n] [dir]將目錄添加到目錄堆棧的頂部,或者旋轉堆棧,使堆棧的新頂部成為當前工作目錄。沒有爭論,交流除非目錄堆棧為空,否則前兩個目錄并返回0。參數(如果提供)具有以下含義:-n在向堆棧添加目錄時禁止正常更改目錄,以便僅操作堆棧。+ n旋轉堆棧,使第n個目錄(從dirs顯示的列表左側開始,從零開始)位于頂部。-n旋轉堆棧,使第n個目錄(從dirs顯示的列表右側開始,從零開始)位于頂部。dir將dir添加到頂部的目錄堆棧,使其成為新的當前工作目錄。如果pushd命令成功,則也執行dirs。如果使用第一個表單,則pushd返回0,除非cd to dir失敗。用第二種形式,推除非目錄堆棧為空,指定了不存在的目錄堆棧元素,或者目錄更改為指定的新當前目錄,否則返回0失敗。pwd [-LP]打印當前工作目錄的絕對路徑名。如果提供了-P選項或-o physical選項,則打印的路徑名不包含符號鏈接啟用set builtin命令。如果使用-L選項,則打印的路徑名可能包含符號鏈接。除非發生錯誤,否則返回狀態為0讀取當前目錄的名稱或提供無效選項。讀[-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ... ]從標準輸入讀取一行,或從作為-u選項的參數提供的文件描述符fd讀取,并將第一個單詞分配給第一個名稱,第二個單詞到第二個名字,依此類推,剩下的單詞和他們介入的分隔符分配給姓氏。如果從中讀取的單詞較少輸入流比名稱,其余名稱分配空值。IFS中的字符用于將行拆分為單詞。反斜杠字符(\)可以用于刪除下一個字符讀取和行繼續的任何特殊含義。選項(如果提供)具有以下含義:- 一個人這些單詞被分配給數組變量aname的順序索引,從0開始。在分配任何新值之前,未設置aname。其他名稱 - 這些被忽略了。-d delimdelim的第一個字符用于終止輸入行,而不是換行符。-e如果標準輸入來自終端,則使用readline(參見上面的READLINE)獲取該行。Readline使用當前(或默認,如果行編輯 - 以前沒有激活ing)編輯設置。-i文字如果使用readline讀取行,則在編輯開始之前將文本放入編輯緩沖區。-n nchars讀取nchars字符后讀取返回,而不是等待完整的輸入行,但如果讀取的字符數少于nchars則遵循分隔符在分隔符之前。-N nchars讀取正好nchars字符后讀取返回,而不是等待完整的輸入行,除非遇到EOF或讀取超時。分隔符輸入中遇到的字符不會被特殊處理,并且在讀取nchars字符之前不會導致讀取。-p提示在嘗試讀取任何輸入之前,在沒有尾隨換行符的情況下顯示標準錯誤提示。僅當輸入來自ter-時,才會顯示提示單寶元。-r反斜杠不作為轉義字符。反斜杠被認為是該行的一部分。特別是,反斜杠 - 換行符對可能不會被用作一條線延續。-s靜音模式。如果輸入來自終端,則不回顯字符。-t超時如果在超時秒內未讀取完整的輸入行,則會導致讀取超時并返回失敗。超時可以是帶小數的十進制數小數點后面的部分。此選項僅在讀取來自終端,管道或其他特殊文件的輸入時有效; 它沒有效果從常規文件中讀取。如果timeout為0,如果輸入在指定的文件描述符上可用,則read返回成功,否則失敗。退出狀態如果超過超時,則大于128。-u fd從文件描述符fd讀取輸入。如果未提供名稱,則將讀取的行分配給變量REPLY。返回碼為零,除非遇到文件結尾,讀取超時(在這種情況下)返回碼大于128),或者提供無效的文件描述符作為-u的參數。readonly [-aAf] [-p] [name [= word] ...]給定的名稱標記為只讀; 后續分配不得更改這些名稱的值。如果提供了-f選項,則對應的函數這些名字是如此明顯。-a選項將變量限制為索引數組; -A選項將變量限制為關聯數組。如果兩個選項都是提供,-A優先。如果未給出名稱參數,或者提供了-p選項,則會打印所有只讀名稱的列表。其他選項可能是用于將輸出限制為只讀名稱集的子集。-p選項使輸出以可以重用為輸入的格式顯示。如果變量能夠名稱后跟= word,變量的值設置為word。除非遇到無效選項,其中一個名稱不是a,否則返回狀態為0有效的shell變量名稱,或者-f提供的名稱不是函數。返回[n]使函數以n指定的返回值退出。如果省略n,則返回狀態是在函數體中執行的最后一個命令的狀態。如果使用在函數外部,但在執行腳本期間。(source)命令,它導致shell停止執行該腳本并返回n或退出sta腳本中執行的最后一個命令的tus作為腳本的退出狀態。如果在函數外部使用而不是在執行腳本期間使用。,則返回狀態為假。在函數或腳本之后執行恢復之前,將執行與RETURN陷阱關聯的任何命令。設置[--abefhkmnptuvxBCEHPT] [-o選項名稱] [arg ...]設置[+ abefhkmnptuvxBCEHPT] [+ o選項名稱] [arg ...]如果沒有選項,每個shell變量的名稱和值將以一種格式顯示,該格式可以重復用作設置或重置當前設置變量的輸入。只讀變量無法重置。在posix模式下,僅列出shell變量。輸出根據當前區域設置進行排序。當選項是特定的他們設置或取消設置shell屬性。選項處理后剩余的任何參數都被視為位置參數的值,并在中進行分配訂單,$ 1,$ 2,... $ n。選項(如果指定)具有以下含義:-a自動標記為了導出到后續命令的環境而修改或創建的變量和函數。-b立即報告已終止后臺作業的狀態,而不是在下一個主要提示之前報告。僅在啟用作業控制時才有效。-e如果管道(可能包含一個簡單命令),括在括號中的子shell命令或其中一個執行的命令,則立即退出由大括號括起的命令列表的一部分(參見上面的SHELL GRAMMAR)以非零狀態退出。如果失敗的命令是shell的一部分,則shell不會退出緊跟一段時間或直到關鍵字的命令列表,在if或elif保留字后面的測試的一部分,在&&中執行的任何命令的一部分或|| 列表除了最后的&&或||之后的命令,管道中的任何命令但是最后一個命令,或者命令的返回值是否與!相反。ERR上的陷阱(如果已設置)將在shell退出之前執行。此選項分別適用于shell環境和每個子shell環境(請參閱COMMAND上面的執行環境),并且可能導致子shell在執行子shell中的所有命令之前退出。-f禁用路徑名擴展。-h在查找執行命令時記住命令的位置。默認情況下啟用此功能。-k賦值語句形式的所有參數都放在命令的環境中,而不僅僅是命令名稱之前的那些參數。-m監控模式。作業控制已啟用。默認情況下,對于支持它的系統上的交互式shell,此選項處于啟用狀態(請參閱上面的JOB CONTROL)。背景進程在單獨的進程組中運行,并且在完成時打印包含其退出狀態的行。-n讀取命令但不執行它們。這可用于檢查shell腳本是否存在語法錯誤。交互式shell會忽略它。-o選項名稱選項名稱可以是以下之一:allexport與-a相同。braceexpand與-B相同。emacs使用emacs樣式的命令行編輯界面。默認情況下,當shell是交互式時啟用,除非shell是以shell啟動的--noediting選項。這也會影響用于讀取-e的編輯界面。errexit與-e相同。errtrace與-E相同。functrace與-T相同。hashall與-h相同。histexpand與-H相同。history啟用命令歷史記錄,如上面HISTORY中所述。默認情況下,此選項在交互式shell中處于啟用狀了ignoreeof效果就好像執行了shell命令``IGNOREEOF = 10''(參見上面的Shell變量)。keyword與-k相同。監視器與-m相同。noclobber選項與-C相同。noexec與-n相同。noglob與-f相同。nolog目前被忽略了。通知與-b相同。nounset與-u相同。onecmd與-t相同。物理與-P相同。pipefail如果設置,則管道的返回值是以非零狀態退出的最后(最右邊)命令的值,如果是,則為零。管道退出成功。默認情況下禁用此選項。posix更改bash的行為,其中默認操作與POSIX標準不同,以匹配標準(posix模式)。特權與-p相同。verbose與-v相同。vi使用vi樣式的命令行編輯界面。這也會影響用于讀取-e的編輯界面。xtrace與-x相同。如果-o未提供選項名稱,則打印當前選項的值。如果+ o沒有選項名稱,則提供一系列set命令重新創建當前選項設置顯示在標準輸出上。-p啟用特權模式。在這種模式下,$ ENV和$ BASH_ENV文件不會被處理,shell函數不會從環境中繼承,而且SHEL-LOPTS,BASHOPTS,CDPATH和GLOBIGNORE變量(如果它們出現在環境中)將被忽略。如果shell以有效用戶(組)ID啟動不等于真實用戶(組)ID,并且未提供-p選項,將采取這些操作并將有效用戶ID設置為實際用戶ID。如果啟動時提供-p選項,不重置有效用戶ID。關閉此選項會導致有效的用戶和組ID設置為真實用戶和組ID。-t讀取并執行一個命令后退出。-u在執行參數擴展時,將特殊參數“@”和“*”以外的未設置變量和參數視為錯誤。如果嘗試擴展在未設置的變量或參數上,shell會輸出錯誤消息,如果不是交互式,則會以非零狀態退出。-v在讀取時打印shell輸入行。-x擴展每個簡單命令后,對于command,case命令,select命令或arithmetic for command,顯示PS4的擴展值,然后是命令及其擴展參數或關聯的單詞列表。-B shell執行大括號擴展(參見上面的Brace Expansion)。默認情況下啟用此選項。-C如果設置,bash不會使用>,>&和<>重定向運算符覆蓋現有文件。使用時創建輸出文件時可能會覆蓋此項重定向運算符> | 而不是>。-E如果設置,則ERR上的任何陷阱都由shell函數,命令替換和子shell環境中執行的命令繼承。ERR陷阱通常不是在這種情況下繼承。-H啟用!風格歷史替代。當shell是交互式時,默認情況下此選項處于啟用狀態。-P如果設置,則在執行更改當前工作目錄的cd等命令時,shell不會遵循符號鏈接。它使用物理目錄結構而不是。默認情況下,bash在執行更改當前目錄的命令時遵循目錄的邏輯鏈。-T如果設置,則DEBUG和RETURN上的任何陷阱都由shell函數,命令替換和子shell環境中執行的命令繼承。DEBUG和在這種情況下,RETURN陷阱通常不會被繼承。- 如果此選項后面沒有參數,則取消設置位置參數。否則,位置參數設置為args,即使它們中的一些也是如此以 - 開頭。- 發出選項結束信號,將所有剩余的參數分配給位置參數。-x和-v選項已關閉。如果沒有args,位置參數保持不變。除非另有說明,否則默認情況下關閉選項。使用+而不是 - 會導致關閉這些選項。選項也可以指定為參數一個shell的調用。當前的選項集可以在$ - 中找到。除非遇到無效選項,否則返回狀態始終為true。轉移[n]來自n + 1 ...的位置參數被重命名為$ 1 ....由數字$#向下表示為$# - n + 1的參數未設置。n必須是非負數大于或等于$#。如果n為0,則不更改參數。如果沒有給出n,則假定為1.如果n大于$#,則位置參數不是改變。如果n大于$#或小于零,則返回狀態大于零; 否則為0。shopt [-pqsu] [-o] [optname ...]切換控制可選shell行為的變量值。如果沒有選項,或者使用-p選項,則會顯示所有可設置選項的列表,其中包含一個是否各自設定的陽離子。-p選項使輸出以可以重用為輸入的形式顯示。其他選項具有以下含義:-s啟用(設置)每個optname。-u禁用(取消設置)每個optname。-q禁止正常輸出(安靜模式); 返回狀態指示是設置還是取消設置optname。如果使用-q給出多個optname參數,則如果啟用了所有optnames,則返回狀態為零; 否則為非零。-o將optname的值限制為為set builtin的-o選項定義的值。如果使用-s或-u且沒有optname參數,則顯示僅限于分別設置或取消設置的選項。除非另有說明,否則該shopt默認情況下禁用(取消設置)選項。如果啟用了所有optnames,則列出選項時的返回狀態為零,否則為非零。設置或取消設置選項時,返回狀態為零,除非optname不是有效的shell選項。購物選項列表是:autocd如果設置,則執行作為目錄名稱的命令名稱,就好像它是cd命令的參數一樣。此選項僅供交互式使用炮彈。cdable_vars如果設置,則假定cd builtin命令不是目錄的參數是變量的名稱,其值是要更改的目錄。cdspell如果設置,將更正cd命令中目錄組件拼寫中的次要錯誤。檢查的錯誤是轉置字符,缺少角色,一個角色太多了。如果找到更正,則打印更正的文件名,然后命令繼續。此選項僅用于互動殼。checkhash如果設置,bash會在嘗試執行之前檢查哈希表中找到的命令是否存在。如果散列命令不再存在,則進行正常路徑搜索執行。checkjobs如果設置,bash將在退出交互式shell之前列出任何已停止和正在運行的作業的狀態。如果任何作業正在運行,則會導致退出在沒有干預命令的情況下推遲到第二次退出(參見上面的JOB CONTROL)。如果任何作業停止,shell總是推遲退出。checkwinsize如果設置,bash會在每個命令后檢查窗口大小,并在必要時更新LINES和COLUMNS的值。cmdhist如果設置,bash會嘗試在同一歷史記錄條目中保存多行命令的所有行。這樣可以輕松地重新編輯多行命令。compat31如果設置,bash將其行為更改為版本3.1的行為,相對于[[條件命令的=?運算符]的引用參數。compat32如果設置,當使用[[條件命令的<和>]時,bash將其行為更改為版本3.2的行為與特定于語言環境的字符串比較運營商。bash-4.1之前的Bash版本使用ASCII排序規則和strcmp(3); bash-4.1及更高版本使用當前語言環境的歸類序列和strcoll(3)。compat40如果設置,當使用[[條件命令的<和>]時,bash將關于特定于語言環境的字符串比較的行為更改為版本4.0的行為運算符(請參閱上一項)以及中斷命令列表的效果。compat41如果設置,bash,在posix模式下,將雙引號參數擴展中的單引號視為特殊字符。單引號必須匹配(偶數數字)和單引號之間的字符被認為是引用的。這是posix模式到4.1版的行為。默認的bash行為仍然像以前的版本一樣。direxpand如果設置,bash在執行文件名完成時將目錄名稱替換為單詞擴展的結果。這改變了readline編輯的內容 - 緩沖區。如果未設置,bash會嘗試保留用戶鍵入的內容。dirspell如果設置,如果最初提供的目錄名不存在,bash會在字完成期間嘗試對目錄名進行拼寫更正。dotglob如果設置,bash包含以“。”開頭的文件名。在路徑名擴展的結果中。execfail如果設置,如果非交互式shell無法執行指定為exec builtin命令的參數的文件,則不會退出。一個交互式shell如果exec失敗則不退出。expand_aliases如果設置,則如上所述在ALIASES下擴展別名。對于交互式shell,默認情況下啟用此選項。extdebug如果設置,則啟用供調試程序使用的行為:1. declare builtin的-F選項顯示與作為參數提供的每個函數名對應的源文件名和行號。2.如果DEBUG陷阱運行的命令返回非零值,則跳過下一個命令而不執行。3.如果DEBUG陷阱運行的命令返回值2,并且shell正在子例程中執行(shell函數或shell腳本由這個。或源內置),模擬返回調用。4. BASH_ARGC和BASH_ARGV按照上面的描述進行更新。5.啟用了函數跟蹤:命令替換,shell函數和使用(命令)調用的子shell繼承DEBUG和RETURN陷阱。6.啟用了錯誤跟蹤:命令替換,shell函數和使用(命令)調用的子shell繼承ERR陷阱。extglob如果設置,則啟用上面描述的路徑名擴展下的擴展模式匹配功能。extquote如果設置,則$'string'和$“string”引用在雙引號括起來的$ {parameter}擴展中執行。默認情況下啟用此選項。failglob如果設置,則在路徑名擴展期間無法匹配文件名的模式會導致擴展錯誤。force_fignore如果設置,由FIGNORE shell變量指定的后綴會導致在執行單詞完成時忽略單詞,即使忽略的單詞是唯一的可能的完成。有關FIGNORE的說明,請參見上面的SHELL VARIABLES。默認情況下啟用此選項。globstar如果設置,則路徑名擴展上下文中使用的模式**將匹配所有文件以及零個或多個目錄和子目錄。如果遵循模式通過/,只有目錄和子目錄匹配。gnu_errfmt如果設置,則shell錯誤消息以標準GNU錯誤消息格式寫入。histappend如果設置,則當shell退出時,歷史列表將附加到由HISTFILE變量的值指定的文件中,而不是覆蓋文件。histreedit如果設置,并且正在使用readline,則用戶有機會重新編輯失敗的歷史記錄替換。histverify如果設置,并且正在使用readline,則歷史替換的結果不會立即傳遞給shell解析器。而是加載生成的行進入readline編輯緩沖區,允許進一步修改。hostcomplete如果設置,并且正在使用readline,當包含@的單詞正在完成時,bash將嘗試執行主機名完成(請參閱READ-下的完成上面的LINE)。默認情況下啟用此功能。huponexit如果設置,當交互式登錄shell退出時,bash將向所有作業發送SIGHUP。interactive_comments如果設置,則允許以#開頭的單詞使該單詞和該行上的所有剩余字符在交互式shell中被忽略(請參閱上面的注釋)。默認情況下啟用此選項。lastpipe如果設置,并且作業控制未激活,則shell將運行當前shell環境中未在后臺執行的管道的最后一個命令。lithist如果設置,并且啟用了cmdhist選項,則多行命令將保存到具有嵌入換行符的歷史記錄中,而不是使用分號分隔符可能。login_shell如果它作為登錄shell啟動,shell將設置此選項(請參閱上面的INVOCATION)。該值可能不會更改。mailwarn如果設置,并且自上次檢查以來已經訪問了bash正在檢查郵件的文件,則“已讀取郵件文件中的郵件”是顯示。no_empty_cmd_completion如果設置,并且正在使用readline,則當嘗試在空行上完成時,bash將不會嘗試搜索PATH以尋找可能的完成。nocaseglob如果設置,則bash在執行路徑名擴展時以不區分大小寫的方式匹配文件名(請參閱上面的路徑名擴展)。nocasematch如果設置,bash在執行大小寫或[[條件命令]時執行匹配時以不區分大小寫的方式匹配模式。了nullglob如果設置,bash允許不匹配任何文件的模式(參見上面的Pathname Expansion)擴展為空字符串,而不是自己。progcomp如果置位,則啟用可編程完成功能(參見上面的可編程完成)。默認情況下啟用此選項。promptvars如果設置,則提升字符串在按照PROMPT-中所述進行擴展后進行參數擴展,命令替換,算術擴展和引用刪除ING以上。默認情況下啟用此選項。restricted_shell如果以限制模式啟動,shell將設置此選項(請參閱下面的RESTRICTED SHELL)。該值可能不會更改。啟動時不會重置執行文件,允許啟動文件發現shell是否受限制。shift_verbose如果設置,當移位計數超過位置參數的數量時,移位內置打印錯誤消息。源路徑如果設置,源(。)builtin使用PATH的值來查找包含作為參數提供的文件的目錄。默認情況下啟用此選項。xpg_echo如果設置,echo builtin默認會擴展反斜杠轉義序列。暫停[-f]掛起此shell的執行,直到收到SIGCONT信號。當掛起的shell是后臺進程時,可以通過fg命令重新啟動它。對于更多信息,請閱讀JOB CONTROL部分。suspend命令無法掛起登錄shell。但是,如果指定了-f選項,則suspend命令可以掛起甚至登錄shell。除非shell是登錄shell且未提供-f,或者未啟用作業控制,否則返回狀態為0。測試expr[expr]根據條件表達式expr的計算,返回0或1的狀態。每個運算符和操作數必須是單獨的參數。表達式是在有條件的表達下提出的上述初選。test不接受任何選項,也不接受和忽略 - 作為表示的參數選項的結束。表達式可以使用以下運算符組合,按優先級的降序列出。評估取決于參數的數量; 見下文。當有五個或更多參數時,使用運算符優先級。!expr如果expr為false則為True。(expr)返回expr的值。這可以用于覆蓋運算符的正常優先級。expr1 -a expr2如果expr1和expr2都為真,則為真。expr1 -o expr2如果expr1或expr2為真,則為真。測試和[根據參數的數量使用一組規則來評估條件表達式。0個參數表達式是假的。1個論點當且僅當參數不為null時,表達式才為真。2個論點如果第一個參數是!,當且僅當第二個參數為null時,表達式才為真。如果第一個參數是一元條件運算符之一在上面列出的條件表達式下,如果一元測試為真,則表達式為真。如果第一個參數不是有效的一元條件運算符,表達式是假的。3個論點以列出的順序應用以下條件。如果第二個參數是上面在CONDITIONAL下列出的二元條件運算符之一EXPRESSIONS,表達式的結果是使用第一個和第三個參數作為操作數的二進制測試的結果。-a和-o運算符是 - 當有三個參數時,ered二元運算符。如果第一個參數是!,則該值是使用第二個和第三個參數的雙參數測試的否定參數。如果第一個參數完全正確(并且第三個參數完全正確),則結果是第二個參數的單參數測試。否則,表達是錯誤的。4個論點如果第一個參數是!,則結果是否定由剩余參數組成的三參數表達式。否則,表達式是使用上面列出的規則根據優先級進行解析和評估。5個或更多參數使用上面列出的規則根據優先級解析和評估表達式。當與test或[,<和>運算符一起使用時,使用ASCII排序按字典順序排序。times打印shell的累計用戶和系統時間以及從shell運行的進程。返回狀態為0。陷阱[-lp] [[arg] sigspec ...]當shell接收sigspec信號時,將讀取并執行命令arg。如果arg不存在(并且只有一個sigspec)或 - ,則每個指定的信號都是重置為其原始處置(進入shell時的值)。如果arg是空字符串,則每個sigspec指定的信號將被忽略shell以及它調用的命令。如果arg不存在且已提供-p,則顯示與每個sigspec關聯的陷阱命令。如果沒有爭論 - 如果提供了-p,則trap將打印與每個信號關聯的命令列表。-l選項使shell打印信號列表名稱及其相應的數字。每個sigspec都是<signal.h>中定義的信號名稱或信號編號。信號名稱不區分大小寫,SIG前綴是可選的。如果sigspec是EXIT(0),則命令arg在從shell退出時執行。如果sigspec是DEBUG,則在每個簡單命令之前執行命令arg,mand,case命令,select命令,命令的每個算術,以及第一個命令在shell函數中執行之前(參見上面的SHELL GRAMMAR)。參考對于內置的shopt的extdebug選項的描述,詳細說明了它對DEBUG陷阱的影響。如果sigspec是RETURN,則每次執行命令argshell函數或用它執行的腳本。或源內置完成執行。如果sigspec是ERR,則只要簡單命令具有非零退出狀態,就會執行命令arg,具體取決于以下條件。ERR陷阱不是exe-如果失敗的命令是緊跟在while或until關鍵字之后的命令列表的一部分,則在if語句中執行部分測試,執行命令的一部分在&&或||中 列表,或者命令的返回值是否被反轉!這些是errexit選項遵循的相同條件。進入shell時忽略的信號不能被捕獲,重置或列出。未被忽略的被捕獲信號將被重置為其原始值創建一個shell或subshell環境。如果任何sigspec無效,則返回狀態為false; 否則陷阱返回true。輸入[-aftpP]名稱[名稱...]如果沒有選項,請指明在用作命令名稱時如何解釋每個名稱。如果使用-t選項,則鍵入打印字符串,該字符串是別名,關鍵字之一,如果name是別名,shell保留字,函數,內置文件或磁盤文件,則函數,內置函數或文件。如果找不到名稱,則不打印任何內容,并返回退出狀態false。如果使用-p選項,則鍵入要么返回將名稱指定為a時將執行的磁盤文件的名稱命令名,如果``type -t name''不返回文件,則沒有任何內容。-P選項強制對每個名稱進行PATH搜索,即使``type -t name''不會返回文件。如果對命令進行哈希處理,則-p和-P將打印哈希值,而不一定是PATH中首先出現的文件。如果使用-a選項,則鍵入打印所有位置包含名為name的可執行文件。當且僅當不使用-p選項時,這包括別名和函數。散列命令表不是一致的使用-a時會感到沮喪 與內置命令一樣,-f選項禁止shell函數查找。如果找到所有參數,則返回true,否則返回false找不到。ulimit [-HSTabcdefilmnpqrstuvx [limit]]在允許此類控制的系統上,控制shell可用資源及其啟動的進程。-H和-S選項指定了為給定資源設置硬限制或軟限制。一旦設置了非root用戶,就無法增加硬限制; 軟限制可以增加到值硬限制。如果既未指定-H也未指定-S,則設置軟限制和硬限制。limit的值可以是為資源指定的單位中的數字或硬,軟或無限的特殊值之一,分別代表當前硬限制,當前軟限制和無限制。如果省略限制 - 除非給出-H選項,否則將打印資源軟限制的當前值。指定多個資源時,限制名稱和單位在值之前打印。其他選項解釋如下:-a報告所有當前限制-b最大套接字緩沖區大小-c創建的核心文件的最大大小-d進程數據段的最大大小-e最大調度優先級(“nice”)-f shell及其子項寫入的文件的最大大小-i待處理信號的最大數量-l可以鎖定到內存的最大大小-m最大駐留集大小(許多系統不遵守此限制)-n打開文件描述符的最大數量(大多數系統不允許設置此值)-p 512字節塊中的管道大小(可能未設置)-q POSIX消息隊列中的最大字節數-r最大實時調度優先級-s最大堆棧大小-t以秒為單位的最大CPU時間量-u單個用戶可用的最大進程數-v shell可用的最大虛擬內存量,在某些系統上可用于其子級-x文件鎖的最大數量-T最大線程數如果給出limit,則它是指定資源的新值(-a選項僅顯示)。如果沒有給出選項,則假定為-f。值以1024字節為單位增量,除了-t,以秒為單位,-p,以512字節塊為單位,-T,-b,-n和-u,它們是未縮放的值。返回狀態為0除非提供了無效的選項或參數,否則在設置新限制時會發生錯誤。在POSIX模式下,512字節塊用于`-c'和`-f'選項。umask [-p] [-S] [模式]用戶文件創建掩碼設置為mode。如果模式以數字開頭,則將其解釋為八進制數; 否則它被解釋為符號模式掩碼與chmod(1)接受的類似。如果省略mode,則打印掩碼的當前值。-S選項使掩碼以符號形式打印; 該默認輸出是八進制數。如果提供了-p選項,并且省略了mode,則輸出的形式可以重用為輸入。如果返回狀態為0模式已成功更改或未提供模式參數,否則為false。unalias [-a] [name ...]從已定義別名列表中刪除每個名稱。如果提供了-a,則刪除所有別名定義。除非提供的名稱不是a,否則返回值為true別名。未設置[-fv] [名稱...]對于每個名稱,刪除相應的變量或函數。如果未提供任何選項,或者給出了-v選項,則每個名稱都引用一個shell變量。只讀變量可能不會被取消。如果指定了-f,則每個名稱引用一個shell函數,并刪除函數定義。每個未設置的變量或函數是從傳遞給后續命令的環境中刪除。如果未設置COMP_WORDBREAKS,RANDOM,SECONDS,LINENO,HISTCMD,FUNCNAME,GROUPS或DIRSTACK中的任何一個,則它們失去他們的特殊屬性,即使他們隨后被重置。除非名稱是只讀的,否則退出狀態為true。等[n ...]等待每個指定的進程并返回其終止狀態。每個n可以是進程ID或作業規范; 如果給出了工作規范,那么所有流程都是如此工作的管道等待。如果未給出n,則等待所有當前活動的子進程,并且返回狀態為零。如果n指定不存在進程或作業,返回狀態為127.否則,返回狀態是最后一個進程或作業等待的退出狀態。
受限制的外殼 ? 如果使用名稱rbash啟動bash,或者在調用時提供-r選項,則shell將受到限制。受限制的shell用于更多地設置環境 ? 控制比標準外殼。它的行為與bash相同,但不允許或不執行以下操作:
·用cd更改目錄·設置或取消設置SHELL,PATH,ENV或BASH_ENV的值·指定包含/的命令名·指定包含/作為參數的文件名。內置命令·指定包含斜杠的文件名作為hash builtin命令的-p選項的參數·在啟動時從shell環境導入函數定義·在啟動時從shell環境中解析SHELLOPTS的值·使用>,> |,<>,>&,&>和>>重定向運算符重定向輸出·使用exec builtin命令用另一個命令替換shell·使用-bu和-d選項向enable builtin命令添加或刪除內置命令·使用enable builtin命令啟用禁用的shell內置命令·為命令builtin命令指定-p選項·使用設定+ r或設定+ o限制關閉限制模式。在讀取任何啟動文件后強制執行這些限制。當執行一個被發現是shell腳本的命令時(參見上面的命令執行),rbash會關閉生成的shell中執行腳本的任何限制。
也可以看看 ? Bash參考手冊,Brian Fox和Chet Ramey ? Gnu Readline圖書館,Brian Fox和Chet Ramey ? Gnu歷史圖書館,Brian Fox和Chet Ramey ? 便攜式操作系統接口(POSIX)第2部分:Shell和實用程序,IEEE ? sh(1),ksh(1),csh(1) ? emacs(1),vi(1) ? readline的(3)
FILES ? /斌/慶典 ? bash可執行文件 ? / etc / profile文件 ? 系統范圍的初始化文件,為登錄shell執行 ? /etc/bash.bash_logout ? 系統范圍的登錄shell清理文件,在登錄shell退出時執行 ? 在?/ .bash_profile ? 為登錄shell執行的個人初始化文件 ? 在?/ .bashrc ? 單個per-interactive-shell啟動文件 ? ?/ .bash_logout中 ? 單個登錄shell清理文件,在登錄shell退出時執行 ? ?/ .inputrc文件 ? 單獨的readline初始化文件
作者 ? Brian Fox,自由軟件基金會 ? bfox@gnu.org
凱斯西儲大學Chet Rameychet.ramey@case.edu
BUG報告 ? 如果你在bash中發現了一個bug,你應該報告它。但首先,你應該確保它確實是一個bug,它出現在最新版本的bash中。最新版本 ? sion總是可以從ftp://ftp.gnu.org/pub/gnu/bash/獲得。
一旦確定實際存在錯誤,請使用bashbug命令(來自源包)提交錯誤報告。如果您有修復,建議您發送郵件那也是!建議和“哲學”錯誤報告可以郵寄到bug-bash@gnu.org或發布到Usenet新聞組gnu.bash.bug。所有錯誤報告應包括:bash的版本號硬件和操作系統用于編譯的編譯器錯誤行為的描述一個簡短的腳本或“食譜”,它可以解決這個問題有關本手冊頁的評論和錯誤報告應發送至chet.ramey@case.edu。
BUGS ? 它太大太慢了。
bash和傳統版本的sh之間存在一些細微差別,主要是因為POSIX規范。別名在某些用途中令人困惑。Shell內置命令和函數不可停止/可重新啟動。復合命令和命令序列形式`a; b; 嘗試進程暫停時,不會正常處理c'。當一個進程停止時,shell立即ately執行序列中的下一個命令。將命令序列放在括號之間以將其強制轉換為子shell就足夠了,子shell可以作為a停止單元。可能尚未導出數組變量。一次可能只有一個活動的協處理器。
GNU Bash-4.2 2010年12月28日BASH(1)
轉載于:https://blog.51cto.com/14127444/2330797
總結
以上是生活随笔 為你收集整理的Linux中bash文档翻译 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。