BASH(1)通用命令手冊(cè)BASH(1)
名稱 ? bash - GNU Bourne-Again SHell
概要 ? bash [選項(xiàng)] [文件]
版權(quán) ? Bash是自由軟件基金會(huì)版權(quán)所有(C)1989-2011。
描述 ? Bash是一種兼容sh的命令語(yǔ)言解釋器,它執(zhí)行從標(biāo)準(zhǔn)輸入或文件讀取的命令。Bash還包含了有用的功能 ? Korn和C shell(ksh和csh)。
Bash旨在成為IEEE POSIX規(guī)范(IEEE標(biāo)準(zhǔn)1003.1)的Shell和Utilities部分的一致實(shí)現(xiàn)。Bash可以配置為默認(rèn)情況下,POSIX符合。
OPTIONS ? 在調(diào)用shell時(shí),set builtin命令描述中記錄的所有單字符shell選項(xiàng)都可以用作選項(xiàng)。另外,bash ? 在調(diào)用時(shí)解釋以下選項(xiàng):
-c string如果存在-c選項(xiàng),則從字符串中讀取命令。如果在字符串后面有參數(shù),則將它們分配給位置參數(shù),從而開始0美元。-i如果存在-i選項(xiàng),則shell是交互式的。-l使bash行為就像它作為登錄shell一樣被調(diào)用(參見下面的INVOCATION)。-r如果存在-r選項(xiàng),則shell將受到限制(請(qǐng)參閱下面的RESTRICTED SHELL)。-s如果存在-s選項(xiàng),或者在選項(xiàng)處理后沒有參數(shù),則從標(biāo)準(zhǔn)輸入讀取命令。此選項(xiàng)允許位置調(diào)用交互式shell時(shí)要設(shè)置的參數(shù)。在標(biāo)準(zhǔn)輸出上打印所有以$開頭的雙引號(hào)字符串的-DA列表。這些是在語(yǔ)言翻譯時(shí)需要進(jìn)行語(yǔ)言翻譯的字符串。租賃區(qū)域設(shè)置不是C或POSIX。這意味著-n選項(xiàng); 沒有命令會(huì)被執(zhí)行。[ - +] O [shopt_option]shopt_option是內(nèi)置商店接受的shell選項(xiàng)之一(參見下面的SHELL BUILTIN命令)。如果存在shopt_option,則-O設(shè)置該值選項(xiàng); + O取消它。如果未提供shopt_option,則shopt接受的shell選項(xiàng)的名稱和值將打印在標(biāo)準(zhǔn)輸出上。如果調(diào)用選項(xiàng)為+ O,輸出以可以重用為輸入的格式顯示。- A - 表示選項(xiàng)結(jié)束并禁用進(jìn)一步的選項(xiàng)處理。 - 之后的任何參數(shù)都被視為文件名和參數(shù)。一個(gè)論點(diǎn) - 是相當(dāng)于 - 。Bash還解釋了許多多字符選項(xiàng)。在要識(shí)別單字符選項(xiàng)之前,這些選項(xiàng)必須出現(xiàn)在命令行上。--debugger安排在shell啟動(dòng)之前執(zhí)行調(diào)試器配置文件。打開擴(kuò)展調(diào)試模式(請(qǐng)參閱shopt的extdebug選項(xiàng)說(shuō)明內(nèi)置于下方)。自卸寶串相當(dāng)于-D,但輸出是GNU gettext po(便攜式對(duì)象)文件格式。自卸串相當(dāng)于-D。--help在標(biāo)準(zhǔn)輸出上顯示用法消息并成功退出。--init-file文件--rcfile文件如果shell是交互式的,則從文件而不是標(biāo)準(zhǔn)的個(gè)人初始化文件?/ .bashrc執(zhí)行命令(參見下面的INVOCATION)。- 登錄相當(dāng)于-l。--noediting當(dāng)shell是交互式時(shí),不要使用GNU readline庫(kù)來(lái)讀取命令行。--noprofile不要讀取系統(tǒng)范圍的啟動(dòng)文件/ etc / profile或任何個(gè)人初始化文件?/ .bash_profile,?/ .bash_login或?/ .profile。默認(rèn)情況下,當(dāng)bash作為登錄shell調(diào)用時(shí),bash會(huì)讀取這些文件(請(qǐng)參閱下面的INVOCATION)。--norc如果shell是交互式的,請(qǐng)不要讀取和執(zhí)行個(gè)人初始化文件?/ .bashrc。如果以sh調(diào)用shell,則默認(rèn)情況下此選項(xiàng)處于啟用狀態(tài)。--posix更改bash的行為,其中默認(rèn)操作與POSIX標(biāo)準(zhǔn)不同,以匹配標(biāo)準(zhǔn)(posix模式)。--restricted外殼受限制(見下面的限制外殼)。--rpm-要求生成shell腳本運(yùn)行所需的文件列表。這意味著'-n'并且受到與編譯時(shí)錯(cuò)誤檢查相同的限制檢查; 不解析命令替換,條件表達(dá)式和eval內(nèi)置,因此可能會(huì)遺漏某些依賴項(xiàng)。--verbose相當(dāng)于-v。- 版在標(biāo)準(zhǔn)輸出上顯示此bash實(shí)例的版本信息并成功退出。
ARGUMENTS ? 如果在選項(xiàng)處理之后仍然存在參數(shù),并且既未提供-c選項(xiàng)也未提供-s選項(xiàng),則假定第一個(gè)參數(shù)是包含shell的文件的名稱 ? 命令。如果以這種方式調(diào)用bash,則將$ 0設(shè)置為文件名,并將位置參數(shù)設(shè)置為其余參數(shù)。Bash讀取并執(zhí)行 ? 來(lái)自此文件的命令,然后退出。Bash的退出狀態(tài)是腳本中執(zhí)行的最后一個(gè)命令的退出狀態(tài)。如果未執(zhí)行任何命令,則退出狀態(tài)為0。 ? 首先嘗試在當(dāng)前目錄中打開文件,如果沒有找到文件,則shell在PATH中搜索腳本中的目錄。
INVOCATION ? 登錄shell是其參數(shù)零的第一個(gè)字符是 - 或者以--login選項(xiàng)開頭的一個(gè)。
交互式shell是在沒有非選項(xiàng)參數(shù)的情況下啟動(dòng)的,沒有-c選項(xiàng),其標(biāo)準(zhǔn)輸入和錯(cuò)誤都連接到終端(由isatty(3)),或者以-i選項(xiàng)開頭的。如果bash是交互式的,則設(shè)置PS1和$ - 包括i,允許shell腳本或啟動(dòng)文件測(cè)試此狀態(tài)。以下段落描述了bash如何執(zhí)行其啟動(dòng)文件。如果存在任何文件但無(wú)法讀取,則bash報(bào)告錯(cuò)誤。Tildes在文件中擴(kuò)展在擴(kuò)展部分的Tilde擴(kuò)展下面描述的名稱。當(dāng)bash作為交互式登錄shell或作為具有--login選項(xiàng)的非交互式shell調(diào)用時(shí),它首先從文件/ etc / profile中讀取并執(zhí)行命令,如果該文件存在。讀取該文件后,它按順序查找?/ .bash_profile,?/ .bash_login和?/ .profile,并從第一個(gè)文件中讀取并執(zhí)行命令存在且可讀。啟動(dòng)shell以禁止此行為時(shí),可以使用--noprofile選項(xiàng)。當(dāng)?shù)卿泂hell退出時(shí),如果文件存在,bash將從文件?/ .bash_logout和/etc/bash.bash_logout讀取并執(zhí)行命令。當(dāng)啟動(dòng)不是登錄shell的交互式shell時(shí),如果該文件存在,bash將從?/ .bashrc讀取并執(zhí)行命令。這可以通過(guò)使用來(lái)抑制--norc選項(xiàng)。--rcfile文件選項(xiàng)將強(qiáng)制bash從文件而不是?/ .bashrc讀取和執(zhí)行命令。例如,當(dāng)以非交互方式啟動(dòng)bash以運(yùn)行shell腳本時(shí),它會(huì)在環(huán)境中查找變量BASH_ENV,如果它出現(xiàn)在那里則展開其值,并且使用擴(kuò)展值作為要讀取和執(zhí)行的文件的名稱。Bash的行為就像執(zhí)行了以下命令一樣:if [-n“$ BASH_ENV”]; 然后 。“$ BASH_ENV”; 科幻但PATH變量的值不用于搜索文件名。如果使用名稱sh調(diào)用bash,它會(huì)嘗試盡可能接近地模仿sh的歷史版本的啟動(dòng)行為,同時(shí)符合POSIX標(biāo)準(zhǔn)好。當(dāng)作為交互式登錄shell或帶有--login選項(xiàng)的非交互式shell調(diào)用時(shí),它首先嘗試從/ etc / profile中讀取和執(zhí)行命令,?/ .profile,按此順序。--noprofile選項(xiàng)可用于禁止此行為。當(dāng)作為名為sh的交互式shell調(diào)用時(shí),bash會(huì)查找該變量ENV,如果已定義,則展開其值,并使用擴(kuò)展值作為要讀取和執(zhí)行的文件的名稱。因?yàn)橐詓h調(diào)用的shell不會(huì)嘗試讀取和執(zhí)行來(lái)自任何其他啟動(dòng)文件的可愛命令,--rcfile選項(xiàng)無(wú)效。使用名稱sh調(diào)用的非交互式shell不會(huì)嘗試讀取任何其他啟動(dòng)文件。當(dāng)以sh調(diào)用時(shí),bash在讀取啟動(dòng)文件后進(jìn)入posix模式。當(dāng)bash以posix模式啟動(dòng)時(shí),與--posix命令行選項(xiàng)一樣,它遵循啟動(dòng)文件的POSIX標(biāo)準(zhǔn)。在此模式下,交互式shell擴(kuò)展了ENV變量和命令從名稱為擴(kuò)展值的文件中讀取和執(zhí)行。沒有讀取其他啟動(dòng)文件。Bash嘗試確定何時(shí)將其標(biāo)準(zhǔn)輸入連接到網(wǎng)絡(luò)連接,如遠(yuǎn)程shell守護(hù)程序(通常為rshd)或安全shell守護(hù)進(jìn)程sshd。如果bash確定它以這種方式運(yùn)行,它會(huì)從?/ .bashrc中讀取并執(zhí)行命令,如果該文件存在且可讀的話。它會(huì)如果作為sh調(diào)用,則不要這樣做。--norc選項(xiàng)可用于禁止此行為,--rcfile選項(xiàng)可用于強(qiáng)制讀取另一個(gè)文件,但rshd不會(huì)通常使用這些選項(xiàng)調(diào)用shell或允許指定它們。如果以有效用戶(組)id不等于真實(shí)用戶(組)id啟動(dòng)shell,并且未提供-p選項(xiàng),則不讀取任何啟動(dòng)文件,shell函數(shù)tions不是從環(huán)境繼承的,SHELLOPTS,BASHOPTS,CDPATH和GLOBIGNORE變量,如果它們出現(xiàn)在環(huán)境中,則被忽略,并且有效用戶ID設(shè)置為真實(shí)用戶ID。如果在調(diào)用時(shí)提供了-p選項(xiàng),則啟動(dòng)行為相同,但不會(huì)重置有效用戶標(biāo)識(shí)。
定義 ? 本文檔的其余部分使用以下定義。 ? 空白或空格。 ? 單詞由shell視為單個(gè)單元的字符序列。也稱為令牌。 ? name僅由字母數(shù)字字符和下劃線組成的單詞,以字母字符或下劃線開頭。也稱為標(biāo)識(shí)符。 ? 元字符 ? 一個(gè)字符,當(dāng)不加引號(hào)時(shí),分隔單詞。以下之一: ? | &; ()<>空格標(biāo)簽 ? 控制操作員 ? 執(zhí)行控制功能的令牌。它是以下符號(hào)之一: ? || &&&; ;; ()| |&<newline>
保留字 ? 保留字是對(duì)shell具有特殊含義的字。以下單詞在未加引號(hào)時(shí)被識(shí)別為保留,并且是簡(jiǎn)單命令的第一個(gè)單詞 ? (參見下面的SHELL GRAMMAR)或案例的第三個(gè)詞或命令:
!案例做完elif else esac fi for function如果在select中那么直到{{time] [[]]
SHELL GRAMMAR 簡(jiǎn)單的命令 ? 一個(gè)簡(jiǎn)單的命令是一系列可選的變量賦值,后跟空格分隔的單詞和重定向,并由控制操作符終止。第一個(gè)字 ? 指定要執(zhí)行的命令,并作為參數(shù)零傳遞。其余的單詞作為參數(shù)傳遞給調(diào)用的命令。
簡(jiǎn)單命令的返回值是其退出狀態(tài),如果命令由信號(hào)n終止,則返回128 + n。
管道 ? 管道是由一個(gè)控制操作符|分隔的一個(gè)或多個(gè)命令的序列 或|&。管道的格式是:
[時(shí)間[-p]] [!]命令[[|?|&] command2 ...]命令的標(biāo)準(zhǔn)輸出通過(guò)管道連接到command2的標(biāo)準(zhǔn)輸入。此連接在命令指定的任何重定向之前執(zhí)行(請(qǐng)參閱下面的重定向)。如果使用|&,則命令的標(biāo)準(zhǔn)錯(cuò)誤通過(guò)管道連接到command2的標(biāo)準(zhǔn)輸入; 它是2>&1 |的簡(jiǎn)寫。這隱含的重新在命令指定的任何重定向之后執(zhí)行標(biāo)準(zhǔn)錯(cuò)誤的反轉(zhuǎn)。除非啟用了pipefail選項(xiàng),否則管道的返回狀態(tài)是最后一個(gè)命令的退出狀態(tài)。如果啟用了pipefail,則管道的返回狀態(tài)為以非零狀態(tài)退出的最后一個(gè)(最右邊)命令的值,如果所有命令都成功退出,則返回零。如果保留字!在管道之前,退出狀態(tài)該流水線是如上所述的退出狀態(tài)的邏輯否定。shell在返回值之前等待管道中的所有命令終止。如果時(shí)間保留字在管道之前,則在管道終止時(shí)報(bào)告其執(zhí)行所消耗的經(jīng)過(guò)時(shí)間以及用戶和系統(tǒng)時(shí)間。-p選項(xiàng)將輸出格式更改為POSIX指定的格式。當(dāng)shell處于posix模式時(shí),如果下一個(gè)標(biāo)記以“ - ”開頭,則它不會(huì)將時(shí)間識(shí)別為保留字。TIMEFORMAT變量可以設(shè)置為格式字符串,指定如何顯示定時(shí)信息; 請(qǐng)參閱Shell變量下的TIMEFORMAT說(shuō)明下面。當(dāng)shell處于posix模式時(shí),時(shí)間可以跟在換行符之后。在這種情況下,shell顯示shell及其子級(jí)占用的總用戶和系統(tǒng)時(shí)間。TIMEFORMAT變量可用于指定時(shí)間信息的格式。管道中的每個(gè)命令都作為單獨(dú)的進(jìn)程執(zhí)行(即,在子shell中)。
清單 ? 列表是由一個(gè)運(yùn)算符;,&,&&或||分隔的一個(gè)或多個(gè)管道的序列,并且可選地以;,&或<newline>之一終止。
在這些列表運(yùn)算符中,&&和|| 具有相同的優(yōu)先權(quán),其次是; 和&,具有相同的優(yōu)先權(quán)。一個(gè)或多個(gè)換行符的序列可以出現(xiàn)在列表而不是分號(hào)中以分隔命令。如果命令由控制操作符&終止,則shell在子shell中在后臺(tái)執(zhí)行命令。shell不會(huì)等待命令完成,并且返回狀態(tài)為0.命令由a分隔; 按順序執(zhí)行; shell等待每個(gè)命令依次終止。返回狀態(tài)是退出狀態(tài)執(zhí)行的最后一個(gè)命令。AND和OR列表是由&&和||分隔的一個(gè)或多個(gè)管道的序列 分別控制運(yùn)營(yíng)商。AND和OR列表以左關(guān)聯(lián)性執(zhí)行。AND列表具有表單command1 && command2當(dāng)且僅當(dāng)command1返回退出狀態(tài)為零時(shí),才執(zhí)行command2。OR列表具有表單command1 || 命令2當(dāng)且僅當(dāng)command1返回非零退出狀態(tài)時(shí)才執(zhí)行command2。AND和OR列表的返回狀態(tài)是在中執(zhí)行的最后一個(gè)命令的退出狀態(tài)名單。
復(fù)合命令 ? 復(fù)合命令是以下之一:
(list)列表在子shell環(huán)境中執(zhí)行(參見下面的COMMAND EXECUTION ENVIRONMENT)。影響shell環(huán)境的變量賦值和內(nèi)置命令可以命令完成后不會(huì)保持有效。返回狀態(tài)是列表的退出狀態(tài)。{list; }list只是在當(dāng)前的shell環(huán)境中執(zhí)行。列表必須以換行符或分號(hào)結(jié)尾。這稱為組命令。返回狀態(tài)是列表的退出狀態(tài)。請(qǐng)注意,與元字符(和)不同,{和}是保留字,必須出現(xiàn)在允許保留字被識(shí)別的地方。識(shí)別的。由于它們不會(huì)導(dǎo)致單詞分隔,因此必須通過(guò)空格或其他shell元字符將它們與列表分開。((表達(dá)))根據(jù)ARITHMETIC EVALUATION下面描述的規(guī)則評(píng)估表達(dá)式。如果表達(dá)式的值不為零,則返回狀態(tài)為0;否則返回狀態(tài)為1.這與let“expression”完全相同。[[表達(dá)]]根據(jù)條件表達(dá)式表達(dá)式的求值,返回0或1的狀態(tài)。表達(dá)式由CONDI-下面描述的原色組成 - TIONAL EXPRESSIONS。不對(duì)[[和]]之間的單詞執(zhí)行單詞拆分和路徑名擴(kuò)展; 波浪擴(kuò)展,參數(shù)和變量擴(kuò)展,執(zhí)行算術(shù)擴(kuò)展,命令替換,進(jìn)程替換和引用刪除。諸如-f之類的條件運(yùn)算符必須不加引號(hào)才能被識(shí)別作為初選。與[[,<和>運(yùn)算符一起使用時(shí),使用當(dāng)前語(yǔ)言環(huán)境按字典順序排序。當(dāng)使用==和!=運(yùn)算符時(shí),運(yùn)算符右側(cè)的字符串被視為一個(gè)模式,并根據(jù)下面描述的模式進(jìn)行匹配匹配。如果啟用了shell選項(xiàng)nocasematch,則執(zhí)行匹配而不考慮字母字符的情況。如果是字符串,則返回值為0匹配(==)或不匹配(!=)模式,否則為1。可以引用模式的任何部分以強(qiáng)制它作為字符串匹配。可以使用另一個(gè)二元運(yùn)算符=?,其優(yōu)先級(jí)與==和!=相同。使用時(shí),運(yùn)算符右側(cè)的字符串被視為a擴(kuò)展正則表達(dá)式并相應(yīng)地匹配(如在正則表達(dá)式(3)中)。如果字符串與模式匹配,則返回值為0,否則返回1。如果經(jīng)常表達(dá)式在語(yǔ)法上是不正確的,條件表達(dá)式的返回值是2.如果啟用了shell選項(xiàng)nocasematch,則執(zhí)行匹配關(guān)于字母字符的情況。可以引用模式的任何部分以強(qiáng)制它作為字符串匹配。子字符串與括號(hào)內(nèi)的子字符串匹配正則表達(dá)式中的壓力保存在數(shù)組變量BASH_REMATCH中。索引為0的BASH_REMATCH元素是字符串匹配的部分整個(gè)正則表達(dá)式。索引為n的BASH_REMATCH元素是與第n個(gè)帶括號(hào)的子表達(dá)式匹配的字符串部分。可以使用以下運(yùn)算符組合表達(dá)式,按優(yōu)先級(jí)遞減順序列出:(表達(dá))返回表達(dá)式的值。這可以用于覆蓋運(yùn)算符的正常優(yōu)先級(jí)。!表達(dá)如果表達(dá)式為false,則為True。expression1 && expression2如果expression1和expression2都為true,則為True。expression1 || 表達(dá)式2如果expression1或expression2為true,則為True。&&和|| 如果expression1的值足以確定整個(gè)條件表達(dá)式的返回值,則運(yùn)算符不會(huì)計(jì)算expression2。名稱[[in [word ...]]; ]列表; DONE擴(kuò)展后面的單詞列表,生成項(xiàng)目列表。變量名依次設(shè)置到該列表的每個(gè)元素,并且每次都執(zhí)行列表。如果省略in字,for命令對(duì)每個(gè)設(shè)置的位置參數(shù)執(zhí)行一次列表(參見下面的參數(shù))。返回狀態(tài)是退出狀態(tài)執(zhí)行的最后一個(gè)命令。如果后續(xù)項(xiàng)目的擴(kuò)展導(dǎo)致空列表,則不執(zhí)行任何命令,返回狀態(tài)為0。for((expr1; expr2; expr3)); 做清單; DONE首先,根據(jù)算術(shù)評(píng)估下面描述的規(guī)則評(píng)估算術(shù)表達(dá)式expr1。然后算術(shù)表達(dá)式expr2進(jìn)行評(píng)估反復(fù)進(jìn)行,直到評(píng)估為零。每次expr2計(jì)算為非零值時(shí),執(zhí)行列表并計(jì)算算術(shù)表達(dá)式expr3。如果有的話表達(dá)式被省略,它的行為就好像它的計(jì)算結(jié)果為1.返回值是執(zhí)行列表中最后一個(gè)命令的退出狀態(tài),如果是任何一個(gè),則返回false表達(dá)式無(wú)效。選擇名稱[在單詞]; 做清單; DONE擴(kuò)展后面的單詞列表,生成項(xiàng)目列表。擴(kuò)展單詞集打印在標(biāo)準(zhǔn)錯(cuò)誤上,每個(gè)單詞前面都有一個(gè)數(shù)字。如果在word中省略,打印位置參數(shù)(參見下面的參數(shù))。然后顯示PS3提示并從標(biāo)準(zhǔn)輸入讀取一行。如果line由與顯示的單詞之一對(duì)應(yīng)的數(shù)字組成,然后name的值設(shè)置為該單詞。如果該行為空,則單詞和提示符為又玩了。如果讀取EOF,則命令完成。讀取的任何其他值都會(huì)將name設(shè)置為null。讀取的行保存在變量REPLY中。清單是在每次選擇之后執(zhí)行,直到執(zhí)行break命令。select的退出狀態(tài)是列表中執(zhí)行的最后一個(gè)命令的退出狀態(tài),如果沒有,則為零mands被執(zhí)行了。[[(] pattern [| pattern] ...)列表中的案例單詞;; ] ... esaccase命令首先擴(kuò)展word,并嘗試依次使用與路徑名擴(kuò)展相同的匹配規(guī)則將其與每個(gè)模式匹配(請(qǐng)參閱路徑名擴(kuò)展)下面)。使用波浪擴(kuò)展,參數(shù)和變量擴(kuò)展,算術(shù)替換,命令替換,過(guò)程替換和引用來(lái)擴(kuò)展該詞去除。檢查的每個(gè)模式都使用波形擴(kuò)展,參數(shù)和變量擴(kuò)展,算術(shù)替換,命令替換和過(guò)程替換來(lái)擴(kuò)展。形式予以。如果啟用了shell選項(xiàng)nocasematch,則執(zhí)行匹配而不考慮字母字符的情況。找到匹配后,相關(guān)執(zhí)行自選列表。如果;; 使用運(yùn)算符,在第一個(gè)模式匹配后不會(huì)嘗試后續(xù)匹配。使用;代替;; 導(dǎo)致執(zhí)行繼續(xù)與下一組模式相關(guān)聯(lián)的列表。使用;;代替;; 導(dǎo)致shell測(cè)試語(yǔ)句中的下一個(gè)模式列表(如果有)和在成功匹配時(shí)執(zhí)行任何關(guān)聯(lián)列表。如果沒有模式匹配,則退出狀態(tài)為零。否則,它是執(zhí)行的最后一個(gè)命令的退出狀態(tài)名單。如果列表; 然后列出; [elif list; 然后列出; ] ... [else list; ] fi執(zhí)行if列表。如果其退出狀態(tài)為零,則執(zhí)行then列表。否則,每個(gè)elif列表依次執(zhí)行,如果其退出狀態(tài)為零,則執(zhí)行相應(yīng)的列表并完成命令。否則,執(zhí)行else列表(如果存在)。退出狀態(tài)是最后一個(gè)退出狀態(tài)執(zhí)行命令,如果沒有條件測(cè)試,則為零。而list-1; 做list-2; DONE直到list-1; 做list-2; DONE只要列表list-1中的最后一個(gè)命令返回退出狀態(tài)為零,while命令就會(huì)連續(xù)執(zhí)行列表list-2。until命令是相同的到while命令,除了測(cè)試被否定; 只要list-1中的最后一個(gè)命令返回非零退出狀態(tài),就會(huì)執(zhí)行l(wèi)ist-2。退出狀態(tài)while和until命令是list-2中執(zhí)行的最后一個(gè)命令的退出狀態(tài),如果沒有執(zhí)行則返回零。
協(xié)進(jìn)程 ? coprocess是一個(gè)shell命令,前面是coproc保留字。協(xié)同進(jìn)程在子shell中異步執(zhí)行,就像命令已以&結(jié)束一樣 ? 控制操作符,在執(zhí)行的shell和協(xié)同進(jìn)程之間建立雙向管道。
協(xié)同進(jìn)程的格式是:coproc [NAME]命令[重定向]這將創(chuàng)建一個(gè)名為NAME的協(xié)同進(jìn)程。如果未提供NAME,則默認(rèn)名稱為COPROC。如果command是一個(gè)簡(jiǎn)單的命令,則不得提供NAME(見上文); 除此以外,它被解釋為簡(jiǎn)單命令的第一個(gè)單詞。執(zhí)行coproc時(shí),shell會(huì)在上下文中創(chuàng)建一個(gè)名為NAME的數(shù)組變量(請(qǐng)參閱下面的數(shù)組)正在執(zhí)行的shell。命令的標(biāo)準(zhǔn)輸出通過(guò)管道連接到執(zhí)行shell中的文件描述符,該文件描述符分配給NAME [0]。命令的標(biāo)準(zhǔn)輸入通過(guò)管道連接到執(zhí)行shell中的文件描述符,并且該文件描述符被分配給NAME [1]。這個(gè)管道建立了在命令指定的任何重定向之前(請(qǐng)參閱下面的REDIRECTION)。文件描述符可以用作shell命令和使用標(biāo)準(zhǔn)的重定向的參數(shù)單詞擴(kuò)展。為執(zhí)行協(xié)同進(jìn)程而生成的shell的進(jìn)程ID可用作變量NAME_PID的值。wait builtin命令可能用于等待協(xié)處理器終止。協(xié)同進(jìn)程的返回狀態(tài)是命令的退出狀態(tài)。
殼函數(shù)定義 ? shell函數(shù)是一個(gè)被稱為簡(jiǎn)單命令的對(duì)象,它使用一組新的位置參數(shù)執(zhí)行復(fù)合命令。Shell函數(shù)聲明為 ? 如下:
name()compound-command [重定向]函數(shù)名[()]復(fù)合命令[重定向]這定義了一個(gè)名為name的函數(shù)。保留字功能是可選的。如果提供了功能保留字,則括號(hào)是可選的。的身體function是復(fù)合命令compound-command(參見上面的Compound命令)。該命令通常是{和}之間的命令列表,但可以是任何命令在上面的復(fù)合命令下列出。只要將name指定為簡(jiǎn)單命令的名稱,就會(huì)執(zhí)行compound-command。任何重定向(請(qǐng)參閱重定向在執(zhí)行該功能時(shí)執(zhí)行定義功能時(shí)指定的)。除非發(fā)生語(yǔ)法錯(cuò)誤,否則函數(shù)定義的退出狀態(tài)為零或者已經(jīng)存在具有相同名稱的只讀函數(shù)。執(zhí)行時(shí),函數(shù)的退出狀態(tài)是正文中執(zhí)行的最后一個(gè)命令的退出狀態(tài)。(參見下面的功能。)
評(píng)論 ? 在非交互式shell中,或者在內(nèi)置shopt的interactive_comments選項(xiàng)的交互式shell中(參見下面的SHELL BUILTIN命令), ? 使用#導(dǎo)致該行以及該行上的所有剩余字符被忽略。未啟用interactive_comments選項(xiàng)的交互式shell不允許 ? 評(píng)論。默認(rèn)情況下,interactive_comments選項(xiàng)在交互式shell中處于啟用狀態(tài)。
QUOTING ? 引用用于刪除shell中某些字符或單詞的特殊含義。引用可用于禁用特殊字符的特殊處理,以預(yù)先 ? 使保留字不被識(shí)別,并防止參數(shù)擴(kuò)展。
上面在定義下列出的每個(gè)元字符對(duì)shell具有特殊含義,如果要表示它,則必須引用它。當(dāng)使用命令歷史擴(kuò)展工具時(shí)(參見下面的歷史擴(kuò)展),必須引用歷史擴(kuò)展字符,通常為!以防止歷史記錄擴(kuò)張。有三種引用機(jī)制:轉(zhuǎn)義字符,單引號(hào)和雙引號(hào)。未引用的反斜杠(\)是轉(zhuǎn)義字符。它保留了下一個(gè)字符的字面值,但<newline>除外。如果是\ <換行符>對(duì)出現(xiàn),反斜杠本身沒有引用,\ <newline>被視為一個(gè)行繼續(xù)(即,它從輸入流中刪除并被有效忽略)。用單引號(hào)括起字符可以保留引號(hào)中每個(gè)字符的字面值。單引號(hào)之間可能不會(huì)出現(xiàn)單引號(hào),即使在前面引用也是如此通過(guò)反斜杠。用雙引號(hào)括起字符會(huì)保留引號(hào)內(nèi)所有字符的字面值,但$,`,\除外,并且在啟用歷史記錄擴(kuò)展時(shí),!字符$和`在雙引號(hào)中保留其特殊含義。反斜杠只有在遵循下列特征之一時(shí)才保留其特殊含義ters:$,`,“,\或<newline>。雙引號(hào)可以用雙引號(hào)引用,前面加一個(gè)反斜杠。如果啟用,將執(zhí)行歷史記錄擴(kuò)展一個(gè)!出現(xiàn)在雙引號(hào)中的是使用反斜杠轉(zhuǎn)義的。之前的反斜杠!沒有刪除。在雙引號(hào)中,特殊參數(shù)*和@具有特殊含義(參見下面的參數(shù))。$'string'形式的單詞是專門處理的。單詞擴(kuò)展為字符串,替換為ANSI C標(biāo)準(zhǔn)指定的反斜杠轉(zhuǎn)義字符。反斜杠轉(zhuǎn)義序列(如果存在)按如下方式解碼:警報(bào)(鈴聲)\ b退格。\ E\ E逃脫角色\ f表格飼料\ n新行\(zhòng) r \ n回車\ t水平標(biāo)簽\ v垂直標(biāo)簽\\反斜杠單引號(hào)“雙引號(hào)\ nnnn八位字符,其值為八進(jìn)制值nnn(一到三位數(shù))\ xHH八位字符,其值為十六進(jìn)制值HH(一個(gè)或兩個(gè)十六進(jìn)制數(shù)字)\ uHHHH Unicode(ISO / IEC 10646)字符,其值為十六進(jìn)制值HHHH(一到四個(gè)十六進(jìn)制數(shù)字)\ UHHHHHHHHUnicode(ISO / IEC 10646)字符,其值為十六進(jìn)制值HHHHHHHH(一到八個(gè)十六進(jìn)制數(shù)字)\ cx是control-x字符擴(kuò)展結(jié)果是單引號(hào),好像美元符號(hào)不存在一樣。帶有美元符號(hào)($“string”)的雙引號(hào)字符串將導(dǎo)致根據(jù)當(dāng)前語(yǔ)言環(huán)境轉(zhuǎn)換字符串。如果當(dāng)前語(yǔ)言環(huán)境是C或POSIX,則美元符號(hào)被忽略。如果翻譯并替換字符串,則替換為雙引號(hào)。
參數(shù) ? 參數(shù)是存儲(chǔ)值的實(shí)體。它可以是特殊參數(shù)下面列出的名稱,數(shù)字或特殊字符之一。變量是一個(gè)參數(shù) ? 用名字表示。變量具有值和零個(gè)或多個(gè)屬性。使用declare builtin命令分配屬性(請(qǐng)參閱SHELL BUILTIN COM中的聲明) ? MANDS)。
如果已為其分配了值,則會(huì)設(shè)置該參數(shù)。空字符串是有效值。設(shè)置變量后,只能使用unset builtin命令取消設(shè)置(參見SHELL BUILTIN COMMANDS如下)。可以通過(guò)表單的聲明來(lái)分配變量名稱= [值]如果未給出值,則為變量分配空字符串。所有值都進(jìn)行波形擴(kuò)展,參數(shù)和變量擴(kuò)展,命令替換,算術(shù)擴(kuò)展和報(bào)價(jià)刪除(參見下面的擴(kuò)展)。如果變量的整數(shù)屬性已設(shè)置,則即使$((...))也將值計(jì)算為算術(shù)表達(dá)式不使用擴(kuò)展(參見下面的算術(shù)擴(kuò)展)。除了“$ @”之外,不執(zhí)行單詞拆分,如下面特殊參數(shù)下所述。路徑名不進(jìn)行擴(kuò)展。賦值語(yǔ)句也可以作為別名,聲明,排版,導(dǎo)出,只讀和本地內(nèi)置命令的參數(shù)出現(xiàn)。在賦值語(yǔ)句為shell變量或數(shù)組索引賦值的上下文中,+ =運(yùn)算符可用于追加或添加到變量的prev-價(jià)值。當(dāng)+ =應(yīng)用于已設(shè)置整數(shù)屬性的變量時(shí),將值計(jì)算為算術(shù)表達(dá)式并添加到變量的當(dāng)前值值,也被評(píng)估。當(dāng)使用復(fù)合賦值將+ =應(yīng)用于數(shù)組變量時(shí)(請(qǐng)參閱下面的數(shù)組),變量的值不會(huì)被取消(就像使用時(shí)一樣)=),并且新值將附加到數(shù)組,從大于數(shù)組的最大索引(對(duì)于索引數(shù)組)開始,或作為附加鍵值對(duì)添加到數(shù)組中ciative數(shù)組。應(yīng)用于字符串值變量時(shí),會(huì)擴(kuò)展值并將其附加到變量的值。
位置參數(shù) ? 位置參數(shù)是由一個(gè)或多個(gè)數(shù)字表示的參數(shù),而不是單個(gè)數(shù)字0.位置參數(shù)是從shell的參數(shù)分配的。 ? 調(diào)用,可以使用set builtin命令重新分配。可能無(wú)法使用賦值語(yǔ)句將位置參數(shù)分配給它們。位置參數(shù)是時(shí)間 - ? 執(zhí)行shell函數(shù)時(shí),rarily被替換(參見下面的功能)。
當(dāng)展開由多個(gè)數(shù)字組成的位置參數(shù)時(shí),必須將其括在大括號(hào)中(參見下面的擴(kuò)展)。
特殊參數(shù) ? shell專門處理幾個(gè)參數(shù)。這些參數(shù)只能被引用; 不允許分配給他們。 ? 從一個(gè)開始擴(kuò)展到位置參數(shù)。當(dāng)擴(kuò)展發(fā)生在雙引號(hào)內(nèi)時(shí),它會(huì)擴(kuò)展為具有每個(gè)參數(shù)值的單個(gè)單詞 ? 由IFS特殊變量的第一個(gè)字符分隔。也就是說(shuō),“$ ”相當(dāng)于“$ 1c $ 2c ...”,其中c是IFS變量值的第一個(gè)字符。 ? 能夠。如果未設(shè)置IFS,則參數(shù)由空格分隔。如果IFS為null,則參數(shù)將在不插入分隔符的情況下連接。 ? @從一個(gè)開始擴(kuò)展到位置參數(shù)。當(dāng)擴(kuò)展發(fā)生在雙引號(hào)內(nèi)時(shí),每個(gè)參數(shù)都會(huì)擴(kuò)展為單獨(dú)的單詞。也就是說(shuō),“$ @”是 ? 相當(dāng)于“$ 1”“$ 2”...如果雙引號(hào)擴(kuò)展發(fā)生在一個(gè)單詞中,則第一個(gè)參數(shù)的擴(kuò)展與原始的起始部分相連 ? nal word,并且最后一個(gè)參數(shù)的擴(kuò)展與原始單詞的最后部分連接。當(dāng)沒有位置參數(shù)時(shí),“$ @”和$ @展開到 ? 沒有(即,他們被刪除)。 ? #擴(kuò)展為十進(jìn)制的位置參數(shù)數(shù)。 ? ?擴(kuò)展到最近執(zhí)行的前臺(tái)管道的退出狀態(tài)。 ? - 擴(kuò)展為調(diào)用時(shí)指定的當(dāng)前選項(xiàng)標(biāo)志,set builtin命令或shell本身設(shè)置的那些(例如-i選項(xiàng))。 ? $擴(kuò)展為shell的進(jìn)程ID。在()子shell中,它擴(kuò)展為當(dāng)前shell的進(jìn)程ID,而不是子shell。 ? !擴(kuò)展到最近執(zhí)行的后臺(tái)(異步)命令的進(jìn)程ID。 ? 0擴(kuò)展為shell或shell腳本的名稱。這是在shell初始化時(shí)設(shè)置的。如果使用命令文件調(diào)用bash,則將$ 0設(shè)置為該名稱 ? 文件。如果使用-c選項(xiàng)啟動(dòng)bash,則將$ 0設(shè)置為要執(zhí)行的字符串之后的第一個(gè)參數(shù)(如果存在)。否則,它被設(shè)置為 ? 用于調(diào)用bash的文件名,由參數(shù)zero指定。 ? _在shell啟動(dòng)時(shí),設(shè)置為用于調(diào)用在環(huán)境或參數(shù)列表中傳遞的正在執(zhí)行的shell或shell腳本的絕對(duì)路徑名。隨后, ? 擴(kuò)展后擴(kuò)展到上一個(gè)命令的最后一個(gè)參數(shù)。同時(shí)設(shè)置為用于調(diào)用已執(zhí)行并放置在環(huán)境中的每個(gè)命令的完整路徑名 ? 導(dǎo)出到該命令。檢查郵件時(shí),此參數(shù)保存當(dāng)前正在檢查的郵件文件的名稱。
殼變量 ? 以下變量由shell設(shè)置:
BASH擴(kuò)展為用于調(diào)用此bash實(shí)例的完整文件名。BASHOPTS以冒號(hào)分隔的已啟用shell選項(xiàng)列表。列表中的每個(gè)單詞都是shopt內(nèi)置命令的-s選項(xiàng)的有效參數(shù)(請(qǐng)參閱SHELL BUILTIN命令下面)。BASHOPTS中出現(xiàn)的選項(xiàng)是shopt報(bào)告的選項(xiàng)。如果此變量在bash啟動(dòng)時(shí)的環(huán)境中,則每個(gè)shell選項(xiàng)都在列表將在讀取任何啟動(dòng)文件之前啟用。此變量是只讀的。BASHPID擴(kuò)展到當(dāng)前bash進(jìn)程的進(jìn)程ID。這在某些情況下不同于$$,例如不需要bash重新初始化的子shell化的。BASH_ALIASES一個(gè)關(guān)聯(lián)數(shù)組變量,其成員對(duì)應(yīng)于別名內(nèi)置維護(hù)的別名內(nèi)部列表。添加到此數(shù)組的元素顯示在別名列表; 取消設(shè)置數(shù)組元素會(huì)導(dǎo)致從別名列表中刪除別名。BASH_ARGC一個(gè)數(shù)組變量,其值是當(dāng)前bash執(zhí)行調(diào)用堆棧的每個(gè)幀中的參數(shù)數(shù)。當(dāng)前子例程的參數(shù)數(shù)量(使用。或source執(zhí)行的shell函數(shù)或腳本)位于堆棧的頂部。執(zhí)行子程序時(shí),會(huì)傳遞傳遞的參數(shù)數(shù)量BASH_ARGC。shell僅在處于擴(kuò)展調(diào)試模式時(shí)才設(shè)置BASH_ARGC(請(qǐng)參閱下面內(nèi)置shopt的extdebug選項(xiàng)的說(shuō)明)BASH_ARGV包含當(dāng)前bash執(zhí)行調(diào)用堆棧中所有參數(shù)的數(shù)組變量。最后一個(gè)子程序調(diào)用的最后一個(gè)參數(shù)位于頂部堆; 初始調(diào)用的第一個(gè)參數(shù)位于底部。執(zhí)行子程序時(shí),提供的參數(shù)將被推送到BASH_ARGV。外殼設(shè)置BASH_ARGV僅在擴(kuò)展調(diào)試模式下(參見下面內(nèi)置shopt的extdebug選項(xiàng)說(shuō)明)BASH_CMDS一個(gè)關(guān)聯(lián)數(shù)組變量,其成員對(duì)應(yīng)于由哈希內(nèi)置維護(hù)的命令的內(nèi)部哈希表。出現(xiàn)添加到此數(shù)組的元素在哈希表中; unsetting數(shù)組元素導(dǎo)致從哈希表中刪除命令。BASH_COMMAND當(dāng)前正在執(zhí)行或即將執(zhí)行的命令,除非shell正在執(zhí)行命令作為陷阱的結(jié)果,在這種情況下,它是命令執(zhí)行 - 在陷阱的時(shí)候。BASH_EXECUTION_STRING-c調(diào)用選項(xiàng)的命令參數(shù)。BASH_LINENO一個(gè)數(shù)組變量,其成員是源文件中的行號(hào),其中調(diào)用了FUNCNAME的每個(gè)相應(yīng)成員。$ {BASH_LINENO [$ i]}是中的行號(hào)源文件($ {BASH_SOURCE [$ i + 1]})其中調(diào)用$ {FUNCNAME [$ i]}(如果在另一個(gè)shell函數(shù)中引用,則為$ {BASH_LINENO [$ i-1]})。使用LINENO獲取當(dāng)前行號(hào)。BASH_REMATCH一個(gè)數(shù)組變量,其成員由=?二元運(yùn)算符分配給[[條件命令。索引為0的元素是字符串匹配的部分整個(gè)正則表達(dá)式。索引為n的元素是與第n個(gè)帶括號(hào)的子表達(dá)式匹配的字符串部分。此變量是只讀的。BASH_SOURCE一個(gè)數(shù)組變量,其成員是源文件名,其中定義了FUNCNAME數(shù)組變量中相應(yīng)的shell函數(shù)名。shell函數(shù)$ {FUNCNAME [$ i]}在$ {BASH_SOURCE [$ i]}文件中定義,并從$ {BASH_SOURCE [$ i + 1]}調(diào)用。BASH_SUBSHELL每次生成子shell或子shell環(huán)境時(shí)增加1。初始值為0。BASH_VERSINFO一個(gè)只讀數(shù)組變量,其成員包含此bash實(shí)例的版本信息。分配給數(shù)組成員的值如下:BASH_VERSINFO [0]主要版本號(hào)(發(fā)行版)。BASH_VERSINFO [1]次要版本號(hào)(版本)。BASH_VERSINFO [2]補(bǔ)丁級(jí)別。BASH_VERSINFO [3]構(gòu)建版本。BASH_VERSINFO [4]發(fā)布狀態(tài)(例如,beta1)。BASH_VERSINFO [5] MACHTYPE的值。BASH_VERSION擴(kuò)展為描述此bash實(shí)例版本的字符串。COMP_CWORD包含當(dāng)前光標(biāo)位置的單詞$ {COMP_WORDS}的索引。此變量?jī)H在可編程補(bǔ)充調(diào)用的shell函數(shù)中可用。設(shè)施(見下面的可編程完成)。COMP_KEY用于調(diào)用當(dāng)前完成函數(shù)的鍵(或鍵序列的最終鍵)。COMP_LINE當(dāng)前命令行。此變量?jī)H在可編程完成工具調(diào)用的shell函數(shù)和外部命令中可用(請(qǐng)參閱可編程完成下面)。COMP_POINT當(dāng)前光標(biāo)位置相對(duì)于當(dāng)前命令開頭的索引。如果當(dāng)前光標(biāo)位置在當(dāng)前命令的末尾,則此變量的值等于$ {#COMP_LINE}。此變量?jī)H在可編程完成調(diào)用的shell函數(shù)和外部命令中可用設(shè)施(見下面的可編程完成)。COMP_TYPE設(shè)置為與導(dǎo)致調(diào)用完成函數(shù)的嘗試完成類型相對(duì)應(yīng)的整數(shù)值:TAB,正常完成,?,用于列出連續(xù)標(biāo)簽之后的完成,!,用于列出部分單詞完成的備選方案,@,如果單詞未被修改則列出完成,或%,用于菜單補(bǔ)充灰。此變量?jī)H在可編程完成工具調(diào)用的shell函數(shù)和外部命令中可用(請(qǐng)參閱下面的可編程完成)。COMP_WORDBREAKS執(zhí)行單詞完成時(shí),readline庫(kù)將其視為單詞分隔符的字符集。如果COMP_WORDBREAKS未設(shè)置,則會(huì)失去其特殊的適當(dāng)性 - 關(guān)系,即使它隨后被重置。COMP_WORDS一個(gè)數(shù)組變量(參見下面的數(shù)組),由當(dāng)前命令行中的各個(gè)單詞組成。該行被分成單詞,因?yàn)閞eadline將使用它來(lái)分割它COMP_WORDBREAKS如上所述。此變量?jī)H在可編程完成工具調(diào)用的shell函數(shù)中可用(請(qǐng)參閱可編程完成下面)。COPROC一個(gè)數(shù)組變量(參見下面的數(shù)組),用于保存文件描述符以輸出和輸入未命名的協(xié)同進(jìn)程(參見上面的Coprocesses)。DIRSTACK包含目錄堆棧當(dāng)前內(nèi)容的數(shù)組變量(請(qǐng)參閱下面的數(shù)組)。目錄按照它們顯示的順序出現(xiàn)在堆棧中dirs builtin。分配給此數(shù)組變量的成員可用于修改堆棧中已有的目錄,但必須使用pushd和popd內(nèi)置函數(shù)來(lái)添加并刪除目錄。對(duì)此變量的賦值不會(huì)更改當(dāng)前目錄。如果未設(shè)置DIRSTACK,它將丟失其特殊屬性,即使它是后續(xù)重置。EUID擴(kuò)展為當(dāng)前用戶的有效用戶ID,在shell啟動(dòng)時(shí)初始化。這個(gè)變量是只讀的。FUNCNAME一個(gè)數(shù)組變量,包含當(dāng)前在執(zhí)行調(diào)用堆棧中的所有shell函數(shù)的名稱。索引為0的元素是當(dāng)前正在執(zhí)行的任何元素shell函數(shù)。最底部的元素(索引最高的元素)是“main”。此變量?jī)H在執(zhí)行shell函數(shù)時(shí)存在。分配給FUNCNAME無(wú)效并返回錯(cuò)誤狀態(tài)。如果未設(shè)置FUNCNAME,則會(huì)丟失其特殊屬性,即使它隨后被重置。此變量可與BASH_LINENO和BASH_SOURCE一起使用。FUNCNAME的每個(gè)元素在BASH_LINENO和BASH_SOURCE中都有相應(yīng)的元素來(lái)描述調(diào)用堆。例如,$ {FUNCNAME [$ i]}是從行號(hào)$ {BASH_LINENO [$ i]}的$ {BASH_SOURCE [$ i + 1]}調(diào)用的。內(nèi)置呼叫者顯示當(dāng)前呼叫堆棧使用此信息。GROUPS一個(gè)數(shù)組變量,包含當(dāng)前用戶所屬的組列表。對(duì)GROUPS的分配無(wú)效并返回錯(cuò)誤狀態(tài)。如果是GROUPS未設(shè)置,即使隨后重置,它也會(huì)失去其特殊屬性。HISTCMD當(dāng)前命令的歷史記錄編號(hào)或歷史記錄列表中的索引。如果未設(shè)置HISTCMD,它將失去其特殊屬性,即使它隨后被重置。主機(jī)名自動(dòng)設(shè)置為當(dāng)前主機(jī)的名稱。HOSTTYPE自動(dòng)設(shè)置為唯一描述正在執(zhí)行bash的計(jì)算機(jī)類型的字符串。默認(rèn)值取決于系統(tǒng)。LINENO每次引用此參數(shù)時(shí),shell都會(huì)在腳本中替換表示當(dāng)前順序行號(hào)(以1開頭)的十進(jìn)制數(shù)或功能。當(dāng)不在腳本或函數(shù)中時(shí),替換值不保證有意義。如果LINENO未設(shè)置,即使它失去了它的特殊屬性隨后重置。MACHTYPE自動(dòng)設(shè)置為完全描述執(zhí)行bash的系統(tǒng)類型的字符串,采用標(biāo)準(zhǔn)GNU cpu-company-system格式。默認(rèn)為系統(tǒng) - 依賴。MAPFILE創(chuàng)建一個(gè)數(shù)組變量(請(qǐng)參閱下面的數(shù)組),用于保存未提供變量名時(shí)內(nèi)置文件讀取的文本。OLDPWD cd命令設(shè)置的上一個(gè)工作目錄。OPTARG getopts builtin命令處理的最后一個(gè)選項(xiàng)參數(shù)的值(參見下面的SHELL BUILTIN命令)。OPTIND getopts builtin命令要處理的下一個(gè)參數(shù)的索引(參見下面的SHELL BUILTIN命令)。OSTYPE自動(dòng)設(shè)置為一個(gè)字符串,描述執(zhí)行bash的操作系統(tǒng)。默認(rèn)值取決于系統(tǒng)。PIPESTATUS一個(gè)數(shù)組變量(參見下面的數(shù)組),其中包含最近執(zhí)行的前臺(tái)管道(可能包含)中的進(jìn)程的退出狀態(tài)值列表只有一個(gè)命令)。PPID shell的父進(jìn)程ID。這個(gè)變量是只讀的。PWD cd命令設(shè)置的當(dāng)前工作目錄。RANDOM每次引用此參數(shù)時(shí),都會(huì)生成0到32767之間的隨機(jī)整數(shù)。可以通過(guò)賦值來(lái)初始化隨機(jī)數(shù)序列隨機(jī)。如果未設(shè)置RANDOM,即使隨后重置,它也會(huì)失去其特殊屬性。READLINE_LINEreadline行緩沖區(qū)的內(nèi)容,用于“bind -x”(參見下面的SHELL BUILTIN命令)。READLINE_POINT插入點(diǎn)在readline行緩沖區(qū)中的位置,與“bind -x”一起使用(請(qǐng)參閱下面的SHELL BUILTIN命令)。REPLY在沒有提供參數(shù)時(shí)設(shè)置為read builtin命令讀取的輸入行。SECONDS每次引用此參數(shù)時(shí),都會(huì)返回自返回shell調(diào)用以來(lái)的秒數(shù)。如果為SECONDS分配了值,則返回的值為quent references是分配后的秒數(shù)加上分配的值。如果SECONDS未設(shè)置,它將失去其特殊屬性,即使它是subse-好意重置。SHELLOPTS以冒號(hào)分隔的已啟用shell選項(xiàng)列表。列表中的每個(gè)單詞都是set builtin命令的-o選項(xiàng)的有效參數(shù)(請(qǐng)參閱SHELL BUILTIN命令下面)。SHELLOPTS中出現(xiàn)的選項(xiàng)是由set -o報(bào)告的選項(xiàng)。如果此變量在bash啟動(dòng)時(shí)的環(huán)境中,則每個(gè)shell選項(xiàng)都在列表將在讀取任何啟動(dòng)文件之前啟用。此變量是只讀的。SHLVL每次啟動(dòng)bash實(shí)例時(shí)增加1。UID擴(kuò)展為當(dāng)前用戶的用戶標(biāo)識(shí),在shell啟動(dòng)時(shí)初始化。這個(gè)變量是只讀的。shell使用以下變量。在某些情況下,bash會(huì)為變量分配默認(rèn)值; 這些情況如下所述。BASH_ENV如果在bash執(zhí)行shell腳本時(shí)設(shè)置了此參數(shù),則其值將被解釋為包含初始化shell的命令的文件名,如?/ .bashrc中所示。BASH_ENV的值在被解釋為文件名之前需要進(jìn)行參數(shù)擴(kuò)展,命令替換和算術(shù)擴(kuò)展。PATH不習(xí)慣搜索結(jié)果文件名。BASH_XTRACEFD如果設(shè)置為與有效文件描述符對(duì)應(yīng)的整數(shù),則bash會(huì)將set -x啟用時(shí)生成的跟蹤輸出寫入該文件描述符。文件當(dāng)取消設(shè)置BASH_XTRACEFD或分配新值時(shí),將關(guān)閉描述符。取消設(shè)置BASH_XTRACEFD或?yàn)槠浞峙淇兆址畷?huì)導(dǎo)致發(fā)送跟蹤輸出到標(biāo)準(zhǔn)錯(cuò)誤。請(qǐng)注意,將BASH_XTRACEFD設(shè)置為2(標(biāo)準(zhǔn)錯(cuò)誤文件描述符)然后取消設(shè)置將導(dǎo)致標(biāo)準(zhǔn)錯(cuò)誤被關(guān)閉。CDPATH cd命令的搜索路徑。這是一個(gè)以冒號(hào)分隔的目錄列表,其中shell查找cd命令指定的目標(biāo)目錄。一個(gè)樣本值為“。:?:/ usr”。列由select select命令用于確定打印選擇列表時(shí)的終端寬度。收到SIGWINCH后自動(dòng)設(shè)置。COMPREPLY一個(gè)數(shù)組變量,bash讀取由可編程完成工具調(diào)用的shell函數(shù)生成的可能完成(參見Programmable Com-請(qǐng)注意以下內(nèi)容)。EMACS如果bash在shell以值“t”開始時(shí)在環(huán)境中找到此變量,則它假定shell在Emacs shell緩沖區(qū)中運(yùn)行并禁用行編輯。ENV類似于BASH_ENV; 在POSIX模式下調(diào)用shell時(shí)使用。FCEDIT fc內(nèi)置命令的默認(rèn)編輯器。FIGNORE執(zhí)行文件名完成時(shí)要忽略的以冒號(hào)分隔的后綴列表(請(qǐng)參閱下面的READLINE)。一個(gè)文件名,其后綴與FIGNORE中的一個(gè)條目匹配從匹配的文件名列表中排除。示例值為“.o:?”。FUNCNEST如果設(shè)置為大于0的數(shù)值,則定義最大函數(shù)嵌套級(jí)別。超過(guò)此嵌套級(jí)別的函數(shù)調(diào)用將導(dǎo)致當(dāng)前命令中止。GLOBIGNORE以冒號(hào)分隔的模式列表,用于定義要由路徑名擴(kuò)展忽略的文件名集。如果文件名也與路徑名擴(kuò)展模式匹配匹配GLOBIGNORE中的一個(gè)模式,它將從匹配列表中刪除。HISTCONTROL以冒號(hào)分隔的值列表,用于控制命令在歷史列表中的保存方式。如果值列表包含ignorespace,則以空格開頭的行字符未保存在歷史記錄列表中。ignoredups的值導(dǎo)致不保存與先前歷史記錄條目匹配的行。ignoreboth的值是short-為忽略空間和ignoredups的手。erasedups的值導(dǎo)致與該當(dāng)前行匹配的所有先前行在該行之前從歷史列表中刪除保存。忽略上面列表中沒有的任何值。如果未設(shè)置HISTCONTROL,或者未包含有效值,則shell解析器讀取的所有行都將保存在歷史列表,受HISTIGNORE的價(jià)值限制。未測(cè)試多行復(fù)合命令的第二行和后續(xù)行,并將其添加到歷史記錄中無(wú)論HISTCONTROL的值如何。HISTFILE保存命令歷史記錄的文件的名稱(請(qǐng)參閱下面的歷史記錄)。默認(rèn)值為?/ .bash_history。如果未設(shè)置,則在保存時(shí)不保存命令歷史記錄交互式shell退出。HISTFILESIZE歷史文件中包含的最大行數(shù)。為此變量分配值時(shí),如有必要,通過(guò)刪除最舊的文件來(lái)截?cái)鄽v史文件條目,包含不超過(guò)該行數(shù)。默認(rèn)值為500.在交互式寫入歷史文件后,歷史文件也會(huì)被截?cái)酁榇舜笮hell退出。HISTIGNORE以冒號(hào)分隔的模式列表,用于決定應(yīng)在歷史列表中保存哪些命令行。每個(gè)模式都錨定在行的開頭必須匹配整行(不附加隱式`*')。在應(yīng)用HISTCONTROL指定的檢查后,將針對(duì)該行測(cè)試每個(gè)模式。在阿迪-對(duì)于正常的shell模式匹配字符,`&'匹配以前的歷史記錄行。`&'可以使用反斜杠進(jìn)行轉(zhuǎn)義; 之前刪除了反斜杠嘗試比賽。多行復(fù)合命令的第二行和后續(xù)行未經(jīng)過(guò)測(cè)試,無(wú)論HISTIG的值如何,都會(huì)添加到歷史記錄中NORE。HISTSIZE命令歷史記錄中要記住的命令數(shù)(請(qǐng)參閱下面的歷史記錄)。默認(rèn)值為500。HISTTIMEFORMAT如果此變量已設(shè)置且不為null,則其值將用作strftime(3)的格式字符串,以打印與由此顯示的每個(gè)歷史記錄條目關(guān)聯(lián)的時(shí)間戳。歷史建立。如果設(shè)置了此變量,則會(huì)將時(shí)間戳記寫入歷史記錄文件,以便可以跨shell會(huì)話保留它們。這使用了歷史評(píng)論用于區(qū)分時(shí)間戳與其他歷史記錄行的字符。HOME當(dāng)前用戶的主目錄; cd builtin命令的默認(rèn)參數(shù)。執(zhí)行波浪擴(kuò)展時(shí)也使用此變量的值。HOSTFILE包含與/ etc / hosts格式相同的文件名,當(dāng)shell需要完成主機(jī)名時(shí)應(yīng)該讀取該文件的名稱。可能的主機(jī)名列表 - 在shell運(yùn)行時(shí)可能會(huì)改變tions; 更改值后,下次嘗試完成主機(jī)名時(shí),bash會(huì)將新文件的內(nèi)容添加到現(xiàn)有清單。如果設(shè)置了HOSTFILE但沒有值,或者沒有命名可讀文件,bash會(huì)嘗試讀取/ etc / hosts以獲取可能的主機(jī)名列表落成。取消設(shè)置HOSTFILE時(shí),將清除主機(jī)名列表。IFS內(nèi)部字段分隔符,用于在擴(kuò)展后進(jìn)行單詞拆分,并使用read builtin命令將行拆分為單詞。默認(rèn)值為``<空間> <標(biāo)簽> <換行符> ''。IGNOREEOF控制交互式shell在接收EOF字符作為唯一輸入時(shí)的操作。如果設(shè)置,則該值是必須的連續(xù)EOF字符數(shù)在bash退出之前輸入作為輸入行的第一個(gè)字符。如果變量存在但沒有數(shù)值,或者沒有值,則默認(rèn)值為10.如果它不存在,EOF表示shell的輸入結(jié)束。INPUTRCreadline啟動(dòng)文件的文件名,覆蓋默認(rèn)的?/ .inputrc(參見下面的READLINE)。LANG用于確定未使用以LC_開頭的變量專門選擇的任何類別的區(qū)域設(shè)置類別。LC_ALL此變量將覆蓋LANG的值以及指定區(qū)域設(shè)置類別的任何其他LC_變量。LC_COLLATE此變量確定排序路徑名擴(kuò)展結(jié)果時(shí)使用的歸類順序,并確定范圍表達(dá)式的行為,等價(jià)類和路徑名擴(kuò)展和模式匹配中的整理序列。LC_CTYPE此變量確定字符的解釋以及路徑名擴(kuò)展和模式匹配中字符類的行為。LC_MESSAGES此變量確定用于轉(zhuǎn)換前綴為$的雙引號(hào)字符串的語(yǔ)言環(huán)境。LC_NUMERIC此變量確定用于數(shù)字格式的區(qū)域設(shè)置類別。LINES select復(fù)合命令用于確定打印選擇列表的列長(zhǎng)度。收到SIGWINCH后自動(dòng)設(shè)置。MAIL如果此參數(shù)設(shè)置為文件或目錄名稱且未設(shè)置MAILPATH變量,則bash會(huì)通知用戶郵件到達(dá)指定文件或Maildir格式目錄。MAILCHECK指定bash檢查郵件的頻率(以秒為單位)。默認(rèn)值為60秒。當(dāng)需要檢查郵件時(shí),shell會(huì)在顯示主郵件之前執(zhí)行此操作提示。如果未設(shè)置此變量,或?qū)⒃撝翟O(shè)置為大于或等于零的數(shù)值,則shell將禁用郵件檢查。MAILPATH要檢查郵件的以冒號(hào)分隔的文件名列表。當(dāng)郵件到達(dá)特定文件時(shí)要打印的消息可以通過(guò)分離文件來(lái)指定帶有“?”的消息的名稱。在消息文本中使用時(shí),$ _將擴(kuò)展為當(dāng)前郵件文件的名稱。例:MAILPATH ='/ var / mail / bfox?“你有郵件”:?/ shell-mail?“$ _有郵件!”'Bash為此變量提供默認(rèn)值,但它使用的用戶郵件文件的位置取決于系統(tǒng)(例如,/ var / mail / $ USER)。OPTERR如果設(shè)置為值1,bash將顯示getopts builtin命令生成的錯(cuò)誤消息(請(qǐng)參閱下面的SHELL BUILTIN命令)。OPTERR每次初始化為1調(diào)用shell或執(zhí)行shell腳本。PATH命令的搜索路徑。它是以冒號(hào)分隔的目錄列表,其中shell查找命令(請(qǐng)參閱下面的命令執(zhí)行)。零長(zhǎng)度(null)PATH值中的目錄名稱表示當(dāng)前目錄。空目錄名稱可以顯示為兩個(gè)相鄰的冒號(hào),或者作為初始冒號(hào)或尾隨冒號(hào)。該默認(rèn)路徑是系統(tǒng)相關(guān)的,由安裝bash的管理員設(shè)置。一個(gè)常見的值是``/ usr / gnu / bin:/ usr / local / bin:/ usr / ucb:/ bin:/ usr / bin''。POSIXLY_CORRECT如果此變量在bash啟動(dòng)時(shí)處于環(huán)境中,則shell在讀取啟動(dòng)文件之前進(jìn)入posix模式,就像--posix調(diào)用選項(xiàng)已經(jīng)提供。如果在shell運(yùn)行時(shí)設(shè)置它,則bash啟用posix模式,就像命令set -o posix已被執(zhí)行一樣。PROMPT_COMMAND如果設(shè)置,則在發(fā)出每個(gè)主要提示之前將該值作為命令執(zhí)行。PROMPT_DIRTRIM如果設(shè)置為大于零的數(shù)字,則該值將用作展開\ w和\ W提示字符串轉(zhuǎn)義時(shí)要保留的尾隨目錄組件的數(shù)量(見下面的提示)。刪除的字符將替換為省略號(hào)。PS1此參數(shù)的值已擴(kuò)展(請(qǐng)參閱下面的PROMPTING)并用作主要提示字符串。默認(rèn)值為``\ s- \ v \ $''。PS2此參數(shù)的值與PS1一樣展開,并用作輔助提示字符串。默認(rèn)為“>”。PS3此參數(shù)的值用作select命令的提示符(請(qǐng)參閱上面的SHELL GRAMMAR)。PS4此參數(shù)的值與PS1一樣展開,并且在執(zhí)行跟蹤期間顯示每個(gè)命令bash之前打印該值。PS4的第一個(gè)角色必要時(shí)多次復(fù)制以指示多個(gè)間接級(jí)別。默認(rèn)為“+”。SHELL shell的完整路徑名保存在此環(huán)境變量中。如果在shell啟動(dòng)時(shí)未設(shè)置它,bash會(huì)為其分配當(dāng)前的完整路徑名用戶的登錄shell。時(shí)間格式此參數(shù)的值用作格式字符串,指定應(yīng)如何顯示以時(shí)間保留字為前綴的管道的時(shí)序信息。%字符引入了一個(gè)轉(zhuǎn)義為時(shí)間值或其他信息的轉(zhuǎn)義序列。逃逸序列及其含義如下; 該大括號(hào)表示可選部分。%%一個(gè)字面%。%[p] [l] R經(jīng)過(guò)的時(shí)間,以秒為單位。%[p] [l] U在用戶模式下花費(fèi)的CPU秒數(shù)。%[p] [l] S在系統(tǒng)模式下花費(fèi)的CPU秒數(shù)。%P CPU百分比,計(jì)算方式為(%U +%S)/%R。可選p是指定精度的數(shù)字,小數(shù)點(diǎn)后的小數(shù)位數(shù)。值為0會(huì)導(dǎo)致小數(shù)點(diǎn)或分?jǐn)?shù)無(wú)效放。最多可以指定小數(shù)點(diǎn)后的三個(gè)位置; p大于3的值更改為3.如果未指定p,則使用值3。可選l指定MMmSS.FFs格式的更長(zhǎng)格式,包括分鐘。p的值確定是否包括該分?jǐn)?shù)。如果未設(shè)置此變量,則bash的行為就像它具有$'\ nreal \ t%3lR \ nuser \ t%3lU \ nsys%3lS'的值。如果該值為null,則不顯示任何計(jì)時(shí)信息。一個(gè)顯示格式字符串時(shí)添加尾隨換行符。TMOUT如果設(shè)置為大于零的值,則TMOUT將被視為讀取內(nèi)置的默認(rèn)超時(shí)。如果在TMOUT之后輸入未到達(dá),則select命令終止輸入來(lái)自終端的秒數(shù)。在交互式shell中,該值被解釋為在發(fā)出主要數(shù)據(jù)后等待輸入的秒數(shù)提示。如果輸入未到達(dá),Bash會(huì)在等待該秒數(shù)后終止。TMPDIR如果設(shè)置,bash使用其值作為bash為shell使用創(chuàng)建臨時(shí)文件的目錄的名稱。auto_resume此變量控制shell如何與用戶和作業(yè)控件交互。如果設(shè)置了此變量,則不帶重定向的單字簡(jiǎn)單命令將被視為恢復(fù)現(xiàn)有停工的候選人。療法e為無(wú)歧義允許; 如果有一個(gè)以鍵入的字符串開頭的多個(gè)作業(yè),則該作業(yè)最多最近訪問被選中。在此上下文中,已停止作業(yè)的名稱是用于啟動(dòng)它的命令行。如果設(shè)置為exact,則必須提供字符串完全匹配已停止作業(yè)的名稱; 如果設(shè)置為substring,則提供的字符串需要匹配已停止作業(yè)名稱的子字符串。子串值pro-提供類似于%的功能?作業(yè)標(biāo)識(shí)符(參見下面的JOB CONTROL)。如果設(shè)置為任何其他值,則提供的字符串必須是已停止作業(yè)的前綴名稱; 這提供了類似于%字符串作業(yè)標(biāo)識(shí)符的功能。histchars控制歷史擴(kuò)展和標(biāo)記化的兩個(gè)或三個(gè)字符(參見下面的歷史擴(kuò)展)。第一個(gè)字符是歷史擴(kuò)展字符,表示歷史擴(kuò)展開始的字符,通常是“!”。第二個(gè)字符是快速替換字符,用作速記重新運(yùn)行上一個(gè)輸入的命令,在命令中用一個(gè)字符串替換另一個(gè)字符串。默認(rèn)為“^”。可選的第三個(gè)字符是字符表示當(dāng)作為單詞的第一個(gè)字符找到時(shí),該行的其余部分是注釋,通常是“#”。歷史評(píng)論字符導(dǎo)致歷史記錄替代要跳過(guò)該線上剩余的單詞的tution。它不一定會(huì)導(dǎo)致shell解析器將該行的其余部分視為注釋。
數(shù)組 ? Bash提供一維索引和關(guān)聯(lián)數(shù)組變量。任何變量都可以用作索引數(shù)組; declare builtin將顯式聲明一個(gè)數(shù)組。 ? 對(duì)數(shù)組的大小沒有最大限制,也沒有要求成員被索引或連續(xù)分配的要求。索引數(shù)組使用整數(shù)引用 ? (包括算術(shù)表達(dá)式)并且基于零; 使用任意字符串引用關(guān)聯(lián)數(shù)組。
如果使用語(yǔ)法name [subscript] = value分配任何變量,則會(huì)自動(dòng)創(chuàng)建索引數(shù)組。下標(biāo)被視為算術(shù)表達(dá)式必須評(píng)估一個(gè)數(shù)字。如果下標(biāo)求值為小于零的數(shù)字,則將其用作大于數(shù)組最大索引的偏移量(因此下標(biāo)為-1)指的是數(shù)組的最后一個(gè)元素)。要顯式聲明索引數(shù)組,請(qǐng)使用declare -a name(請(qǐng)參閱下面的SHELL BUILTIN命令)。聲明-a name [下標(biāo)]也是公認(rèn); 下標(biāo)被忽略。使用declare -A name創(chuàng)建關(guān)聯(lián)數(shù)組。可以使用declare和readonly builtins為數(shù)組變量指定屬性。每個(gè)屬性都適用于數(shù)組的所有成員。數(shù)組被賦值為使用格式名稱=(value1 ... valuen)的復(fù)合賦值,其中每個(gè)值的格式為[subscript] = string。索引數(shù)組賦值沒有需要括號(hào)和下標(biāo)。分配給索引數(shù)組時(shí),如果提供了可選括號(hào)和下標(biāo),則將該索引分配給; 否則指數(shù)分配的元素是語(yǔ)句分配的最后一個(gè)索引加一。索引從零開始。分配給關(guān)聯(lián)數(shù)組時(shí),下標(biāo)是必需的。聲明內(nèi)置也接受此語(yǔ)法。可以使用上面引入的名稱[subscript] = value語(yǔ)法來(lái)指定各個(gè)數(shù)組元素。可以使用$ {name [subscript]}引用數(shù)組的任何元素。需要大括號(hào)以避免與路徑名擴(kuò)展沖突。如果下標(biāo)是@或*,那么這個(gè)詞擴(kuò)展到名稱的所有成員。這些下標(biāo)僅在單詞出現(xiàn)在雙引號(hào)內(nèi)時(shí)有所不同。如果單詞是雙引號(hào),$ {name [*]}會(huì)擴(kuò)展為單個(gè)單詞將每個(gè)數(shù)組成員的值用IFS特殊變量的第一個(gè)字符分隔,$ {name [@]}將name的每個(gè)元素展開為一個(gè)單獨(dú)的單詞。當(dāng)有沒有數(shù)組成員,$ {name [@]}擴(kuò)展為空。如果雙引號(hào)擴(kuò)展發(fā)生在一個(gè)單詞中,則第一個(gè)參數(shù)的擴(kuò)展與開頭連接原始單詞的一部分,最后一個(gè)參數(shù)的擴(kuò)展與原始單詞的最后一部分相連。這類似于特殊的擴(kuò)展參數(shù)*和@(參見上面的特殊參數(shù))。$ {#name [下標(biāo)]}擴(kuò)展為$ {name [下標(biāo)]}的長(zhǎng)度。如果下標(biāo)是*或@,則擴(kuò)展名為數(shù)組中的元素。引用不帶下標(biāo)的數(shù)組變量等效于引用下標(biāo)為0的數(shù)組。如果已為下標(biāo)指定值,則認(rèn)為數(shù)組變量已設(shè)置。空字符串是有效值。未設(shè)置的內(nèi)置函數(shù)用于銷毀數(shù)組。unset name [subscript]在索引下標(biāo)處銷毀數(shù)組元素。必須注意避免引起不必要的副作用通過(guò)路徑名擴(kuò)展。取消設(shè)置名稱,其中name是數(shù)組,或取消設(shè)置name [subscript],其中下標(biāo)為*或@,刪除整個(gè)數(shù)組。declare,local和readonly內(nèi)置函數(shù)都接受-a選項(xiàng)來(lái)指定索引數(shù)組,并使用-A選項(xiàng)來(lái)指定關(guān)聯(lián)數(shù)組。如果提供了兩個(gè)選項(xiàng),-A優(yōu)先。read builtin接受-a選項(xiàng),將從標(biāo)準(zhǔn)輸入讀取的單詞列表分配給數(shù)組。set和declare內(nèi)置顯示數(shù)組值以允許它們作為賦值重用的方式。
擴(kuò)張 ? 在將命令行拆分為單詞后,將在命令行上執(zhí)行擴(kuò)展。進(jìn)行了七種擴(kuò)展:支撐擴(kuò)展,波浪擴(kuò)展,參數(shù)和 ? 變量擴(kuò)展,命令替換,算術(shù)擴(kuò)展,字拆分和路徑名擴(kuò)展。
擴(kuò)展的順序是:括號(hào)擴(kuò)展,波浪擴(kuò)展,參數(shù),變量和算術(shù)擴(kuò)展以及命令替換(以從左到右的方式完成),單詞拆分和路徑名擴(kuò)展。在可以支持它的系統(tǒng)上,還有一個(gè)額外的擴(kuò)展可用:進(jìn)程替換。只有大括號(hào)擴(kuò)展,分詞和路徑名擴(kuò)展才能改變擴(kuò)展的單詞數(shù); 其他擴(kuò)展將單個(gè)單詞擴(kuò)展為單個(gè)單詞。該唯一的例外是“$ @”和“$ {name [@]}”的擴(kuò)展,如上所述(參見PARAMETERS)。
支持?jǐn)U張 ? 支撐擴(kuò)展是一種可以生成任意字符串的機(jī)制。此機(jī)制類似于路徑名擴(kuò)展,但生成的文件名不需要存在。 ? 要擴(kuò)展的模式采用可選前導(dǎo)碼的形式,后跟一系列以逗號(hào)分隔的字符串或一對(duì)括號(hào)之間的序列表達(dá)式, ? 然后是可選的附言。前導(dǎo)碼以大括號(hào)中包含的每個(gè)字符串為前綴,然后將postscript附加到每個(gè)結(jié)果字符串, ? 從左到右擴(kuò)展。
Brace擴(kuò)展可以嵌套。每個(gè)展開的字符串的結(jié)果都沒有排序; 保持從左到右的順序。例如,{d,c,b} e擴(kuò)展為“ade ace abe”。序列表達(dá)式采用{x..y [.. incr]}的形式,其中x和y是整數(shù)或單個(gè)字符,incr是可選的增量,是整數(shù)。當(dāng)整數(shù)如果提供,表達(dá)式將擴(kuò)展到x和y之間的每個(gè)數(shù)字,包括0和y。提供的整數(shù)可以以0為前綴,以強(qiáng)制每個(gè)術(shù)語(yǔ)具有相同的寬度。什么時(shí)候無(wú)論是x還是y都以零開頭,shell會(huì)嘗試強(qiáng)制所有生成的術(shù)語(yǔ)包含相同數(shù)量的數(shù)字,必要時(shí)填充零填充。當(dāng)人物是如果提供,表達(dá)式將按字典順序在x和y之間擴(kuò)展到每個(gè)字符。請(qǐng)注意,x和y必須屬于同一類型。當(dāng)增量是支持合計(jì),它被用作每個(gè)術(shù)語(yǔ)之間的差異。根據(jù)需要,默認(rèn)增量為1或-1。在任何其他擴(kuò)展之前執(zhí)行大括號(hào)擴(kuò)展,并且在結(jié)果中保留對(duì)其他擴(kuò)展特殊的任何字符。這是嚴(yán)格的文字。Bash沒有將任何句法解釋應(yīng)用于擴(kuò)展的上下文或大括號(hào)之間的文本。正確形成的大括號(hào)擴(kuò)展必須包含不帶引號(hào)的開括號(hào)和右大括號(hào),以及至少一個(gè)不帶引號(hào)的逗號(hào)或有效的序列表達(dá)式。任何錯(cuò)誤形成支撐擴(kuò)展保持不變。一個(gè){或者,可以用反斜杠引用,以防止它被視為括號(hào)表達(dá)式的一部分。避免與參數(shù)沖突擴(kuò)展,字符串$ {不被認(rèn)為有資格進(jìn)行大括號(hào)擴(kuò)展。當(dāng)要生成的字符串的公共前綴比上例中的更長(zhǎng)時(shí),此構(gòu)造通常用作速記:mkdir / usr / local / src / bash / {old,new,dist,bugs}要么chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}支撐擴(kuò)展引入了與sh的歷史版本的輕微不兼容。sh不會(huì)特別當(dāng)它們作為單詞的一部分出現(xiàn)時(shí)打開或關(guān)閉括號(hào),并將它們保存在輸出中。由于大括號(hào)擴(kuò)展,Bash從單詞中刪除大括號(hào)。例如,輸入sh作為文件{1,2}的單詞在中顯示相同輸出。在通過(guò)bash擴(kuò)展后,相同的單詞輸出為file1 file2。如果需要與sh嚴(yán)格兼容,請(qǐng)使用+ B選項(xiàng)啟動(dòng)bash或禁用大括號(hào)使用set命令的+ B選項(xiàng)進(jìn)行擴(kuò)展(參見下面的SHELL BUILTIN命令)。
Tilde擴(kuò)張 ? 如果一個(gè)單詞以不帶引號(hào)的波形符(`?')開頭,則第一個(gè)不帶引號(hào)的斜杠之前的所有字符(或者所有字符,如果沒有未加引號(hào)的斜杠)都是 ? 支持波浪號(hào)前綴。如果沒有引用tilde-prefix中的字符,則代字號(hào)后面的波浪號(hào)前綴中的字符將被視為可能的登錄名 ? 名稱。如果此登錄名是空字符串,則將波形符替換為shell參數(shù)HOME的值。如果未設(shè)置HOME,則執(zhí)行用戶的主目錄 ? 相反,shell被替換。否則,tilde-prefix將替換為與指定登錄名關(guān)聯(lián)的主目錄。
如果tilde-prefix是“?+”,則shell變量PWD的值將替換tilde-prefix。如果tilde-prefix是“? - ”,則shell變量OLDPWD的值(如果是)設(shè)置,被替換。如果在波浪號(hào)前綴中波浪號(hào)后面的字符由數(shù)字N組成,可選地以“+”或“ - ”為前綴,則替換波形符前綴使用目錄堆棧中的相應(yīng)元素,因?yàn)樗鼘⒁允褂胻ilde-prefix作為參數(shù)調(diào)用的內(nèi)置結(jié)構(gòu)顯示。如果字符跟隨 - 在波浪號(hào)前綴中的波浪號(hào)由一個(gè)沒有前導(dǎo)“+”或“ - ”的數(shù)字組成,假定為“+”。如果登錄名無(wú)效,或者代字號(hào)擴(kuò)展失敗,則該字不變。檢查每個(gè)變量賦值是否緊跟在:或第一個(gè)=之后的未加引號(hào)的波浪號(hào)前綴。在這些情況下,還執(zhí)行波浪擴(kuò)展。所以,在PATH,MAILPATH和CDPATH的賦值中,可以使用帶有波浪號(hào)的文件名,shell會(huì)分配擴(kuò)展值。
參數(shù)擴(kuò)展 ? `$'字符引入了參數(shù)擴(kuò)展,命令替換或算術(shù)擴(kuò)展。要展開的參數(shù)名稱或符號(hào)可以用大括號(hào)括起來(lái) ? 是可選的,但用于保護(hù)變量以便從緊跟在其后面的字符擴(kuò)展,這可以被解釋為名稱的一部分。
當(dāng)使用大括號(hào)時(shí),匹配的結(jié)束括號(hào)是第一個(gè)沒有被反斜杠或帶引號(hào)的字符串轉(zhuǎn)義的`}',而不是嵌入式算術(shù)擴(kuò)展中的,強(qiáng)制替換或參數(shù)擴(kuò)展。$ {}參數(shù)參數(shù)的值被替換。當(dāng)參數(shù)是具有多個(gè)數(shù)字的位置參數(shù)或參數(shù)后跟a時(shí),需要括號(hào)不得將其解釋為其名稱的一部分的字符。如果參數(shù)的第一個(gè)字符是感嘆號(hào)(!),則引入變量間接的級(jí)別。Bash使用從其余部分形成的變量的值參數(shù)作為變量的名稱; 然后展開此變量,并將該值用于替換的其余部分,而不是參數(shù)本身的值。這個(gè)被稱為間接擴(kuò)張。例外情況是下面描述的$ {!prefix *}和$ {!name [@]}的擴(kuò)展。感嘆號(hào)必須緊跟著左支撐以引入間接。在下面的每種情況中,單詞都受波形擴(kuò)展,參數(shù)擴(kuò)展,命令替換和算術(shù)擴(kuò)展的影響。當(dāng)不執(zhí)行子字符串?dāng)U展時(shí),使用下面記錄的表單,bash測(cè)試未設(shè)置或?yàn)閚ull的參數(shù)。省略冒號(hào)導(dǎo)致僅對(duì)a進(jìn)行測(cè)試未設(shè)置的參數(shù)。$ {參數(shù):-word}使用默認(rèn)值。如果參數(shù)未設(shè)置或?yàn)閚ull,則替換單詞的擴(kuò)展。否則,參數(shù)的值將被替換。$ {參數(shù):=詞}分配默認(rèn)值。如果參數(shù)未設(shè)置或?yàn)閚ull,則將字的擴(kuò)展分配給參數(shù)。然后替換參數(shù)的值。位置參數(shù) - 不能以這種方式分配ters和特殊參數(shù)。$ {參數(shù):?單詞}如果為空或未設(shè)置則顯示錯(cuò)誤。如果參數(shù)為null或未設(shè)置,則將單詞的擴(kuò)展(或者如果單詞不存在則為該效果的消息)寫入標(biāo)準(zhǔn)錯(cuò)誤和shell,如果不是交互式,則退出。否則,參數(shù)的值將被替換。$ {參數(shù):+單詞}使用替代值。如果參數(shù)為null或未設(shè)置,則不替換任何內(nèi)容,否則將替換word的擴(kuò)展。$ {參數(shù):偏移}$ {參數(shù):偏移量:長(zhǎng)度}子串?dāng)U展。從offset指定的字符開始擴(kuò)展為參數(shù)的最大長(zhǎng)度字符。如果省略length,則展開為子字符串參數(shù)從offset指定的字符開始。length和offset是算術(shù)表達(dá)式(參見下面的ARITHMETIC EVALUATION)。如果偏移評(píng)估為a如果數(shù)字小于零,則該值用作參數(shù)值末尾的偏移量。如果length的計(jì)算結(jié)果小于零,且參數(shù)不是@而不是索引或關(guān)聯(lián)數(shù)組,它被解釋為從參數(shù)值的末尾而不是多個(gè)字符的偏移,并且擴(kuò)展是兩個(gè)偏移之間的字符。如果參數(shù)為@,則結(jié)果是從offset開始的長(zhǎng)度位置參數(shù)。如果參數(shù)是索引數(shù)組名稱子由@或*編寫,結(jié)果是以$ {parameter [offset]}開頭的數(shù)組的長(zhǎng)度成員。相對(duì)于大于1的負(fù)偏移指定數(shù)組的最大索引。應(yīng)用于關(guān)聯(lián)數(shù)組的子串?dāng)U展會(huì)產(chǎn)生未定義的結(jié)果。請(qǐng)注意,必須分隔負(fù)偏移量從冒號(hào)到至少一個(gè)空間,以避免與: - 擴(kuò)展混淆。除非使用位置參數(shù),否則子串索引是從零開始的在哪種情況下,索引默認(rèn)從1開始。如果offset為0,并且使用了位置參數(shù),則會(huì)在列表中添加$ 0作為前綴。$ {!前綴*}$ {!前綴@}名稱匹配前綴。擴(kuò)展為名稱以prefix開頭的變量的名稱,由IFS特殊變量的第一個(gè)字符分隔。使用@時(shí)并且擴(kuò)展名出現(xiàn)在雙引號(hào)內(nèi),每個(gè)變量名稱都會(huì)擴(kuò)展為單獨(dú)的單詞。$ {!名稱[@]}$ {!名稱[*]}數(shù)組鍵列表。如果name是數(shù)組變量,則展開到名稱中指定的數(shù)組索引(鍵)列表。如果name不是數(shù)組,則如果設(shè)置了name,則展開為0否則為null。當(dāng)使用@并且擴(kuò)展名出現(xiàn)在雙引號(hào)內(nèi)時(shí),每個(gè)鍵都會(huì)擴(kuò)展為單獨(dú)的單詞。$ {#參數(shù)}參數(shù)長(zhǎng)度。參數(shù)值的字符長(zhǎng)度被替換。如果參數(shù)是*或@,則替換值是位置參數(shù)的數(shù)量 - ETERS。如果parameter是由*或@下標(biāo)的數(shù)組名,則替換的值是數(shù)組中元素的數(shù)量。$ {參數(shù)#字}$ {參數(shù)##字}刪除匹配的前綴模式。這個(gè)詞被擴(kuò)展為產(chǎn)生一個(gè)模式,就像路徑名擴(kuò)展一樣。如果模式匹配參數(shù)值的開頭那么,擴(kuò)展的結(jié)果是參數(shù)的擴(kuò)展值,具有最短的匹配模式(“#”情況)或最長(zhǎng)的匹配模式(``##''case)已刪除。如果參數(shù)是@或*,則模式刪除操作依次應(yīng)用于每個(gè)位置參數(shù),并且擴(kuò)展是結(jié)果列表。如果參數(shù)是使用@或*下標(biāo)的數(shù)組變量,則模式刪除操作依次應(yīng)用于數(shù)組的每個(gè)成員,并且擴(kuò)展為結(jié)果清單。$ {參數(shù)%字}$ {參數(shù)%%詞}刪除匹配的后綴模式。這個(gè)詞被擴(kuò)展為產(chǎn)生一個(gè)模式,就像路徑名擴(kuò)展一樣。如果模式匹配展開的尾部參數(shù)的值,那么擴(kuò)展的結(jié)果是具有最短匹配模式(“%”的情況)或最長(zhǎng)匹配的參數(shù)的擴(kuò)展值模式(``%%''案例)已刪除。如果參數(shù)是@或*,則模式刪除操作依次應(yīng)用于每個(gè)位置參數(shù),并且擴(kuò)展為結(jié)果清單。如果參數(shù)是使用@或*下標(biāo)的數(shù)組變量,則模式刪除操作依次應(yīng)用于數(shù)組的每個(gè)成員,并且擴(kuò)展是結(jié)果列表。$ {參數(shù)/模式/字符串}模式替換。擴(kuò)展模式以生成模式,就像路徑名擴(kuò)展一樣。參數(shù)被擴(kuò)展并且模式與其最長(zhǎng)匹配value被替換為string。如果pattern以/開頭,則pattern的所有匹配都將替換為string。通常只替換第一場(chǎng)比賽。如果模式以#開頭,它必須在參數(shù)的擴(kuò)展值的開頭匹配。如果模式以%開頭,則它必須在參數(shù)的擴(kuò)展值的末尾匹配之三。如果string為null,則刪除pattern的匹配,并且可以省略/ following模式。如果參數(shù)是@或*,則應(yīng)用替換操作每個(gè)位置參數(shù)依次,擴(kuò)展是結(jié)果列表。如果參數(shù)是使用@或*下標(biāo)的數(shù)組變量,則替換操作為依次應(yīng)用于數(shù)組的每個(gè)成員,擴(kuò)展是結(jié)果列表。$ {參數(shù)M模式}$ {參數(shù)^^模式}$ {參數(shù),模式}$ {參數(shù),,模式}案例修改。此擴(kuò)展修改參數(shù)中字母字符的大小寫。擴(kuò)展模式以生成模式,就像在路徑名擴(kuò)展中一樣錫永。^運(yùn)算符將匹配模式的小寫字母轉(zhuǎn)換為大寫; ,運(yùn)算符將匹配的大寫字母轉(zhuǎn)換為小寫。^^和,,擴(kuò)展 - sions轉(zhuǎn)換擴(kuò)展值中的每個(gè)匹配字符; ^和,擴(kuò)展匹配并僅轉(zhuǎn)換擴(kuò)展值中的第一個(gè)字符。如果模式是省略,它被視為一個(gè)?,它匹配每個(gè)字符。如果參數(shù)是@或*,則將大小寫修改操作應(yīng)用于每個(gè)位置參數(shù)轉(zhuǎn),擴(kuò)展是結(jié)果列表。如果參數(shù)是使用@或*下標(biāo)的數(shù)組變量,則將大小寫修改操作應(yīng)用于每個(gè)成員依次是數(shù)組,擴(kuò)展是結(jié)果列表。
命令替換 ? 命令替換允許輸出命令來(lái)替換命令名稱。有兩種形式:
$(命令)要么`command`Bash通過(guò)執(zhí)行命令并用命令的標(biāo)準(zhǔn)輸出替換命令替換來(lái)執(zhí)行擴(kuò)展,刪除任何尾隨換行符。嵌入式換行不會(huì)被刪除,但在分詞時(shí)可能會(huì)刪除它們。命令替換$(cat文件)可以用等效但更快的$(<file)替換。當(dāng)使用舊式反引號(hào)形式的替換時(shí),反斜杠保留其字面含義,除非后跟$,`或\。第一個(gè)反引號(hào)前面沒有反斜杠終止命令替換。使用$(命令)表單時(shí),括號(hào)之間的所有字符組成命令; 沒有人特別對(duì)待。命令替換可以嵌套。要在使用反引號(hào)形式時(shí)進(jìn)行嵌套,請(qǐng)使用反斜杠轉(zhuǎn)義內(nèi)部反引號(hào)。如果替換出現(xiàn)在雙引號(hào)內(nèi),則不會(huì)對(duì)結(jié)果執(zhí)行單詞拆分和路徑名擴(kuò)展。
算術(shù)擴(kuò)展 ? 算術(shù)擴(kuò)展允許評(píng)估算術(shù)表達(dá)式和結(jié)果的替換。算術(shù)擴(kuò)展的格式是:
$((表達(dá)式))該表達(dá)式被視為在雙引號(hào)內(nèi),但括號(hào)內(nèi)的雙引號(hào)未被特別處理。表達(dá)式中的所有標(biāo)記都經(jīng)歷了參數(shù) - 擴(kuò)展,字符串?dāng)U展,命令替換和引用刪除。算術(shù)擴(kuò)展可以嵌套。評(píng)估根據(jù)算術(shù)評(píng)估下列出的規(guī)則進(jìn)行。如果表達(dá)式無(wú)效,bash會(huì)打印一條消息,指示失敗并且沒有子發(fā)生了侮辱。
流程替代 ? 支持命名管道(FIFO)的系統(tǒng)或命名打開文件的/ dev / fd方法支持進(jìn)程替換。它采用<(list)或>(list)的形式。該 ? 進(jìn)程列表運(yùn)行時(shí)其輸入或輸出連接到FIFO或/ dev / fd中的某個(gè)文件。此文件的名稱作為參數(shù)傳遞給當(dāng)前命令作為結(jié)果 ? 擴(kuò)張。如果使用>(列表)表單,寫入文件將提供列表輸入。如果使用<(list)表單,則應(yīng)讀取作為參數(shù)傳遞的文件 ? 獲取列表的輸出。
可用時(shí),進(jìn)程替換與參數(shù)和變量擴(kuò)展,命令替換和算術(shù)擴(kuò)展同時(shí)執(zhí)行。
單詞分裂 ? shell掃描參數(shù)擴(kuò)展,命令替換和算術(shù)擴(kuò)展的結(jié)果,這些結(jié)果在雙引號(hào)內(nèi)沒有出現(xiàn)用于分詞。
shell將IFS的每個(gè)字符視為分隔符,并將其他擴(kuò)展的結(jié)果拆分為這些字符上的單詞。如果未設(shè)置IFS,或其值為正好<space> <tab> <newline>,默認(rèn)情況下,忽略前面擴(kuò)展結(jié)果開頭和結(jié)尾的<space>,<tab>和<newline>序列,并且任何不在開頭或結(jié)尾的IFS字符序列都用于分隔單詞。如果IFS的值不是默認(rèn)值,那么空格字符的序列 - 只要空白字符的值為IFS(IFS空白字符),就會(huì)在單詞的開頭和結(jié)尾忽略ters空格和制表符。任何角色在IFS中,不是IFS空格,以及任何相鄰的IFS空白字符,用于分隔字段。一系列IFS空白字符也被視為一個(gè)分隔符國(guó)際熱核實(shí)驗(yàn)堆。如果IFS的值為null,則不會(huì)發(fā)生分詞。保留顯式空參數(shù)(“”或“”)。將刪除由于沒有值的參數(shù)的擴(kuò)展而產(chǎn)生的不帶引號(hào)的隱式空參數(shù)。如果參數(shù) - 沒有值的ter在雙引號(hào)內(nèi)展開,null參數(shù)結(jié)果并保留。請(qǐng)注意,如果不發(fā)生擴(kuò)展,則不執(zhí)行拆分。
路徑名擴(kuò)展 ? 分詞后,除非設(shè)置了-f選項(xiàng),否則bash會(huì)掃描每個(gè)單詞中的字符*,?和[。如果出現(xiàn)其中一個(gè)字符,則認(rèn)為該字 ? 作為模式,并替換為與模式匹配的按字母順序排序的文件名列表。如果找不到匹配的文件名,則shell選項(xiàng)nullglob不是 ? 啟用后,單詞保持不變。如果設(shè)置了nullglob選項(xiàng),并且未找到匹配項(xiàng),則刪除該單詞。如果設(shè)置了failglob shell選項(xiàng),則不匹配 ? 發(fā)現(xiàn),打印出錯(cuò)誤消息并且不執(zhí)行該命令。如果啟用了shell選項(xiàng)nocaseglob,則執(zhí)行匹配而不考慮alpha-的情況 ? betic characters。當(dāng)一個(gè)模式用于路徑名擴(kuò)展時(shí),必須明確匹配名稱開頭或緊跟斜杠后面的字符“。”。 ? 除非設(shè)置了shell選項(xiàng)dotglob。匹配路徑名時(shí),必須始終明確匹配斜杠字符。在其他情況下,不會(huì)處理“。”字符 ? 特別。有關(guān)nocaseglob,nullglob,failglob和dotglob shell選項(xiàng)的說(shuō)明,請(qǐng)參閱SHELL BUILTIN COMMANDS下面的shopt說(shuō)明。
GLOBIGNORE shell變量可用于限制與模式匹配的文件名集。如果設(shè)置了GLOBIGNORE,則每個(gè)匹配的文件名也匹配其中一個(gè)GLOBIGNORE中的模式將從匹配列表中刪除。設(shè)置GLOBIGNORE時(shí),文件名“。”和“..”將始終被忽略,而不是null。但是,設(shè)置GLO-BIGNORE到非null值具有啟用dotglob shell選項(xiàng)的效果,因此所有其他以“。”開頭的文件名都將匹配。獲得舊的行為忽略以“。”開頭的文件名,使“。*”成為GLOBIGNORE中的一種模式。未設(shè)置GLOBIGNORE時(shí),將禁用dotglob選項(xiàng)。模式匹配除了下面描述的特殊模式字符之外,模式中出現(xiàn)的任何字符都與其自身匹配。NUL字符可能不會(huì)出現(xiàn)在模式中。背面 - 斜線逃脫以下角色; 匹配時(shí)丟棄轉(zhuǎn)義反斜杠。如果要按字面匹配,則必須引用特殊模式字符。特殊模式字符具有以下含義:*匹配任何字符串,包括空字符串。啟用globstar shell選項(xiàng)時(shí),*在路徑名擴(kuò)展上下文中使用,使用兩個(gè)相鄰的*因?yàn)閱蝹€(gè)模式將匹配所有文件以及零個(gè)或多個(gè)目錄和子目錄。如果后跟一個(gè)/,則兩個(gè)相鄰的*將僅匹配目錄和子目錄。?匹配任何單個(gè)字符。[...]匹配任何一個(gè)附帶的字符。用連字符分隔的一對(duì)字符表示范圍表達(dá)式; 任何在這兩者之間排序的角色使用當(dāng)前區(qū)域設(shè)置的整理順序和字符集的字符匹配。如果[后面的第一個(gè)字符是!或者^(guò)然后任何未包含的字符都匹配。范圍表達(dá)式中字符的排序順序由當(dāng)前區(qū)域設(shè)置和LC_COLLATE的值確定shell變量,如果設(shè)置。A - 可以通過(guò)將其包括在集合中的第一個(gè)或最后一個(gè)字符來(lái)匹配。A]可以通過(guò)將其包括為第一個(gè)特征來(lái)匹配在集合中。在[和]中,可以使用語(yǔ)法[:class:]指定字符類,其中class是POSIX標(biāo)準(zhǔn)中定義的以下類之一:alnum alpha ascii空白cntrl數(shù)字圖表下部打印punct空間上部字xdigit字符類匹配屬于該類的任何字符。單詞字符類匹配字母,數(shù)字和字符_。在[和]中,可以使用語(yǔ)法[= c =]指定等價(jià)類,該語(yǔ)法匹配具有相同歸類權(quán)重的所有字符(由當(dāng)前語(yǔ)言環(huán)境)作為字符c。在[和]中,語(yǔ)法[.symbol。]匹配整理符號(hào)符號(hào)。可識(shí)別多個(gè)擴(kuò)展模式匹配運(yùn)算符。在以下描述中,模式列表是由|分隔的一個(gè)或多個(gè)模式的列表。復(fù)合拍可以使用以下子模式中的一個(gè)或多個(gè)來(lái)形成燕鷗:?(模式列表)匹配給定模式的零次或一次出現(xiàn)*(模式列表)匹配給定模式的零次或多次出現(xiàn)+(模式列表)匹配給定模式的一次或多次出現(xiàn)@(模式列表)匹配給定模式之一如果使用內(nèi)置shopt啟用了extglob shell選項(xiàng),則還會(huì)識(shí)別以下模式匹配運(yùn)算符:!(模式列表)匹配除了給定模式之外的任何內(nèi)容
引用刪除 ? 在前面的擴(kuò)展之后,將刪除未由上述擴(kuò)展之一產(chǎn)生的字符\,'和“的所有未引用的出現(xiàn)。
REDIRECTION ? 在執(zhí)行命令之前,可以使用shell解釋的特殊表示法重定向其輸入和輸出。重定向也可用于打開和關(guān)閉文件 ? 對(duì)于當(dāng)前的shell執(zhí)行環(huán)境。以下重定向運(yùn)算符可以在簡(jiǎn)單命令之前或出現(xiàn)在任何位置,也可以跟隨命令。Redirec- ? tions按照它們出現(xiàn)的順序從左到右處理。
可以在文件描述符號(hào)之前的每個(gè)重定向可以改為在{varname}形式的單詞之后。在這種情況下,對(duì)于每個(gè)重定向運(yùn)算符除外>& - 和<& - ,shell將分配大于10的文件描述符并將其分配給varname。如果>& - 或<& - 前面有{varname},則varname的值定義要關(guān)閉的文件描述符。在以下描述中,如果省略文件描述符編號(hào),并且重定向操作符的第一個(gè)字符是<,則重定向是指標(biāo)準(zhǔn)輸入(文件描述符0)。如果重定向運(yùn)算符的第一個(gè)字符是>,則重定向引用標(biāo)準(zhǔn)輸出(文件描述符1)。除非另有說(shuō)明,否則以下描述中的重定向運(yùn)算符后面的單詞將進(jìn)行括號(hào)擴(kuò)展,波形擴(kuò)展,參數(shù)擴(kuò)展,mand替換,算術(shù)擴(kuò)展,引用刪除,路徑名擴(kuò)展和單詞拆分。如果它擴(kuò)展為多個(gè)單詞,bash會(huì)報(bào)告錯(cuò)誤。請(qǐng)注意,重定向的順序很重要。例如,命令ls> dirlist 2>&1在命令時(shí)將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都指向文件dirlistls 2>&1> dirlist僅將標(biāo)準(zhǔn)輸出指向文件dirlist,因?yàn)樵趯?biāo)準(zhǔn)輸出重定向到dirlist之前,標(biāo)準(zhǔn)錯(cuò)誤與標(biāo)準(zhǔn)輸出重復(fù)。Bash在重定向中使用時(shí)會(huì)處理多個(gè)文件名,如下表所述:的/ dev / FD / FD如果fd是有效整數(shù),則重復(fù)文件描述符fd。的/ dev /標(biāo)準(zhǔn)輸入文件描述符0是重復(fù)的。的/ dev /標(biāo)準(zhǔn)輸出文件描述符1是重復(fù)的。的/ dev /標(biāo)準(zhǔn)錯(cuò)誤文件描述符2是重復(fù)的。的/ dev / TCP /主機(jī)/端口如果host是有效的主機(jī)名或Internet地址,并且port是整數(shù)端口號(hào)或服務(wù)名,則bash嘗試打開到相應(yīng)的TCP連接插座。的/ dev / UDP /主機(jī)/端口如果host是有效的主機(jī)名或Internet地址,并且port是整數(shù)端口號(hào)或服務(wù)名,則bash嘗試打開UDP連接到相應(yīng)的插座。無(wú)法打開或創(chuàng)建文件會(huì)導(dǎo)致重定向失敗。應(yīng)謹(jǐn)慎使用使用大于9的文件描述符的重定向,因?yàn)樗鼈兛赡芘cshell在內(nèi)部使用的文件描述符沖突。
重定向輸入 ? 輸入的重定向?qū)е麓蜷_名稱來(lái)自word擴(kuò)展的文件,以便讀取文件描述符n或標(biāo)準(zhǔn)輸入(文件描述符0),如果 ? n未指定。
重定向輸入的一般格式是:[N] <字
重定向輸出 ? 輸出的重定向?qū)е麓蜷_名稱來(lái)自word擴(kuò)展的文件,以便在文件描述符n或標(biāo)準(zhǔn)輸出(文件描述符1)上進(jìn)行寫入 ? 如果沒有指定n。如果文件不存在則創(chuàng)建; 如果確實(shí)存在則將其截?cái)酁榱愦笮 ?/p> 重定向輸出的一般格式是:[N]>字如果重定向運(yùn)算符是>,并且已啟用set builtin的noclobber選項(xiàng),則如果名稱由擴(kuò)展名稱生成的文件,則重定向?qū)⑹卧~存在并且是常規(guī)文件。如果重定向運(yùn)算符是> |,或者重定向運(yùn)算符是>并且未啟用set builtin命令的noclobber選項(xiàng),即使由word命名的文件存在,也會(huì)嘗試重定向。
附加重定向輸出 ? 以這種方式重定向輸出會(huì)導(dǎo)致打開名稱來(lái)自word擴(kuò)展的文件,以便附加到文件描述符n或標(biāo)準(zhǔn)輸出 ? (文件描述符1)如果未指定n。如果該文件不存在,則創(chuàng)建該文件。
附加輸出的一般格式是:[N] >>字
重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤 ? 此構(gòu)造允許將標(biāo)準(zhǔn)輸出(文件描述符1)和標(biāo)準(zhǔn)錯(cuò)誤輸出(文件描述符2)重定向到名稱為擴(kuò)展的文件 ? 的字。
重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤有兩種格式:&>字和>&字在這兩種形式中,第一種是優(yōu)選的。這在語(yǔ)義上等同于>字2>&1
附加標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤 ? 此構(gòu)造允許將標(biāo)準(zhǔn)輸出(文件描述符1)和標(biāo)準(zhǔn)錯(cuò)誤輸出(文件描述符2)附加到名稱為擴(kuò)展的文件 ? 字。
附加標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤的格式為:&>>字這在語(yǔ)義上等同于>>字2>&1
這里的文件 ? 這種類型的重定向指示shell從當(dāng)前源讀取輸入,直到看到只包含分隔符(沒有尾隨空白)的行。所有的線條 ? 然后讀取到該點(diǎn)作為命令的標(biāo)準(zhǔn)輸入。
here-documents的格式是:<< [ - ]字這里文檔分隔符不對(duì)字執(zhí)行參數(shù)擴(kuò)展,命令替換,算術(shù)擴(kuò)展或路徑名擴(kuò)展。如果引用單詞中的任何字符,則分隔符為在單詞上刪除引號(hào)的結(jié)果,并且不會(huì)展開here-document中的行。如果單詞不加引號(hào),則here-document的所有行都受到參數(shù)擴(kuò)展的影響 - sion,命令替換和算術(shù)擴(kuò)展。在后一種情況下,將忽略字符序列\(zhòng) <newline>,并且\必須用于引用字符\,$和`。如果重定向運(yùn)算符是<< - ,則從輸入行和包含分隔符的行中刪除所有前導(dǎo)制表符。這允許shell中的文檔腳本以自然方式縮進(jìn)。
這里的弦樂 ? 這里文檔的一個(gè)變體,格式是:
<<<字單詞被擴(kuò)展并在其標(biāo)準(zhǔn)輸入上提供給命令。
復(fù)制文件描述符 ? 重定向運(yùn)算符
[N] <&字用于復(fù)制輸入文件描述符。如果word擴(kuò)展為一個(gè)或多個(gè)數(shù)字,則由n表示的文件描述符將成為該文件描述符的副本。如果word中的數(shù)字不指定打開輸入的文件描述符,發(fā)生重定向錯(cuò)誤。如果word求值為 - ,則關(guān)閉文件描述符n。如果未指定n,則使用標(biāo)準(zhǔn)輸入(文件描述符0)。運(yùn)營(yíng)商[N]>&字與重復(fù)的輸出文件描述符類似地使用。如果未指定n,則使用標(biāo)準(zhǔn)輸出(文件描述符1)。如果單詞中的數(shù)字未指定文件描述符打開輸出,發(fā)生重定向錯(cuò)誤。作為一種特殊情況,如果省略n,并且word不會(huì)擴(kuò)展為一個(gè)或多個(gè)數(shù)字,則標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)如前所述,錯(cuò)誤被重定向。
移動(dòng)文件描述符 ? 重定向運(yùn)算符
[N] <&digit-如果未指定n,則將文件描述符數(shù)字移動(dòng)到文件描述符n或標(biāo)準(zhǔn)輸入(文件描述符0)。數(shù)字在復(fù)制到n后關(guān)閉。同樣,重定向運(yùn)算符[N]>&digit-如果未指定n,則將文件描述符數(shù)字移動(dòng)到文件描述符n或標(biāo)準(zhǔn)輸出(文件描述符1)。
打開閱讀和寫作的文件描述符 ? 重定向運(yùn)算符
[N] <>字導(dǎo)致名稱為word擴(kuò)展的文件在文件描述符n上讀取和寫入時(shí)打開,如果未指定n則在文件描述符0上打開。如果文件不存在,它被創(chuàng)建。
ALIASES ? 別名允許在將字符串用作簡(jiǎn)單命令的第一個(gè)字時(shí)替換字符串。shell維護(hù)一個(gè)可以設(shè)置和取消設(shè)置的別名列表 ? 使用alias和unalias內(nèi)置命令(參見下面的SHELL BUILTIN命令)。如果不加引號(hào),則檢查每個(gè)簡(jiǎn)單命令的第一個(gè)單詞以查看它是否具有別名。如果 ? 所以,該單詞被別名的文本替換。上面列出的字符/,$,`和=以及任何shell元字符或引號(hào)字符可能不會(huì)出現(xiàn)在 ? 別名。替換文本可以包含任何有效的shell輸入,包括shell元字符。替換文本的第一個(gè)單詞是針對(duì)別名測(cè)試的,但是一個(gè)單詞 ? 與擴(kuò)展的別名相同的內(nèi)容不會(huì)再次展開。這意味著,例如,可以將ls別名為ls -F,而bash不會(huì)嘗試遞歸 ? 擴(kuò)展替換文本。如果別名值的最后一個(gè)字符為空,則還會(huì)檢查別名后面的下一個(gè)命令字的別名擴(kuò)展。
使用alias命令創(chuàng)建和列出別名,并使用unalias命令刪除別名。在替換文本中沒有使用參數(shù)的機(jī)制。如果需要參數(shù),則應(yīng)使用shell函數(shù)(請(qǐng)參閱下面的函數(shù))。當(dāng)shell不是交互式時(shí),不會(huì)擴(kuò)展別名,除非使用shopt設(shè)置expand_aliases shell選項(xiàng)(請(qǐng)參閱SHELL BUILTIN COM下的shopt說(shuō)明)MANDS下面)。關(guān)于別名的定義和使用的規(guī)則有些令人困惑。在執(zhí)行任何命令之前,Bash始終讀取至少一個(gè)完整的輸入行那條線。讀取命令時(shí)會(huì)擴(kuò)展別名,而不會(huì)在執(zhí)行時(shí)擴(kuò)展別名。因此,出現(xiàn)在與另一個(gè)命令相同的行上的別名定義不會(huì)占用效果,直到讀取下一行輸入。該行上別名定義后面的命令不受新別名的影響。這種行為也是一個(gè)問題功能被執(zhí)行。讀取函數(shù)定義時(shí)擴(kuò)展別名,而不是在執(zhí)行函數(shù)時(shí)擴(kuò)展,因?yàn)楹瘮?shù)定義本身就是復(fù)合函數(shù)普通話。因此,在執(zhí)行該函數(shù)之后,函數(shù)中定義的別名才可用。為安全起見,請(qǐng)始終將別名定義放在單獨(dú)的行中,并且不要在復(fù)合命令中使用別名。對(duì)于幾乎所有目的,別名都被shell函數(shù)取代。
功能 ? 如上所述在SHELL GRAMMAR中定義的shell函數(shù)存儲(chǔ)一系列命令以供稍后執(zhí)行。當(dāng)shell函數(shù)的名稱用作簡(jiǎn)單的com- ? mand name,執(zhí)行與該函數(shù)名關(guān)聯(lián)的命令列表。函數(shù)在當(dāng)前shell的上下文中執(zhí)行; 沒有創(chuàng)建新進(jìn)程 ? 解釋它們(與shell腳本的執(zhí)行形成對(duì)比)。執(zhí)行函數(shù)時(shí),函數(shù)的參數(shù)將成為函數(shù)的位置參數(shù) ? 執(zhí)行。更新特殊參數(shù)#以反映更改。特殊參數(shù)0不變。FUNCNAME變量的第一個(gè)元素設(shè)置為的名稱 ? 函數(shù)執(zhí)行時(shí)的函數(shù)。
shell執(zhí)行環(huán)境的所有其他方面在函數(shù)和調(diào)用者之間是相同的,但有以下例外:DEBUG和RETURN陷阱(請(qǐng)參閱描述)除了為函數(shù)提供了trace屬性之外,不會(huì)繼承下面的SHELL BUILTIN命令內(nèi)置的陷阱)(參見聲明內(nèi)置的描述)使用set builtin啟用了-o functrace shell選項(xiàng)(在這種情況下,所有函數(shù)都繼承了DEBUG和RETURN陷阱),并且ERR陷阱不是繼承 - 除非啟用了-o errtrace shell選項(xiàng)。可以使用local builtin命令聲明函數(shù)本地的變量。通常,變量及其值在函數(shù)和調(diào)用者之間共享。FUNCNEST變量,如果設(shè)置為大于0的數(shù)值,則定義最大函數(shù)嵌套級(jí)別。超出限制的函數(shù)調(diào)用會(huì)導(dǎo)致整個(gè)com-要求中止。如果在函數(shù)中執(zhí)行內(nèi)置命令返回,則函數(shù)完成,并在函數(shù)調(diào)用后使用下一個(gè)命令繼續(xù)執(zhí)行。任何關(guān)聯(lián)的命令在執(zhí)行恢復(fù)之前執(zhí)行RETURN陷阱。當(dāng)函數(shù)完成時(shí),位置參數(shù)和特殊參數(shù)#的值將恢復(fù)為在函數(shù)執(zhí)行之前它們具有的值。可以使用declare或typeset builtin命令的-f選項(xiàng)列出函數(shù)名稱和定義。聲明或排版的-F選項(xiàng)將列出函數(shù)名稱only(如果啟用了extdebug shell選項(xiàng),則可選擇使用源文件和行號(hào))。可以導(dǎo)出函數(shù),以便子殼自動(dòng)定義它們使用-f選項(xiàng)導(dǎo)出內(nèi)置。可以使用unset內(nèi)置的-f選項(xiàng)刪除函數(shù)定義。注意shell函數(shù)和變量用相同的名稱可能會(huì)導(dǎo)致傳遞給shell的子項(xiàng)的環(huán)境中有多個(gè)具有相同名稱的條目。如果這可能導(dǎo)致問題,應(yīng)該小心。函數(shù)可以是遞歸的。FUNCNEST變量可用于限制函數(shù)調(diào)用堆棧的深度并限制函數(shù)調(diào)用的數(shù)量。默認(rèn)情況下,沒有對(duì)遞歸調(diào)用的數(shù)量施加限制。
算術(shù)評(píng)估 ? 在某些情況下,shell允許計(jì)算算術(shù)表達(dá)式(參見let和declare builtin命令和算術(shù)擴(kuò)展)。評(píng)估完成 ? 在固定寬度整數(shù)中沒有檢查溢出,但除以0被捕獲并標(biāo)記為錯(cuò)誤。運(yùn)算符及其優(yōu)先級(jí),關(guān)聯(lián)性和值 ? 與C語(yǔ)言相同。以下運(yùn)算符列表分組為等優(yōu)先運(yùn)算符的級(jí)別。級(jí)別按先前減少的順序列出 ? 信心。
id ++ id--變量后增量和后減量++ id --id變量預(yù)增量和預(yù)減量- +一元減號(hào)和加號(hào)!?邏輯和按位否定**取冪* /%乘法,除法,余數(shù)+ - 加法,減法<< >>左右按位移位<=> = <>對(duì)照==!=平等和不平等&按位AND^按位異或| 按位OR&&邏輯AND|| 邏輯或EXPR EXPR:EXPR條件運(yùn)算符= * = / =%= + = - = << = >> =&= ^ = | =分配expr1,expr2逗號(hào)允許Shell變量作為操作數(shù); 在計(jì)算表達(dá)式之前執(zhí)行參數(shù)擴(kuò)展。在表達(dá)式中,shell變量也可以引用不使用參數(shù)擴(kuò)展語(yǔ)法的名稱。null或unset的shell變量在按名稱引用時(shí)計(jì)算結(jié)果為0,而不使用參數(shù)擴(kuò)展syn-稅。變量的值在引用時(shí)被計(jì)算為算術(shù)表達(dá)式,或者當(dāng)使用declare -i給出整數(shù)屬性的變量時(shí)被賦予一個(gè)值。null值的計(jì)算結(jié)果為0. shell變量不需要打開其整數(shù)屬性即可在表達(dá)式中使用。前導(dǎo)0的常量被解釋為八進(jìn)制數(shù)。前導(dǎo)0x或0X表示十六進(jìn)制。否則,數(shù)字采用[base#] n形式,其中可選基數(shù)為a表示算術(shù)基數(shù)的2到64之間的十進(jìn)制數(shù),n是該基數(shù)的數(shù)字。如果省略base#,則使用基數(shù)10。大于9的數(shù)字是由小寫字母,大寫字母,@和_按順序表示。如果base小于或等于36,則可以使用小寫和大寫字母可變地代表10到35之間的數(shù)字。按優(yōu)先順序評(píng)估運(yùn)算符。首先評(píng)估括號(hào)中的子表達(dá)式,并可以覆蓋上面的優(yōu)先級(jí)規(guī)則。
有條件的表達(dá) ? 條件表達(dá)式由[[compound命令和test和[builtin命令]用于測(cè)試文件屬性并執(zhí)行字符串和算術(shù)比較。 ? 表達(dá)式由以下一元或二元原色形成。如果其中一個(gè)原色的任何文件參數(shù)的格式為/ dev / fd / n,則文件描述符n為 ? 檢查。如果其中一個(gè)原色的文件參數(shù)是/ dev / stdin,/ dev / stdout或/ dev / stderr之一,則分別檢查文件描述符0,1或2。
除非另有說(shuō)明,否則對(duì)文件進(jìn)行操作的原色遵循符號(hào)鏈接并在鏈接的目標(biāo)上操作,而不是鏈接本身。與[[,<和>運(yùn)算符一起使用時(shí),使用當(dāng)前語(yǔ)言環(huán)境按字典順序排序。測(cè)試命令使用ASCII排序進(jìn)行排序。-一份文件如果文件存在則為真。-b文件如果文件存在則為真,并且是塊特殊文件。-c文件如果文件存在則為真,并且是字符特殊文件。-d文件如果文件存在且為目錄,則為True。-e文件如果文件存在則為真。-f文件如果文件存在且為常規(guī)文件,則為True。-g文件如果文件存在且為set-group-id,則為True。-h文件如果文件存在且為符號(hào)鏈接,則為真。-k文件如果文件存在且設(shè)置了“粘滯”位,則為真。-p文件如果文件存在且為命名管道(FIFO),則為真。-r文件如果文件存在且可讀,則為真。-s文件如果文件存在且大小大于零,則為真。-t fd如果文件描述符fd打開并引用終端,則為真。-u文件如果文件存在且其set-user-id位已設(shè)置,則為True。-w文件如果文件存在且可寫,則為True。-x文件如果文件存在且可執(zhí)行,則為True。-G文件如果文件存在并且由有效組ID擁有,則為True。-L文件如果文件存在且為符號(hào)鏈接,則為真。-N文件如果文件存在且自上次讀取以來(lái)已被修改,則為真。-O文件如果文件存在且由有效用戶標(biāo)識(shí)擁有,則為True。-S文件如果文件存在且為套接字,則為真。file1 -ef file2如果file1和file2引用相同的設(shè)備和inode編號(hào),則為True。file1 -nt file2如果file1比f(wàn)ile2更新(或根據(jù)修改日期),或者file1存在而file2不存在,則為True。file1 -ot file2如果file1早于file2,或者file2存在且file1不存在,則為True。-o optname如果啟用了shell選項(xiàng)optname,則為True。請(qǐng)參閱下面的set builtin的-o選項(xiàng)說(shuō)明下的選項(xiàng)列表。-v varname如果設(shè)置了shell變量varname,則為True(已分配值)。-z字符串如果字符串的長(zhǎng)度為零,則為True。串-n string如果字符串的長(zhǎng)度不為零,則為True。string1 == string2string1 = string2如果字符串相等則為True。=應(yīng)與POSIX一致性的測(cè)試命令一起使用。string1!= string2如果字符串不相等則為True。string1 <string2如果string1按字典順序在string2之前排序,則為True。string1> string2如果string1按字典順序在string2之后排序,則為True。arg1 OP arg2OP是-eq,-ne,-lt,-le,-gt或-ge之一。如果arg1等于,不等于,小于,小于或等于,則這些算術(shù)二元運(yùn)算符返回true,分別大于,或大于或等于arg2。Arg1和arg2可以是正整數(shù)或負(fù)整數(shù)。
簡(jiǎn)單的命令擴(kuò)展 ? 執(zhí)行簡(jiǎn)單命令時(shí),shell將從左到右執(zhí)行以下擴(kuò)展,分配和重定向。
1.解析器標(biāo)記為變量賦值(命令名稱前面的那些)和重定向的單詞將保存以供以后處理。2.擴(kuò)展不是變量賦值或重定向的單詞。如果擴(kuò)展后仍有任何單詞,則第一個(gè)單詞將被視為命令的名稱其余的詞是爭(zhēng)論。3.重定向如上所述在REDIRECTION下進(jìn)行。4.每個(gè)變量賦值中的=之后的文本經(jīng)歷了波浪擴(kuò)展,參數(shù)擴(kuò)展,命令替換,算術(shù)擴(kuò)展和之前的引用刪除被分配給變量。如果未生成命令名稱,則變量賦值會(huì)影響當(dāng)前的shell環(huán)境。否則,將變量添加到已執(zhí)行命令的環(huán)境中不要影響當(dāng)前的shell環(huán)境。如果任何分配嘗試將值分配給只讀變量,則會(huì)發(fā)生錯(cuò)誤,并且命令以非零狀態(tài)。如果沒有命令名稱結(jié)果,則執(zhí)行重定向,但不影響當(dāng)前的shell環(huán)境。重定向錯(cuò)誤導(dǎo)致命令以非零sta退出土族。如果在擴(kuò)展后留下命令名稱,則執(zhí)行如下所述。否則,該命令退出。如果其中一個(gè)擴(kuò)展包含一個(gè)命令替換 - ,該命令的退出狀態(tài)是執(zhí)行的最后一個(gè)命令替換的退出狀態(tài)。如果沒有命令替換,則命令以狀態(tài)退出零。
命令執(zhí)行 ? 將命令拆分為單詞后,如果它生成簡(jiǎn)單命令和可選參數(shù)列表,則執(zhí)行以下操作。
如果命令名稱不包含斜杠,則shell會(huì)嘗試找到它。如果存在該名稱的shell函數(shù),則如上所述在FUNC中調(diào)用該函數(shù)。系統(tǒng)蒸發(fā)散。如果名稱與函數(shù)不匹配,shell將在shell builtins列表中搜索它。如果找到匹配項(xiàng),則調(diào)用該內(nèi)置項(xiàng)。如果名稱既不是shell函數(shù)也不是內(nèi)置函數(shù),并且不包含斜杠,則bash會(huì)在PATH的每個(gè)元素中搜索包含可執(zhí)行文件的目錄。名稱。Bash使用哈希表來(lái)記住可執(zhí)行文件的完整路徑名(請(qǐng)參閱下面的SHELL BUILTIN命令下的哈希)。完全搜索PATH中的目錄是僅當(dāng)在哈希表中找不到該命令時(shí)才執(zhí)行。如果搜索不成功,shell將搜索名為command_not_found_handle的已定義shell函數(shù)。如果該函數(shù)存在,則使用原始命令和原始命令的參數(shù)作為其參數(shù)調(diào)用它,并且函數(shù)的退出狀態(tài)變?yōu)橥顺鰻顟B(tài)的殼。如果未定義該函數(shù),則shell將輸出錯(cuò)誤消息并返回退出狀態(tài)127。如果搜索成功,或者命令名稱包含一個(gè)或多個(gè)斜杠,則shell在單獨(dú)的執(zhí)行環(huán)境中執(zhí)行指定的程序。參數(shù)0已設(shè)置到給定的名稱,并將命令的其余參數(shù)設(shè)置為給定的參數(shù),如果有的話。如果由于文件不是可執(zhí)行格式而導(dǎo)致此執(zhí)行失敗,并且該文件不是目錄,則假定它是shell腳本,即包含shell命令的文件。生成子shell以執(zhí)行它。這個(gè)子shell重新初始化,因此效果就好像調(diào)用了一個(gè)新shell來(lái)處理腳本一樣,異常由父母記住的命令的位置(參見SHELL BUILTIN COMMANDS下面的哈希)由孩子保留。如果程序是以#!開頭的文件,則第一行的其余部分指定程序的解釋程序。shell在operat-上執(zhí)行指定的解釋器不自行處理此可執(zhí)行格式的系統(tǒng)。解釋器的參數(shù)由解釋器名稱后面的單個(gè)可選參數(shù)組成程序的第一行,后跟程序的名稱,后跟命令參數(shù),如果有的話。
命令執(zhí)行環(huán)境 ? shell有一個(gè)執(zhí)行環(huán)境,它包含以下內(nèi)容:
·在調(diào)用時(shí)由shell繼承的打開文件,由提供給exec內(nèi)置的重定向修改·當(dāng)前工作目錄由cd,pushd或popd設(shè)置,或由shell在調(diào)用時(shí)繼承·文件創(chuàng)建模式掩碼,由umask設(shè)置或從shell的父級(jí)繼承·陷阱設(shè)置的當(dāng)前陷阱·由變量賦值設(shè)置的shell參數(shù),或者從環(huán)境中shell的父級(jí)設(shè)置或繼承的shell參數(shù)·shell函數(shù)在執(zhí)行期間定義或從shell的父級(jí)環(huán)境中繼承·調(diào)用時(shí)啟用的選項(xiàng)(默認(rèn)情況下或使用命令行參數(shù))或set·由shopt啟用的選項(xiàng)·使用別名定義的shell別名·各種進(jìn)程ID,包括后臺(tái)作業(yè),$$的值和PPID的值當(dāng)要執(zhí)行除內(nèi)置函數(shù)或shell函數(shù)之外的簡(jiǎn)單命令時(shí),將在包含以下內(nèi)容的單獨(dú)執(zhí)行環(huán)境中調(diào)用它。除非 - 錯(cuò)誤地指出,值是從shell繼承的。·shell的打開文件,以及由命令重定向指定的任何修改和添加·當(dāng)前的工作目錄·文件創(chuàng)建模式掩碼·標(biāo)記為導(dǎo)出的shell變量和函數(shù),以及為該命令導(dǎo)出的變量,在環(huán)境中傳遞·shell捕獲的陷阱被重置為從shell的父級(jí)繼承的值,并忽略shell忽略的陷阱在此單獨(dú)環(huán)境中調(diào)用的命令不會(huì)影響shell的執(zhí)行環(huán)境。命令替換,用括號(hào)分組的命令和異步命令在子shell環(huán)境中調(diào)用,該環(huán)境是shell環(huán)境的副本,除了shell捕獲的陷阱將重置為shell在調(diào)用時(shí)從其父級(jí)繼承的值。作為管道的一部分調(diào)用的內(nèi)置命令是也在子shell環(huán)境中執(zhí)行。對(duì)子shell環(huán)境所做的更改不會(huì)影響shell的執(zhí)行環(huán)境。衍生為執(zhí)行命令替換的子shell繼承父shell的-e選項(xiàng)的值。當(dāng)不處于posix模式時(shí),bash會(huì)清除-e選項(xiàng)。炮彈。如果命令后面跟著&且作業(yè)控件未激活,則該命令的缺省標(biāo)準(zhǔn)輸入是空文件/ dev / null。否則,調(diào)用的命令繼承 - 它是由重定向修改的調(diào)用shell的文件描述符。
環(huán)境 ? 調(diào)用程序時(shí),會(huì)給出一個(gè)稱為環(huán)境的字符串?dāng)?shù)組。這是名稱 - 值對(duì)的列表,格式為name = value。
shell提供了幾種操作環(huán)境的方法。在調(diào)用時(shí),shell會(huì)掃描自己的環(huán)境,并自動(dòng)為每個(gè)找到的名稱創(chuàng)建一個(gè)參數(shù)標(biāo)記它以導(dǎo)出到子進(jìn)程。執(zhí)行的命令繼承環(huán)境。export和declare -x命令允許將參數(shù)和函數(shù)添加到和從環(huán)境中刪除。如果修改了環(huán)境中參數(shù)的值,則新值將成為環(huán)境的一部分,替換舊值。環(huán)境任何執(zhí)行的命令繼承的都包含shell的初始環(huán)境,其值可以在shell中修改,少于unset命令刪除的任何對(duì),加上通過(guò)export和declare -x命令添加任何內(nèi)容。任何簡(jiǎn)單命令或函數(shù)的環(huán)境可以通過(guò)在其前面加上參數(shù)賦值來(lái)臨時(shí)擴(kuò)充,如上面參數(shù)中所述。這些轉(zhuǎn)讓 - 語(yǔ)句僅影響該命令所見的環(huán)境。如果設(shè)置了-k選項(xiàng)(請(qǐng)參閱下面的set builtin命令),那么所有參數(shù)賦值都將放置在命令的環(huán)境中,而不僅僅是那些在命令之前的命令。命名。當(dāng)bash調(diào)用外部命令時(shí),變量_將設(shè)置為命令的完整文件名,并在其環(huán)境中傳遞給該命令。
退出狀態(tài) ? 執(zhí)行命令的退出狀態(tài)是waitpid系統(tǒng)調(diào)用或等效函數(shù)返回的值。然而,退出狀態(tài)介于0到255之間,正如所解釋的那樣 ? 在下面,shell可能會(huì)特別使用125以上的值。shell builtins和復(fù)合命令的退出狀態(tài)也僅限于此范圍。在某些情況下, ? shell將使用特殊值來(lái)指示特定的故障模式。
出于shell的目的,以零退出狀態(tài)退出的命令已成功。退出狀態(tài)為零表示成功。非零退出狀態(tài)表示失敗。當(dāng)命令終止于致命信號(hào)N時(shí),bash使用128 + N的值作為退出狀態(tài)。如果未找到命令,則為執(zhí)行該命令而創(chuàng)建的子進(jìn)程將返回狀態(tài)127.如果找到命令但不可執(zhí)行,則返回狀態(tài)為126。如果命令因擴(kuò)展或重定向期間的錯(cuò)誤而失敗,則退出狀態(tài)大于零。Shell builtin命令如果成功則返回狀態(tài)0(true),如果執(zhí)行時(shí)發(fā)生錯(cuò)誤則返回非零(false)。所有內(nèi)置函數(shù)都返回2的退出狀態(tài)表明用法不正確。Bash本身返回最后執(zhí)行的命令的退出狀態(tài),除非發(fā)生語(yǔ)法錯(cuò)誤,在這種情況下,它以非零值退出。另見內(nèi)置出口com-下面的要求。
SIGNALS ? 當(dāng)bash是交互式的時(shí)候,在沒有任何陷阱的情況下,它會(huì)忽略SIGTERM(因此kill 0不會(huì)殺死交互式shell),并且會(huì)捕獲并處理SIGINT(以便 ? 等待內(nèi)置是可中斷的)。在所有情況下,bash都會(huì)忽略SIGQUIT。如果作業(yè)控制生效,bash將忽略SIGTTIN,SIGTTOU和SIGTSTP。
由bash運(yùn)行的非內(nèi)置命令將信號(hào)處理程序設(shè)置為shell從其父級(jí)繼承的值。當(dāng)作業(yè)控制無(wú)效時(shí),異步命令除了這些繼承的處理程序之外,還忽略SIGINT和SIGQUIT。由于命令替換而運(yùn)行的命令忽略鍵盤生成的作業(yè)控制信號(hào)SIGT-TIN,SIGTTOU和SIGTSTP。收到SIGHUP后,shell默認(rèn)退出。在退出之前,交互式shell會(huì)將SIGHUP重新發(fā)送到所有正在運(yùn)行或已停止的作業(yè)。停止的工作發(fā)送給SIGCONT確保他們收到SIGHUP。為了防止shell將信號(hào)發(fā)送到特定作業(yè),應(yīng)該使用disown builtin從jobs表中刪除它(參見下面的SHELL BUILTIN命令)或使用disown -h標(biāo)記為不接收SIGHUP。如果已使用shopt設(shè)置了huponexit shell選項(xiàng),則當(dāng)交互式登錄shell退出時(shí),bash會(huì)向所有作業(yè)發(fā)送SIGHUP。如果bash正在等待命令完成并收到已設(shè)置陷阱的信號(hào),則在命令完成之前不會(huì)執(zhí)行該陷阱。當(dāng)bash是通過(guò)等待內(nèi)置等待異步命令,接收已設(shè)置陷阱的信號(hào)將導(dǎo)致等待內(nèi)置立即返回退出狀態(tài)大于128,緊接著執(zhí)行陷阱。
工作控制 ? 作業(yè)控制是指有選擇地停止(暫停)進(jìn)程的執(zhí)行并在稍后繼續(xù)(恢復(fù))它們的執(zhí)行的能力。用戶通常使用 ? 這個(gè)工具通過(guò)操作系統(tǒng)內(nèi)核的終端驅(qū)動(dòng)程序和bash共同提供的交互式界面。
shell將作業(yè)與每個(gè)管道相關(guān)聯(lián)。它保留當(dāng)前正在執(zhí)行的作業(yè)的表,可以使用jobs命令列出。當(dāng)bash開始工作asyn-(在后臺(tái)),它打印出一條如下所示的線:[1] 25647指示此作業(yè)是作業(yè)編號(hào)1,并且與此作業(yè)關(guān)聯(lián)的管道中的最后一個(gè)進(jìn)程的進(jìn)程ID是25647.單個(gè)中的所有進(jìn)程管道是同一個(gè)工作的成員。Bash使用作業(yè)抽象作為工作控制的基礎(chǔ)。為了便于實(shí)現(xiàn)作業(yè)控制的用戶界面,操作系統(tǒng)維護(hù)當(dāng)前終端進(jìn)程組ID的概念。這個(gè)成員進(jìn)程組(進(jìn)程組ID等于當(dāng)前終端進(jìn)程組ID的進(jìn)程)接收鍵盤生成的信號(hào),如SIGINT。這些過(guò)程是據(jù)說(shuō)是在前臺(tái)。后臺(tái)進(jìn)程是進(jìn)程組ID與終端進(jìn)程不同的進(jìn)程; 這些過(guò)程不受鍵盤生成的信號(hào)的影響。只允許前臺(tái)進(jìn)程讀取,或者如果用戶使用stty tostop指定,則寫入終端。嘗試從中讀取的后臺(tái)進(jìn)程(當(dāng)stty tostop生效時(shí)寫入)終端由內(nèi)核的終端驅(qū)動(dòng)程序發(fā)送SIGTTIN(SIGTTOU)信號(hào),除非被捕獲,否則暫停該進(jìn)程。如果運(yùn)行bash的操作系統(tǒng)支持作業(yè)控制,則bash包含使用它的工具。在a時(shí)鍵入暫停字符(通常為^ Z,Control-Z)進(jìn)程正在運(yùn)行導(dǎo)致該進(jìn)程停止并將控制權(quán)返回給bash。鍵入延遲暫停字符(通常為^ Y,Control-Y)會(huì)導(dǎo)致進(jìn)程當(dāng)它試圖從終端讀取輸入時(shí)停止,并且控制返回到bash。然后,用戶可以使用bg命令來(lái)操作該作業(yè)的狀態(tài)在后臺(tái)繼續(xù)它,fg命令在前臺(tái)繼續(xù)它,或者kill命令來(lái)殺死它。A ^ Z立即生效,并具有附加的一面導(dǎo)致掛起輸出和預(yù)先輸出的效果被丟棄。有很多方法可以引用shell中的作業(yè)。字符%引入了作業(yè)規(guī)范(jobspec)。作業(yè)號(hào)n可以稱為%n。一份工作也可能使用用于啟動(dòng)它的名稱的前綴,或使用出現(xiàn)在其命令行中的子字符串來(lái)引用。例如,%ce指的是停止的作業(yè)。如果是前綴匹配多個(gè)作業(yè),bash報(bào)告錯(cuò)誤。另一方面,使用%?ce指的是在其命令行中包含字符串ce的任何作業(yè)。如果子串匹配不止一個(gè)工作,bash報(bào)告錯(cuò)誤。符號(hào)%%和%+指的是當(dāng)前作業(yè)的shell概念,它是在前臺(tái)停止時(shí)的最后一個(gè)作業(yè)或者在后臺(tái)開始。可以使用% - 引用上一個(gè)作業(yè)。如果只有一個(gè)作業(yè),%+和% - 都可以用來(lái)引用該作業(yè)。在輸出中為了工作(例如,job命令的輸出),當(dāng)前作業(yè)總是標(biāo)記為+,而前一個(gè)作業(yè)標(biāo)記為 - 。單個(gè)%(沒有隨附的工作規(guī)范 - ification)也指當(dāng)前的工作。簡(jiǎn)單地命名一個(gè)作業(yè)可以用來(lái)將它帶到前臺(tái):%1是``fg%1'的同義詞,將作業(yè)1從后臺(tái)帶到前臺(tái)。同樣,``%1&''在后臺(tái)恢復(fù)作業(yè)1,相當(dāng)于“bg%1”。當(dāng)作業(yè)改變狀態(tài)時(shí),shell立即學(xué)習(xí)。通常情況下,bash會(huì)在報(bào)告作業(yè)狀態(tài)更改之前等待打印提示,以免發(fā)生中斷任何其他輸出。如果啟用了set builtin命令的-b選項(xiàng),bash會(huì)立即報(bào)告此類更改。SIGCHLD上的任何陷阱都是針對(duì)每個(gè)孩子執(zhí)行的退出。如果在作業(yè)停止時(shí)嘗試退出bash(或者,如果使用內(nèi)置的shopt啟用了checkjobs shell選項(xiàng),則運(yùn)行),shell會(huì)輸出警告消息,如果啟用了checkjobs選項(xiàng),則列出作業(yè)及其狀態(tài)。然后可以使用jobs命令檢查其狀態(tài)。如果第二次嘗試退出如果沒有插入命令,shell不會(huì)打印另一個(gè)警告,并且任何已停止的作業(yè)都將終止。
PROMPTING ? 交互式執(zhí)行時(shí),bash在準(zhǔn)備好讀取命令時(shí)顯示主提示PS1,在需要更多輸入時(shí)顯示輔助提示PS2以完成a ? 命令。Bash允許通過(guò)插入一些反斜杠轉(zhuǎn)義的特殊字符來(lái)自定義這些提示字符串,這些特殊字符按如下方式解碼: ? \ a一個(gè)ASCII鈴鐺字符(07) ? \ d“工作日月日期”格式的日期(例如,“Tue May 26”) ? \ d {格式} ? 格式傳遞給strftime(3),結(jié)果插入到提示字符串中; 空格式導(dǎo)致特定于語(yǔ)言環(huán)境的時(shí)間表示。該 ? 大括號(hào)是必需的 ? \ e ASCII轉(zhuǎn)義字符(033) ? \ h主機(jī)名最多為第一個(gè)`。' ? \ H主機(jī)名 ? \ j目前由shell管理的作業(yè)數(shù)量 ? \ l shell的終端設(shè)備名稱的基本名稱 ? \ n換行 ? \ r \ n回車 ? \ s shell的名稱,$ 0的基本名稱(最終斜杠后面的部分) ? 以24小時(shí)HH:MM:SS格式顯示當(dāng)前時(shí)間 ? \ T當(dāng)前時(shí)間為12小時(shí)HH:MM:SS格式 ? \ @當(dāng)前時(shí)間為12小時(shí)上午/下午格式 ? \當(dāng)前時(shí)間為24小時(shí)HH:MM格式 ? \ u當(dāng)前用戶的用戶名 ? \ v bash的版本(例如,2.00) ? \ v發(fā)布bash,版本+補(bǔ)丁級(jí)別(例如,2.00.0) ? \ w當(dāng)前工作目錄,$ HOME縮寫為tilde(使用PROMPT_DIRTRIM變量的值) ? \ W當(dāng)前工作目錄的基本名稱,$ HOME縮寫為波浪號(hào) ? \!此命令的歷史編號(hào) ? \#此命令的命令編號(hào) ? \ $如果有效UID為0,則為#,否則為$ ? \ nnn對(duì)應(yīng)八進(jìn)制數(shù)nnn的字符 ? 一個(gè)反斜杠 ? \ [開始一系列非打印字符,可用于將終端控制序列嵌入到提示中 ? ]結(jié)束一系列非打印字符
命令編號(hào)和歷史編號(hào)通常不同:命令的歷史編號(hào)是其在歷史列表中的位置,其中可能包括從中恢復(fù)的命令歷史文件(參見下面的HISTORY),而命令編號(hào)是當(dāng)前shell會(huì)話期間執(zhí)行的命令序列中的位置。字符串后解碼后,通過(guò)參數(shù)擴(kuò)展,命令替換,算術(shù)擴(kuò)展和引用刪除進(jìn)行擴(kuò)展,具體取決于promptvars shell選項(xiàng)的值(請(qǐng)參閱在SHELL BUILTIN COMMANDS下面的shopt命令的描述)。
READLINE ? 這是在使用交互式shell時(shí)處理讀取輸入的庫(kù),除非在shell調(diào)用時(shí)給出了--noediting選項(xiàng)。行時(shí)編輯也用于 ? 使用-e選項(xiàng)讀取內(nèi)置函數(shù)。默認(rèn)情況下,行編輯命令與Emacs的命令類似。還提供vi風(fēng)格的線編輯界面。線 ? 可以使用-o emacs或-o vi選項(xiàng)隨時(shí)啟用編輯內(nèi)置編輯(請(qǐng)參閱下面的SHELL BUILTIN命令)。在shell之后關(guān)閉行編輯 ? 運(yùn)行時(shí),使用+ o emacs或+ o vi選項(xiàng)來(lái)設(shè)置內(nèi)置。
Readline表示法 ? 在本節(jié)中,Emacs樣式表示法用于表示擊鍵。控制鍵由C鍵表示,例如,Cn表示Control-N。類似地,元鍵表示為 ? M鍵,所以Mx表示Meta-X。(在沒有元鍵的鍵盤上,Mx表示ESC x,即按Esc鍵然后按x鍵。這使ESC成為元前綴。 ? MCx表示ESC-Control-x,或按Esc鍵,然后在按住x鍵的同時(shí)按住Control鍵。)
Readline命令可以給出數(shù)字參數(shù),通常用作重復(fù)計(jì)數(shù)。然而,有時(shí),這是論證的重要標(biāo)志。通過(guò)一個(gè)在向前方向上作用的命令的負(fù)參數(shù)(例如,kill-line)導(dǎo)致該命令以向后方向動(dòng)作。其行為與爭(zhēng)論的命令與此不同的是下面提到的。當(dāng)命令被描述為殺死文本時(shí),保存已刪除的文本以供將來(lái)檢索(yanking)。被殺死的文本保存在殺戮戒指中。連續(xù)殺人使文本被累積到一個(gè)單元中,可以一次全部拉出。不殺死文本的命令將kill ring上的文本塊分開。
讀取線初始化 ? 通過(guò)將命令放入初始化文件(inputrc文件)來(lái)自定義Readline。此文件的名稱取自INPUTRC變量的值。如果說(shuō) ? 變量未設(shè)置,默認(rèn)為?/ .inputrc。當(dāng)啟動(dòng)使用readline庫(kù)的程序時(shí),將讀取初始化文件,以及鍵綁定和變量 ? 已設(shè)定。readline初始化文件中只允許幾個(gè)基本結(jié)構(gòu)。空行被忽略。以#開頭的行是注釋。線開始 - ? 用$表示條件結(jié)構(gòu)。其他行表示鍵綁定和變量設(shè)置。
可以使用inputrc文件更改默認(rèn)的鍵綁定。使用此庫(kù)的其他程序可能會(huì)添加自己的命令和綁定。例如,放置M-Control-u:普遍參數(shù)要么C-Meta-u:普遍論證進(jìn)入inputrc將使MCu執(zhí)行readline命令universal-argument。識(shí)別以下符號(hào)字符名稱:RUBOUT,DEL,ESC,LFD,NEWLINE,RET,RETURN,SPC,SPACE和TAB。除了命令名之外,readline還允許將鍵綁定到按下鍵時(shí)插入的字符串(宏)。
Readline鍵綁定 ? 用于控制inputrc文件中的鍵綁定的語(yǔ)法很簡(jiǎn)單。所需要的只是命令的名稱或宏的文本以及宏的鍵序列 ? 應(yīng)該受到約束。可以使用以下兩種方式之一指定名稱:作為符號(hào)鍵名稱,可能使用Meta-或Control-前綴,或作為鍵序列。
使用表單keyname:function-name或macro時(shí),keyname是用英語(yǔ)拼寫的鍵的名稱。例如:Control-u:通用參數(shù)Meta-Rubout:反向殺戮詞Control-o:“>輸出”在上面的例子中,Cu綁定到函數(shù)universal-argument,M-DEL綁定到函數(shù)reverse-kill-word,而Co綁定運(yùn)行宏表示的右側(cè)(即將文本“輸出”插入行)。在第二種形式中,“keyseq”:function-name或macro,keyseq與上面的keyname不同,因?yàn)楸硎菊麄€(gè)鍵序列的字符串可以通過(guò)放置雙引號(hào)內(nèi)的序列。可以使用某些GNU Emacs樣式鍵轉(zhuǎn)義,如下例所示,但無(wú)法識(shí)別符號(hào)字符名稱。“\ Cu”:普遍論證“\ Cx \ Cr”:重新讀取-init-file“\ e [11~”:“功能鍵1”在此示例中,Cu再次綁定到函數(shù)universal-argument。Cx Cr綁定到函數(shù)re-read-init-file,并且ESC [1 1~必須插入文本``功能鍵1''。完整的GNU Emacs樣式轉(zhuǎn)義序列是\ C-控制前綴\ M-元前綴\ e逃避角色\\反斜杠\“文字”\'文字'除了GNU Emacs樣式轉(zhuǎn)義序列之外,還有第二組反斜杠轉(zhuǎn)義:警報(bào)(鈴聲)\ b退格\ d刪除\ f表格飼料\ n換行\(zhòng) r \ n回車\ t水平標(biāo)簽\ v垂直標(biāo)簽\ nnnn八位字符,其值為八進(jìn)制值nnn(一到三位數(shù))\ xHH八位字符,其值為十六進(jìn)制值HH(一個(gè)或兩個(gè)十六進(jìn)制數(shù)字)輸入宏的文本時(shí),必須使用單引號(hào)或雙引號(hào)來(lái)表示宏定義。假設(shè)未加引號(hào)的文本是函數(shù)名稱。在宏體中,上面描述的反斜杠轉(zhuǎn)義擴(kuò)展了。反斜杠將引用宏文本中的任何其他字符,包括“和”。Bash允許使用bind builtin命令顯示或修改當(dāng)前的readline鍵綁定。可以在交互式使用期間通過(guò)使用來(lái)切換編輯模式set builtin命令的-o選項(xiàng)(參見下面的SHELL BUILTIN命令)。
Readline變量 ? Readline具有可用于進(jìn)一步定制其行為的變量。可以在inputrc文件中使用表單語(yǔ)句設(shè)置變量
設(shè)置變量名稱值除非另有說(shuō)明,否則readline變量可以取值On或Off(不考慮大小寫)。忽略無(wú)法識(shí)別的變量名稱。讀取變量值時(shí)為空或null值,“on”(不區(qū)分大小寫),“1”等于On。所有其他值等同于Off。變量及其默認(rèn)值為:鐘式(可聽)控制當(dāng)readline想要敲響終端鈴時(shí)發(fā)生的事情。如果設(shè)置為none,則readline永遠(yuǎn)不會(huì)響鈴。如果設(shè)置為可見,則readline使用可見鈴聲如果有的話。如果設(shè)置為可聽,則readline嘗試響鈴終端的鈴聲。bind-tty-special-chars(On)如果設(shè)置為On,則readline嘗試將內(nèi)核終端驅(qū)動(dòng)程序?qū)iT處理的控制字符綁定到其readline等效項(xiàng)。comment-begin(``#'')執(zhí)行readline insert-comment命令時(shí)插入的字符串。此命令綁定到emacs模式下的M-#和vi命令模式下的#。完成 - 忽略 - 案例(關(guān)閉)如果設(shè)置為On,則readline以不區(qū)分大小寫的方式執(zhí)行文件名匹配和完成。completion-prefix-display-length(0)無(wú)需修改即可顯示的可能完成列表的公共前綴的字符長(zhǎng)度。設(shè)置為大于零的值時(shí),常見在顯示可能的完成時(shí),超過(guò)此值的前綴將替換為省略號(hào)。completion-query-items(100)這確定何時(shí)查詢用戶查看由possible-completions命令生成的可能完成的數(shù)量。它可以設(shè)置為任何整數(shù)值大于或等于零。如果可能的完成次數(shù)大于或等于該變量的值,則詢問用戶是否他希望看到他們; 否則他們只是在終端上列出。convert-meta(On)如果設(shè)置為On,readline將通過(guò)剝離第8位并為轉(zhuǎn)義字符加前綴(將in字符轉(zhuǎn)換為第8位設(shè)置為ASCII鍵序列的字符效果,使用轉(zhuǎn)義作為元前綴)。禁用完成(關(guān)閉)如果設(shè)置為On,則readline將禁止字完成。完成字符將插入到行中,就像它們已映射到自插入一樣。編輯模式(emacs)控制readline是否以一組類似于Emacs或vi的鍵綁定開頭。編輯模式可以設(shè)置為emacs或vi。echo-control-characters(開)設(shè)置為On時(shí),在表示支持它的操作系統(tǒng)上,readline回顯與鍵盤生成的信號(hào)對(duì)應(yīng)的字符。啟用鍵盤(關(guān)閉)設(shè)置為On時(shí),readline將在調(diào)用時(shí)嘗試啟用應(yīng)用程序鍵盤。某些系統(tǒng)需要此功能才能啟用箭頭鍵。enable-meta-key(On)設(shè)置為On時(shí),readline將嘗試啟用終端聲稱在調(diào)用時(shí)支持的任何元修飾鍵。在許多終端上,元密鑰用于發(fā)送八位字符。expand-tilde(關(guān)閉)如果設(shè)置為On,則當(dāng)readline嘗試單詞完成時(shí)執(zhí)行波形擴(kuò)展。歷史保留點(diǎn)(關(guān)閉)如果設(shè)置為“開”,則歷史記錄代碼會(huì)嘗試將點(diǎn)放在使用previous-history或next-history檢索的每個(gè)歷史記錄行的相同位置。歷史大小(0)設(shè)置歷史列表中保存的最大歷史條目數(shù)。如果設(shè)置為零,則歷史列表中的條目數(shù)不受限制。水平滾動(dòng)模式(關(guān)閉)當(dāng)設(shè)置為On時(shí),使readline使用單行顯示,當(dāng)輸入長(zhǎng)于屏幕寬度時(shí),在單個(gè)屏幕行上水平滾動(dòng)輸入而不是包裝到新的行。input-meta(關(guān)閉)如果設(shè)置為On,則readline將啟用8位輸入(即,它不會(huì)從其讀取的字符中剝離高位),無(wú)論終端聲稱它是什么可以支持。名稱meta-flag是此變量的同義詞。isearch-terminators(``C- [C-J'')應(yīng)該終止增量搜索而不隨后將該字符作為命令執(zhí)行的字符串。如果沒有給出這個(gè)變量a值,字符ESC和CJ將終止增量搜索。keymap(emacs)設(shè)置當(dāng)前的readline鍵映射。有效鍵映射名稱的集合是emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-command和vi-insert。vi相當(dāng)于VI-命令; emacs相當(dāng)于emacs-standard。默認(rèn)值為emacs; 編輯模式的值也會(huì)影響默認(rèn)的鍵盤映射。標(biāo)記目錄(開)如果設(shè)置為On,則已完成的目錄名稱會(huì)附加斜杠。mark-modified-lines(Off)如果設(shè)置為“開”,則已修改的歷史記錄行將顯示前一個(gè)星號(hào)(*)。mark-symlinked-directories(Off)如果設(shè)置為On,則作為目錄的符號(hào)鏈接的已完成名稱會(huì)附加斜杠(取決于mark-directories的值)。match-hidden-files(On)此變量設(shè)置為On時(shí),會(huì)使readline匹配名稱以“。”開頭的文件。執(zhí)行文件名完成時(shí)(隱藏文件)。如果設(shè)置為Off,則領(lǐng)先`。' 必須由用戶提供要完成的文件名。menu-complete-display-prefix(關(guān)閉)如果設(shè)置為“開”,菜單完成將在循環(huán)列表之前顯示可能的完成列表的公共前綴(可能為空)。output-meta(關(guān)閉)如果設(shè)置為On,則readline將顯示直接設(shè)置第8位的字符,而不是帶有元前綴的轉(zhuǎn)義序列。頁(yè)面完成(開)如果設(shè)置為On,則readline使用內(nèi)部更類似的尋呼機(jī)一次顯示一組可能的完成。水平打印完成(關(guān)閉)如果設(shè)置為On,則readline將顯示匹配按字母順序水平排序的匹配,而不是屏幕下方。revert-all-at-newline(關(guān)閉)如果設(shè)置為On,則readline將在執(zhí)行accept-line返回之前撤消對(duì)歷史行的所有更改。默認(rèn)情況下,可以修改和保留歷史記錄行單個(gè)撤消列表調(diào)用readline。show-all-if-ambiguous(Off)這會(huì)改變完成函數(shù)的默認(rèn)行為。如果設(shè)置為On,則具有多個(gè)可能完成的單詞會(huì)導(dǎo)致匹配立即列出而不是響鈴。show-all-if-unmodified(Off)這會(huì)以類似于show-all-if-ambiguous的方式更改完成函數(shù)的默認(rèn)行為。如果設(shè)置為On,則具有多個(gè)可能的com-在沒有任何可能的部分完成的情況下(可能的完成不共享公共前綴)導(dǎo)致匹配立即列出而不是響鈴鐘聲。跳過(guò)完成文本(關(guān)閉)如果設(shè)置為On,則在將單個(gè)匹配插入到行中時(shí),這會(huì)改變默認(rèn)的完成行為。它只在中間執(zhí)行完成時(shí)才有效字。如果啟用,則readline不會(huì)在完成單詞后面的字符之后插入字符,所以單詞fol-低位光標(biāo)不重復(fù)。visible-stats(關(guān)閉)如果設(shè)置為On,則在列出可能的完成時(shí),會(huì)將表示stat(2)報(bào)告的文件類型的字符附加到文件名。
Readline條件構(gòu)造 ? Readline實(shí)現(xiàn)了與C預(yù)處理器的條件編譯功能類似的功能,允許執(zhí)行鍵綁定和變量設(shè)置 ? 作為測(cè)試的結(jié)果。使用了四種解析器指令。
$ if $ if結(jié)構(gòu)允許基于編輯模式,正在使用的終端或使用readline的應(yīng)用程序進(jìn)行綁定。測(cè)試文本延伸至線的終點(diǎn); 隔離它不需要任何字符。mode $ if指令的mode =形式用于測(cè)試readline是處于emacs還是vi模式。這可以與set keymap命令一起使用例如,僅當(dāng)readline以emacs模式開始時(shí)才在emacs-standard和emacs-ctlx鍵映射中設(shè)置綁定。術(shù)語(yǔ)術(shù)語(yǔ)=表單可用于包括特定于終端的鍵綁定,可能用于綁定終端的功能鍵輸出的鍵序列。關(guān)于這個(gè)詞在第一個(gè) - 之前,對(duì)終端的全名和終端名稱的部分測(cè)試=的右側(cè)。這允許太陽(yáng)匹配兩者例如,sun和sun-cmd。應(yīng)用應(yīng)用程序構(gòu)造用于包括特定于應(yīng)用程序的設(shè)置。每個(gè)使用readline庫(kù)的程序都會(huì)設(shè)置應(yīng)用程序名稱,并且ization文件可以測(cè)試特定值。這可用于將鍵序列綁定到對(duì)特定程序有用的函數(shù)。例如,以下內(nèi)容命令添加一個(gè)引用bash中當(dāng)前或上一個(gè)單詞的鍵序列:$如果Bash#引用當(dāng)前或上一個(gè)單詞“\ C-xq”:“\ eb \”\ ef \“”$ ENDIF$ endif此命令,如上例所示,終止$ if命令。$ else如果測(cè)試失敗,則執(zhí)行$ if指令的此分支中的命令。$包括該指令將單個(gè)文件名作為參數(shù),并從該文件中讀取命令和綁定。例如,以下指令將讀取/ etc / inputrc:$ include / etc / inputrc
搜索 ? Readline提供了用于搜索包含指定字符串的行的命令歷史記錄(請(qǐng)參閱下面的HISTORY)的命令。有兩種搜索模式:增量和 ? 非增量。
在用戶鍵入搜索字符串之前開始增量搜索。當(dāng)鍵入搜索字符串的每個(gè)字符時(shí),readline將顯示下一個(gè)條目到目前為止匹配字符串的歷史記錄。增量搜索僅需要所需的字符數(shù)來(lái)查找所需的歷史記錄條目。人物中存在的人物isearch-terminators變量的值用于終止增量搜索。如果尚未為該變量分配Escape和Control-J字符的值將終止增量搜索。Control-G將中止增量搜索并恢復(fù)原始行。搜索終止時(shí),包含的歷史條目搜索字符串成為當(dāng)前行。要在歷史記錄列表中查找其他匹配條目,請(qǐng)根據(jù)需要鍵入Control-S或Control-R。這將在歷史記錄中向后或向前搜索下一個(gè)條目匹配 - 到目前為止輸入的搜索字符串。綁定到readline命令的任何其他鍵序列將終止搜索并執(zhí)行該命令。例如,換行符將 - 修改搜索并接受該行,從而從歷史列表中執(zhí)行命令。Readline會(huì)記住最后一個(gè)增量搜索字符串。如果鍵入兩個(gè)Control-R而沒有任何插入字符定義新的搜索字符串,則記住任何搜索使用字符串。在開始搜索匹配的歷史記錄行之前,非增量搜索會(huì)讀取整個(gè)搜索字符串。搜索字符串可以由用戶鍵入或者是搜索字符串的一部分當(dāng)前行的內(nèi)容。
Readline命令名稱 ? 以下是命令的名稱列表以及它們綁定的默認(rèn)鍵序列。沒有附帶鍵序列的命令名稱不受限制 ? 默認(rèn)。在以下描述中,point指的是當(dāng)前光標(biāo)位置,而mark指的是set-mark命令保存的光標(biāo)位置。之間的文字 ? 點(diǎn)和標(biāo)記稱為區(qū)域。
移動(dòng)命令 ? 行首(Ca) ? 移動(dòng)到當(dāng)前行的開頭。 ? 行尾(Ce) ? 移到行尾。 ? forward-char(Cf) ? 向前移動(dòng)一個(gè)角色。 ? 反向字符(Cb) ? 移回一個(gè)角色。 ? 前向詞(Mf) ? 前進(jìn)到下一個(gè)單詞的結(jié)尾。單詞由字母數(shù)字字符(字母和數(shù)字)組成。 ? 后向詞(Mb) ? 移回當(dāng)前或上一個(gè)單詞的開頭。單詞由字母數(shù)字字符(字母和數(shù)字)組成。 ? 殼正向詞 ? 前進(jìn)到下一個(gè)單詞的結(jié)尾。單詞由非引用的shell元字符分隔。 ? 殼反向詞 ? 移回當(dāng)前或上一個(gè)單詞的開頭。單詞由非引用的shell元字符分隔。 ? 透明屏幕(Cl) ? 清除屏幕,將當(dāng)前行保留在屏幕頂部。使用參數(shù),刷新當(dāng)前行而不清除屏幕。 ? 重繪電流線 ? 刷新當(dāng)前行。
操縱歷史的命令 ? 接受(換行,返回) ? 無(wú)論光標(biāo)在哪里,都接受該行。如果此行非空,請(qǐng)根據(jù)HISTCONTROL變量的狀態(tài)將其添加到歷史列表中。如果 ? line是已修改的歷史記錄行,然后將歷史記錄行還原為其原始狀態(tài)。 ? 前歷史(Cp) ? 從歷史列表中獲取上一個(gè)命令,然后在列表中返回。 ? 次歷史(Cn) ? 從歷史列表中獲取下一個(gè)命令,在列表中向前移動(dòng)。 ? 歷史起點(diǎn)(M- <) ? 移至歷史記錄的第一行。 ? 歷史終結(jié)(M->) ? 移動(dòng)到輸入歷史記錄的末尾,即當(dāng)前輸入的行。 ? 反向搜索歷史(Cr) ? 從當(dāng)前行開始向后搜索,并根據(jù)需要在歷史記錄中“向上”移動(dòng)。這是增量搜索。 ? 前向搜索歷史(Cs) ? 從當(dāng)前行開始向前搜索,并根據(jù)需要在歷史記錄中“向下”移動(dòng)。這是增量搜索。 ? 非增量反向搜索歷史(Mp) ? 使用非增量搜索用戶提供的字符串向后搜索從當(dāng)前行開始的歷史記錄。 ? 非增量前向搜索歷史(Mn) ? 使用非增量搜索用戶提供的字符串向前搜索歷史記錄。 ? 歷史搜索前進(jìn) ? 在歷史記錄中搜索當(dāng)前行的起點(diǎn)和點(diǎn)之間的字符串。這是一種非增量搜索。 ? 歷史搜索落后 ? 在歷史記錄中向后搜索當(dāng)前行的開頭和點(diǎn)之間的字符串。這是一種非增量搜索。 ? yank-nth-arg(MCy) ? 將第一個(gè)參數(shù)插入上一個(gè)命令(通常是前一行的第二個(gè)字)。使用參數(shù)n,插入前一個(gè)第n個(gè)單詞 ? 命令(上一個(gè)命令中的單詞以單詞0開頭)。負(fù)參數(shù)插入上一個(gè)命令末尾的第n個(gè)單詞。一旦參數(shù)n為 ? 在計(jì)算中,提取參數(shù)就好像已經(jīng)指定了“!n”歷史擴(kuò)展一樣。 ? yank-last-arg(M-。,M-) ? 將最后一個(gè)參數(shù)插入上一個(gè)命令(上一個(gè)歷史記錄條目的最后一個(gè)單詞)。使用數(shù)字參數(shù),行為與yank-nth-arg完全相同。連續(xù) ? 調(diào)用yank-last-arg后退回歷史列表,依次插入每行的最后一個(gè)單詞(或參數(shù)指定的單詞)。任何 ? 提供給這些連續(xù)調(diào)用的數(shù)字參數(shù)決定了在歷史記錄中移動(dòng)的方向。一個(gè)負(fù)面的論點(diǎn)改變了他的方向 - ? 保守黨(后退或前鋒)。歷史擴(kuò)展工具用于提取最后一個(gè)參數(shù),就好像已經(jīng)指定了“!$”歷史擴(kuò)展一樣。 ? 殼擴(kuò)展線(MCe) ? 像shell一樣擴(kuò)展行。這將執(zhí)行別名和歷史記錄擴(kuò)展以及所有shell單詞擴(kuò)展。有關(guān)描述,請(qǐng)參閱下面的歷史擴(kuò)展 ? 歷史擴(kuò)張的歷史。 ? 歷史擴(kuò)展線(M- ^) ? 在當(dāng)前行上執(zhí)行歷史記錄擴(kuò)展。有關(guān)歷史記錄擴(kuò)展的說(shuō)明,請(qǐng)參閱下面的歷史記錄擴(kuò)展。 ? 魔術(shù)空間 ? 在當(dāng)前行上執(zhí)行歷史記錄擴(kuò)展并插入空格。有關(guān)歷史記錄擴(kuò)展的說(shuō)明,請(qǐng)參閱下面的歷史記錄擴(kuò)展。 ? 別名擴(kuò)展線 ? 在當(dāng)前行上執(zhí)行別名擴(kuò)展。有關(guān)別名擴(kuò)展的說(shuō)明,請(qǐng)參見上面的ALIASES。 ? 歷史和別名擴(kuò)展線 ? 在當(dāng)前行上執(zhí)行歷史記錄和別名擴(kuò)展。 ? insert-last-argument(M-。,M-) ? yank-last-arg的同義詞。 ? 操作并獲得下一個(gè)(Co) ? 接受當(dāng)前行以執(zhí)行并從歷史記錄中獲取相對(duì)于當(dāng)前行的下一行以進(jìn)行編輯。任何參數(shù)都會(huì)被忽略。 ? 編輯執(zhí)行命令(C-xC-e) ? 在當(dāng)前命令行上調(diào)用編輯器,并將結(jié)果作為shell命令執(zhí)行。Bash嘗試調(diào)用$ VISUAL,$ EDITOR和emacs作為編輯器 ? 訂購(gòu)。
更改文本的命令 ? delete-char(Cd) ? 刪除點(diǎn)上的字符。如果point位于行的開頭,則行中沒有字符,并且鍵入的最后一個(gè)字符未綁定 ? delete-char,然后返回EOF。 ? backward-delete-char(Rubout) ? 刪除光標(biāo)后面的字符。給定數(shù)字參數(shù)時(shí),將刪除的文本保存在kill ring上。 ? 前后 - 刪除 - 木炭 ? 刪除光標(biāo)下的字符,除非光標(biāo)位于行的末尾,在這種情況下,光標(biāo)后面的字符將被刪除。 ? 引用插入(Cq,Cv) ? 將逐字輸入的下一個(gè)字符添加到行中。例如,這是如何插入像Cq這樣的字符。 ? tab-insert(Cv TAB) ? 插入制表符。 ? 自插入(a,b,A,1,!,...) ? 插入鍵入的字符。 ? 轉(zhuǎn)置字符(Ct) ? 在角點(diǎn)前方向拖動(dòng)角色,然后向前移動(dòng)角色。如果point位于該行的末尾,那么這將轉(zhuǎn)換為兩者 ? 點(diǎn)之前的字符。否定論點(diǎn)沒有效果。 ? 轉(zhuǎn)置詞(Mt) ? 在點(diǎn)之前拖過(guò)單詞之前的單詞,也將點(diǎn)移動(dòng)到該單詞之上。如果point位于該行的末尾,則會(huì)轉(zhuǎn)換最后兩個(gè)單詞 ? 這條線。 ? upcase-word(Mu) ? 大寫當(dāng)前(或后續(xù))單詞。使用否定參數(shù),大寫前一個(gè)單詞,但不要移動(dòng)點(diǎn)。 ? downcase-word(M1) ? 小寫當(dāng)前(或后續(xù))單詞。使用否定參數(shù),小寫前一個(gè)單詞,但不要移動(dòng)點(diǎn)。 ? 大寫字(Mc) ? 將當(dāng)前(或后續(xù))單詞大寫。使用否定參數(shù),將前一個(gè)詞大寫,但不要移動(dòng)點(diǎn)。 ? 覆蓋模式 ? 切換覆蓋模式。使用顯式正數(shù)字參數(shù),切換到覆蓋模式。使用顯式非正數(shù)字參數(shù),切換到插入 ? 模式。此命令僅影響emacs模式; vi模式會(huì)以不同方式覆蓋。每次調(diào)用readline()都以插入模式啟動(dòng)。在覆蓋模式下,字符綁定 ? 自我插入在點(diǎn)處替換文本而不是將文本推向右側(cè)。綁定到backward-delete-char的字符用a替換點(diǎn)之前的字符 ? 空間。默認(rèn)情況下,此命令未綁定。
殺戮和Yanking ? 殺線(Ck) ? 將文本從點(diǎn)到終止。 ? 反向殺線(Cx Rubout) ? 向后殺到行的開頭。 ? unix-line-discard(Cu) ? 從點(diǎn)向后殺死到行的開頭。被殺死的文本保存在kill-ring中。 ? 殺,整線 ? 殺死當(dāng)前行上的所有字符,無(wú)論在哪里。 ? 殺字(Md) ? 從點(diǎn)到當(dāng)前單詞的結(jié)尾,或者如果在單詞之間,到下一個(gè)單詞的結(jié)尾。字邊界與前向字使用的邊界相同。 ? 反向殺詞(M-Rubout) ? 殺掉點(diǎn)后面的詞。字邊界與后向字使用的邊界相同。 ? shell-kill-word(Md) ? 從點(diǎn)到當(dāng)前單詞的結(jié)尾,或者如果在單詞之間,到下一個(gè)單詞的結(jié)尾。字邊界與shell-forward-word使用的邊界相同。 ? shell-backward-kill-word(M-Rubout) ? 殺掉點(diǎn)后面的詞。字邊界與shell-backward-word使用的邊界相同。 ? unix-word-rubout(Cw) ? 使用空格作為單詞邊界,殺掉單詞后面的單詞。被殺死的文本保存在kill-ring中。 ? UNIX的文件名,擦去 ? 使用空格和斜線字符作為單詞邊界,將單詞后面的單詞殺死。被殺死的文本保存在kill-ring中。 ? 刪除 - 水平空間(M- \) ? 刪除點(diǎn)周圍的所有空格和制表符。 ? 殺區(qū) ? 殺死當(dāng)前區(qū)域的文本。 ? 復(fù)制區(qū)域作為殺 ? 將區(qū)域中的文本復(fù)制到kill緩沖區(qū)。 ? 復(fù)制反向詞 ? 將點(diǎn)前的單詞復(fù)制到kill buffer。單詞邊界與后向單詞相同。 ? 復(fù)制正向詞 ? 將以下單詞復(fù)制到kill buffer。單詞邊界與前向單詞相同。 ? 猛拉(Cy) ? 將殺戮戒指的頂部放入緩沖點(diǎn)。 ? yank-pop(我的) ? 旋轉(zhuǎn)殺環(huán),并猛拉新的頂部。只能在yank或yank-pop之后工作。
數(shù)字參數(shù) ? 數(shù)字參數(shù)(M-0,M-1,...,M--) ? 將此數(shù)字添加到已累積的參數(shù)中,或啟動(dòng)新參數(shù)。M--開始一個(gè)負(fù)面的論點(diǎn)。 ? 通用參數(shù)的 ? 這是指定參數(shù)的另一種方法。如果此命令后跟一個(gè)或多個(gè)數(shù)字,可選地帶有前導(dǎo)減號(hào),則這些數(shù)字定義參數(shù)。 ? 如果該命令后跟數(shù)字,則再次執(zhí)行universal-argument將結(jié)束數(shù)字參數(shù),否則將被忽略。作為一種特殊情況,如果是這個(gè)命令 ? 緊接著是一個(gè)既不是數(shù)字也不是減號(hào)的字符,下一個(gè)命令的參數(shù)計(jì)數(shù)乘以4。參數(shù)計(jì)數(shù)是ini ? 因此,第一次執(zhí)行此函數(shù)會(huì)使參數(shù)計(jì)數(shù)為4,第二次使參數(shù)計(jì)數(shù)為16,依此類推。
完成 ? 完成(TAB) ? 嘗試在點(diǎn)之前對(duì)文本執(zhí)行完成。Bash嘗試完成將文本視為變量(如果文本以$開頭),用戶名(如果是文本 ? 以?)開頭,主機(jī)名(如果文本以@開頭)或命令(包括別名和函數(shù))依次開始。如果這些都不產(chǎn)生匹配,則文件名完成 ? 嘗試。 ? 可能完成(M-?) ? 在點(diǎn)之前列出文本的可能完成情況。 ? 插入完成(M- *) ? 在可能完成生成的點(diǎn)之前插入文本的所有完成。 ? 菜單完成 ? 與完成類似,但用可能的完成列表中的單個(gè)匹配替換要完成的單詞。重復(fù)執(zhí)行菜單完成步驟 ? 通過(guò)可能的完成列表,依次插入每個(gè)匹配。在完成列表的最后,響鈴響起(根據(jù)鐘式設(shè)置) ? 并恢復(fù)原始文本。n的參數(shù)在匹配列表中向前移動(dòng)n個(gè)位置; 可以使用否定參數(shù)向后移動(dòng) ? 名單。此命令旨在綁定到TAB,但默認(rèn)情況下不綁定。 ? 菜單完成后向 ? 與菜單完成相同,但在可能的完成列表中向后移動(dòng),就像菜單完成被賦予了否定參數(shù)一樣。這個(gè)命令是 ? 默認(rèn)情況下不綁定。 ? 刪除 - 炭或列表 ? 如果不在行的開頭或結(jié)尾(如delete-char),則刪除光標(biāo)下的字符。如果在行尾,行為與可能的行為相同 ? pletions。默認(rèn)情況下,此命令未綁定。 ? 完整文件名(M- /) ? 在點(diǎn)之前的文本上嘗試完成文件名。 ? 可能的文件名完成次數(shù)(Cx /) ? 在點(diǎn)之前列出文本的可能完成,將其視為文件名。 ? 完整用戶名(M-~) ? 在點(diǎn)之前嘗試完成文本,將其視為用戶名。 ? 可能的用戶名完成次數(shù)(Cx~) ? 在點(diǎn)之前列出文本的可能完成,將其視為用戶名。 ? 完全變量(M- $) ? 在點(diǎn)之前嘗試完成文本,將其視為shell變量。 ? 可能變量完成(Cx $) ? 在點(diǎn)之前列出文本的可能完成,將其視為shell變量。 ? 完整主機(jī)名(M- @) ? 在點(diǎn)之前嘗試完成文本,將其視為主機(jī)名。 ? 可能的主機(jī)名完成次數(shù)(Cx @) ? 在點(diǎn)之前列出文本的可能完成,將其視為主機(jī)名。 ? 完成命令(M-!) ? 在點(diǎn)之前嘗試完成文本,將其視為命令名稱。命令完成嘗試將文本與別名,保留字,shell函數(shù)匹配 ? tions,shell builtins,最后是可執(zhí)行文件名,按順序排列。 ? 可能的命令完成(Cx!) ? 在點(diǎn)之前列出文本的可能完成,將其視為命令名稱。 ? 動(dòng)態(tài)完整歷史(M-TAB) ? 在點(diǎn)之前嘗試完成文本,將文本與歷史列表中的行進(jìn)行比較,以獲得可能的完成匹配。 ? dabbrev-擴(kuò)大 ? 嘗試在點(diǎn)之前的文本上完成菜單,將文本與歷史列表中的行進(jìn)行比較,以獲得可能的完成匹配。 ? 完成括號(hào)(M- {) ? 執(zhí)行文件名完成并插入括號(hào)內(nèi)的可能完成列表,以便shell可以使用該列表(參見上面的Brace Expansion)。
鍵盤宏 ? start-kbd-macro(Cx() ? 開始保存鍵入當(dāng)前鍵盤宏的字符。 ? end-kbd-macro(Cx)) ? 停止保存鍵入當(dāng)前鍵盤宏的字符并存儲(chǔ)定義。 ? call-last-kbd-macro(Cx e) ? 重新執(zhí)行最后定義的鍵盤宏,方法是使宏中的字符顯示為在鍵盤上鍵入。
雜 ? re-read-init-file(Cx Cr) ? 讀入inputrc文件的內(nèi)容,并合并在那里找到的任何綁定或變量賦值。 ? 中止(Cg) ? 中止當(dāng)前編輯命令并振鈴終端鈴(取決于鈴聲設(shè)置)。 ? do-uppercase-version(Ma,Mb,Mx,...) ? 如果元化字符x為小寫,請(qǐng)運(yùn)行綁定到相應(yīng)大寫字符的命令。 ? 前綴元(ESC) ? Metafy下一個(gè)字符輸入。ESC f相當(dāng)于Meta-f。 ? 撤消(C-_,Cx Cu) ? 增量撤消,分別記住每一行。 ? 恢復(fù)線(先生) ? 撤消對(duì)此行所做的所有更改。這就像執(zhí)行undo命令足夠多次以將行返回到其初始狀態(tài)。 ? 波浪擴(kuò)展(M-&) ? 對(duì)當(dāng)前單詞執(zhí)行波浪擴(kuò)展。 ? 設(shè)定標(biāo)記(C- @,M- <空格>) ? 將標(biāo)記設(shè)置為該點(diǎn)。如果提供了數(shù)字參數(shù),則標(biāo)記將設(shè)置為該位置。 ? 交換點(diǎn)和標(biāo)記(Cx Cx) ? 用標(biāo)記交換點(diǎn)。當(dāng)前光標(biāo)位置設(shè)置為保存位置,舊光標(biāo)位置保存為標(biāo)記。 ? 字符搜索(C-]) ? 讀取一個(gè)字符,并將點(diǎn)移動(dòng)到該字符的下一個(gè)匹配項(xiàng)。否定計(jì)數(shù)搜索先前發(fā)生的事件。 ? 字符搜索后退(MC-]) ? 讀取一個(gè)字符,并將點(diǎn)移動(dòng)到該字符的上一個(gè)匹配項(xiàng)。否定計(jì)數(shù)搜索后續(xù)發(fā)生的事件。 ? 跳過(guò)-CSI-序列 ? 讀取足夠多的字符以使用多鍵序列,例如為Home和End等鍵定義的序列。此類序列以控制序列指示符(CSI)開頭, ? 通常ESC- [。如果此序列綁定到“\ [”,則生成此類序列的鍵將無(wú)效,除非明確綁定到readline命令,而不是插入 - ? 將雜散字符放入編輯緩沖區(qū)。默認(rèn)情況下,這是未綁定的,但通常綁定到ESC- [。 ? 插入注釋(M-#) ? 如果沒有數(shù)字參數(shù),則會(huì)在當(dāng)前行的開頭插入readline comment-begin變量的值。如果提供了數(shù)字參數(shù),則為此 ? 命令用作切換:如果行開頭的字符與comment-begin的值不匹配,則插入值,否則輸入字符 ? comment-begin從行的開頭刪除。在任何一種情況下,都接受該行,就像輸入換行符一樣。comment-begin的默認(rèn)值 ? 導(dǎo)致此命令使當(dāng)前行成為shell注釋。如果數(shù)字參數(shù)導(dǎo)致刪除注釋字符,則該行將由執(zhí)行 ? 貝殼。 ? 全球字(Mg) ? 點(diǎn)之前的單詞被視為路徑名擴(kuò)展的模式,隱式附加星號(hào)。此模式用于生成匹配文件列表 ? 可能的完成名稱。 ? glob-expand-word(Cx *) ? 點(diǎn)之前的單詞被視為路徑名擴(kuò)展的模式,并插入匹配文件名列表,替換單詞。如果是數(shù)字參數(shù) ? 如果提供,則在路徑名擴(kuò)展之前附加星號(hào)。 ? glob-list-expansions(Cx g) ? 將顯示由glob-expand-word生成的擴(kuò)展列表,并重新繪制該行。如果提供了數(shù)字參數(shù),則為星號(hào) ? 在路徑名擴(kuò)展之前附加。 ? 翻斗功能 ? 將所有函數(shù)及其鍵綁定打印到readline輸出流。如果提供了數(shù)字參數(shù),則輸出的格式可以是這樣 ? 成為inputrc文件的一部分。 ? 翻斗變量 ? 將所有可設(shè)置的readline變量及其值打印到readline輸出流。如果提供了數(shù)字參數(shù),則以這種方式格式化輸出 ? 它可以成為inputrc文件的一部分。 ? 翻斗宏 ? 打印綁定到宏的所有readline鍵序列及其輸出的字符串。如果提供了數(shù)字參數(shù),則輸出的格式將使其格式化 ? 可以成為inputrc文件的一部分。 ? display-shell-version(Cx Cv) ? 顯示有關(guān)當(dāng)前bash實(shí)例的版本信息。
可編程完成 ? 當(dāng)嘗試使用完整內(nèi)置函數(shù)定義完成規(guī)范(compspec)的命令的參數(shù)時(shí),單詞完成(參見SHELL ? 下面的BUILTIN命令),調(diào)用可編程完成工具。
首先,識(shí)別命令名稱。如果命令字是空字符串(在空行的開頭嘗試完成),則使用-E定義任何compspec使用完成選項(xiàng)。如果已為該命令定義了compspec,則compspec用于生成該單詞的可能完成列表。如果命令word是完整路徑名,首先搜索完整路徑名的compspec。如果沒有找到完整路徑名的compspec,則嘗試查找compspec在最后的斜線之后的部分。如果這些搜索沒有導(dǎo)致compspec,則使用-D選項(xiàng)完成定義的任何compspec都將用作默認(rèn)值。找到compspec后,它將用于生成匹配單詞列表。如果未找到compspec,則完成上面所述的默認(rèn)bash完成 - 執(zhí)行。首先,使用compspec指定的操作。僅返回以完成的單詞為前綴的匹配。當(dāng)-f或-d選項(xiàng)用于文件時(shí) - 名稱或目錄名稱完成后,shell變量FIGNORE用于過(guò)濾匹配項(xiàng)。接下來(lái)生成由路徑名擴(kuò)展模式指定到-G選項(xiàng)的任何完成。模式生成的單詞不需要與正在完成的單詞匹配。GLOBIGNORE shell變量不用于過(guò)濾匹配項(xiàng),但使用了FIGNORE變量。接下來(lái),將考慮指定為-W選項(xiàng)的參數(shù)的字符串。首先使用IFS特殊變量中的字符將字符串拆分為分隔符。貝殼報(bào)價(jià)很榮幸。然后使用括號(hào)擴(kuò)展,波浪擴(kuò)展,參數(shù)和變量擴(kuò)展,命令替換和算術(shù)擴(kuò)展來(lái)擴(kuò)展每個(gè)單詞如上所述在擴(kuò)展中。使用上面在Word Splitting下描述的規(guī)則拆分結(jié)果。擴(kuò)展的結(jié)果是前綴匹配的單詞正在完成,匹配的單詞成為可能的完成。生成這些匹配項(xiàng)后,將調(diào)用使用-F和-C選項(xiàng)指定的任何shell函數(shù)或命令。當(dāng)調(diào)用命令或函數(shù)時(shí),COMP_LINE,COMP_POINT,COMP_KEY和COMP_TYPE變量分配值如上所述在Shell變量下。如果正在調(diào)用shell函數(shù),則為COMP_WORDS和COMP_CWORD變量也設(shè)置。調(diào)用函數(shù)或命令時(shí),第一個(gè)參數(shù)是參數(shù)完成的命令的名稱,第二個(gè)參數(shù)參數(shù)是正在完成的單詞,第三個(gè)參數(shù)是在當(dāng)前命令行上完成的單詞之前的單詞。沒有過(guò)濾生成的com-反對(duì)完成的詞語(yǔ)被執(zhí)行; 函數(shù)或命令在生成匹配時(shí)具有完全的自由度。首先調(diào)用使用-F指定的任何函數(shù)。該函數(shù)可以使用任何shell工具,包括下面描述的compgen,來(lái)生成匹配。它必須將可能的完成放在COMPREPLY數(shù)組變量中。接下來(lái),在與命令替換等效的環(huán)境中調(diào)用使用-C選項(xiàng)指定的任何命令。它應(yīng)該打印一個(gè)完成列表,每行一個(gè),到標(biāo)準(zhǔn)輸出。如有必要,可以使用反斜杠來(lái)轉(zhuǎn)義換行符。生成所有可能的完成后,將使用-X選項(xiàng)指定的任何過(guò)濾器應(yīng)用于列表。過(guò)濾器是用于路徑名擴(kuò)展的模式;模式中的a&替換為正在完成的單詞的文本。文字&可以用反斜杠逃脫; 在嘗試匹配之前刪除反斜杠。任何與模式匹配的完成都將從列表中刪除。領(lǐng)先!否定了這種模式; 在這種情況下,任何與模式不匹配的完成都將被刪除。最后,將使用-P和-S選項(xiàng)指定的任何前綴和后綴添加到完成列表的每個(gè)成員,并將結(jié)果返回到readline完成代碼作為可能的完成列表。如果先前應(yīng)用的操作未生成任何匹配項(xiàng),并且在定義compspec時(shí)提供了-o dirnames選項(xiàng)以完成,則目錄名稱完成為嘗試。如果在定義compspec時(shí)提供-o plusdirs選項(xiàng)以完成,則嘗試完成目錄名稱,并將任何匹配添加到另一個(gè)的結(jié)果中動(dòng)作。默認(rèn)情況下,如果找到compspec,它生成的任何內(nèi)容都將作為完整的可能完成集返回到完成代碼。默認(rèn)的bash完成不是嘗試,并禁用文件名完成的readline默認(rèn)值。如果在定義compspec時(shí)提供了-o bashdefault選項(xiàng)以完成,則bash默認(rèn)如果compspec不生成匹配,則嘗試完成。如果在定義compspec時(shí)提供-o default選項(xiàng)以完成,則readline的默認(rèn)選項(xiàng)為如果compspec(以及,如果嘗試,默認(rèn)的bash完成)不生成匹配,則將執(zhí)行。當(dāng)compspec指示需要完成目錄名稱時(shí),可編程完成函數(shù)強(qiáng)制readline將斜杠附加到已完成的名稱,這些名稱是sym-bolic鏈接到目錄,受標(biāo)記目錄readline變量值的限制,無(wú)論mark-symlinked-directories readline變量的設(shè)置如何。有一些動(dòng)態(tài)修改完成的支持。當(dāng)與使用完整-D指定的默認(rèn)完成結(jié)合使用時(shí),這非常有用。這是可能的對(duì)于作為完成處理程序執(zhí)行的shell函數(shù),表示應(yīng)該通過(guò)返回124的退出狀態(tài)來(lái)重試完成。如果shell函數(shù)返回124,并更改與正在嘗試完成的命令相關(guān)的compspec(作為執(zhí)行該函數(shù)時(shí)的第一個(gè)參數(shù)提供),可編程的pletion從頭開始重新啟動(dòng),嘗試為該命令找到新的compspec。這允許在完成時(shí)動(dòng)態(tài)構(gòu)建一組完成嘗試,而不是一次性加載。例如,假設(shè)有一個(gè)compspec庫(kù),每個(gè)都保存在與命令名對(duì)應(yīng)的文件中,以下默認(rèn)完成函數(shù)將動(dòng)態(tài)加載完成:_completion_loader(){。“/etc/bash_completion.d/$1.sh”> / dev / null 2>&1 &&返回124}完成-D -F _completion_loader
歷史 ? 啟用set builtin的-o history選項(xiàng)后,shell將提供對(duì)命令歷史記錄的訪問,該命令歷史記錄是先前鍵入的命令列表。HISTSIZE的價(jià)值 ? 變量用作要保存在歷史列表中的命令數(shù)。保存最后一個(gè)HISTSIZE命令的文本(默認(rèn)為500)。shell將每個(gè)命令存儲(chǔ)在 ? 參數(shù)和變量擴(kuò)展之前的歷史列表(參見上面的EXPANSION)但是在執(zhí)行歷史擴(kuò)展之后,受shell變量HISTIGNORE的值的限制 ? 和HISTCONTROL。
在啟動(dòng)時(shí),歷史記錄從變量HISTFILE(默認(rèn)為?/ .bash_history)命名的文件中初始化。如果nec-,則截?cái)嘤蒆ISTFILE值命名的文件essary,包含不超過(guò)HISTFILESIZE值指定的行數(shù)。讀取歷史文件時(shí),以歷史注釋字符開頭的行緊接著一個(gè)數(shù)字被解釋為前一個(gè)歷史記錄行的時(shí)間戳。可選擇顯示這些時(shí)間戳,具體取決于HIST的值 - TIMEFORMAT變量。當(dāng)交互式shell退出時(shí),最后的$ HISTSIZE行將從歷史列表復(fù)制到$ HISTFILE。如果啟用了histappend shell選項(xiàng)(請(qǐng)參閱在下面的SHELL BUILTIN COMMANDS下對(duì)shopt的描述),這些行被附加到歷史文件中,否則將覆蓋歷史文件。如果未設(shè)置HISTFILE,或如果歷史文件不可寫,則不保存歷史記錄。如果設(shè)置了HISTTIMEFORMAT變量,則會(huì)將時(shí)間戳寫入歷史文件,并使用歷史記錄編寫可以在shell會(huì)話中保留它們。這使用歷史注釋字符來(lái)區(qū)分時(shí)間戳與其他歷史記錄行。保存后歷史記錄,歷史文件被截?cái)酁榘怀^(guò)HISTFILESIZE行。如果未設(shè)置HISTFILESIZE,則不執(zhí)行截?cái)唷?nèi)置命令fc(參見下面的SHELL BUILTIN命令)可用于列出或編輯和重新執(zhí)行歷史列表的一部分。內(nèi)置的歷史可能用于dis-播放或修改歷史列表并操縱歷史文件。使用命令行編輯時(shí),搜索命令在每個(gè)提供訪問權(quán)限的編輯模式下可用歷史清單。shell允許控制在歷史列表中保存哪些命令。可以將HISTCONTROL和HISTIGNORE變量設(shè)置為使shell僅保存一部分輸入的命令。cmdhist shell選項(xiàng)(如果啟用)會(huì)導(dǎo)致shell嘗試在同一歷史記錄條目中保存多行命令的每一行,并添加一個(gè)必要時(shí)冒號(hào)以保持句法正確性。lithist shell選項(xiàng)使shell使用嵌入的換行符而不是分號(hào)來(lái)保存命令。看到有關(guān)設(shè)置和取消設(shè)置shell選項(xiàng)的信息,請(qǐng)參閱SHELL BUILTIN COMMANDS下面內(nèi)置的shopt的說(shuō)明。
歷史擴(kuò)張 ? shell支持歷史記錄擴(kuò)展功能,類似于csh中的歷史記錄擴(kuò)展。本節(jié)介紹可用的語(yǔ)法功能。這個(gè)功能是 ? 默認(rèn)情況下為交互式shell啟用,并且可以使用set builtin命令的+ H選項(xiàng)禁用(請(qǐng)參閱下面的SHELL BUILTIN命令)。非交互式shell ? 默認(rèn)不執(zhí)行歷史記錄擴(kuò)展。
歷史擴(kuò)展將歷史列表中的單詞引入輸入流,使得重復(fù)命令變得容易,將前一個(gè)命令的參數(shù)插入到當(dāng)前輸入行,或快速修復(fù)以前命令中的錯(cuò)誤。在讀取完整行之后,在shell將其分解為單詞之前立即執(zhí)行歷史記錄擴(kuò)展。它分兩部分進(jìn)行。首先是確定在替換期間使用歷史列表中的哪一行。第二種是選擇該行的部分以包含在當(dāng)前行中。從中選擇的行歷史是事件,并且該行的部分是單詞。各種修飾符可用于操縱所選單詞。這條線被打破了單詞與讀取輸入時(shí)的方式相同,因此用引號(hào)括起來(lái)的幾個(gè)由元字符分隔的單詞被認(rèn)為是一個(gè)單詞。歷史擴(kuò)展是介紹 - 由歷史擴(kuò)張人物的外觀決定,這是!默認(rèn)情況下。只有反斜杠(\)和單引號(hào)才能引用歷史記錄擴(kuò)展字符。如果在歷史擴(kuò)展字符后立即找到,則幾個(gè)字符會(huì)禁止歷史擴(kuò)展,即使它沒有引用:空格,制表符,換行符,回車符和=。如果啟用了extglob shell選項(xiàng),(也將禁止擴(kuò)展。可以使用內(nèi)置shopt設(shè)置的幾個(gè)shell選項(xiàng)來(lái)定制歷史擴(kuò)展的行為。如果啟用了histverify shell選項(xiàng)(請(qǐng)參閱說(shuō)明如下所示的shopt內(nèi)置),并且正在使用readline,歷史替換不會(huì)立即傳遞給shell解析器。而是將擴(kuò)展的行重新加載到readline編輯緩沖區(qū)用于進(jìn)一步修改。如果正在使用readline,并且啟用了histreedit shell選項(xiàng),則將重新加載失敗的歷史記錄替換進(jìn)入readline編輯緩沖區(qū)進(jìn)行校正。history builtin命令的-p選項(xiàng)可用于查看歷史擴(kuò)展在使用之前將執(zhí)行的操作。-s對(duì)內(nèi)置歷史記錄的選項(xiàng)可用于將命令添加到歷史列表的末尾而不實(shí)際執(zhí)行它們,以便它們可用于后續(xù)調(diào)用。shell允許控制歷史擴(kuò)展機(jī)制使用的各種字符(參見Shell變量下面的histchars描述)。shell使用了歷史記錄注釋字符,用于在編寫歷史文件時(shí)標(biāo)記歷史時(shí)間戳。
活動(dòng)指示人 ? 事件指示符是對(duì)歷史列表中命令行條目的引用。除非參考是絕對(duì)的,否則事件與歷史中的當(dāng)前位置相關(guān) ? 名單。
!啟動(dòng)歷史記錄替換,除非后跟空格,換行符,回車符,=或(當(dāng)使用內(nèi)置shopt啟用extglob shell選項(xiàng)時(shí))。!n請(qǐng)參閱命令行n。!-n請(qǐng)參閱當(dāng)前命令減去n。!請(qǐng)參閱上一個(gè)命令。這是`!-1'的同義詞。!串請(qǐng)參閱以字符串開頭的歷史列表中當(dāng)前位置之前的最新命令。!?串[?]請(qǐng)參閱包含字符串的歷史記錄列表中當(dāng)前郵件之前的最新命令。尾隨?如果跟隨字符串,則可以省略通過(guò)換行符。^ ^ STRING1 ^字符串2快速替換。重復(fù)上一個(gè)命令,將string1替換為string2。相當(dāng)于``!!:s / string1 / string2 /''(參見下面的修飾符)。!#到目前為止輸入的整個(gè)命令行。
Word指示符 ? Word指示符用于從事件中選擇所需的單詞。答:將事件規(guī)范與單詞指示符分開。如果單詞指示符可以省略 ? 以^,$,, - 或%開頭。單詞從行的開頭編號(hào),第一個(gè)單詞用0(零)表示。單詞被插入當(dāng)前行 ? 由單個(gè)空格分隔。
0(零)第0個(gè)字。對(duì)于shell,這是命令字。n第n個(gè)字。^第一個(gè)參數(shù)。也就是說(shuō),單詞1。$最后一個(gè)論點(diǎn)。%這個(gè)詞匹配最近的`?string?' 搜索。xy各種單詞; `-y'縮寫為'0-y'。*所有的話,但第0。這是“1- $”的同義詞。如果事件中只有一個(gè)單詞,則使用*不是錯(cuò)誤; 返回空字符串那種情況。x *縮寫x- $。x-縮寫x- $喜歡x *,但省略了最后一個(gè)單詞。如果提供的字指示符沒有事件規(guī)范,則將上一個(gè)命令用作事件。
修飾符 ? 在可選的單詞指示符之后,可能會(huì)出現(xiàn)一個(gè)或多個(gè)以下修飾符的序列,每個(gè)修飾符前面都有一個(gè)“:”。
h刪除尾隨文件名組件,只留下頭部。t刪除所有前導(dǎo)文件名組件,留下尾部。r刪除表單.xxx的尾隨后綴,保留基本名稱。e刪除除尾隨后綴之外的所有內(nèi)容。p打印新命令但不執(zhí)行它。引用替換的單詞,逃避進(jìn)一步的替換。x引用替換單詞與q一樣,但在空白和換行符處分成單詞。S /老/新/在事件行中替換new為第一次出現(xiàn)的old。可以使用任何分隔符代替/。最終分隔符是可選的,如果它是最后一個(gè)字符 - 事件線之一。可以使用單個(gè)反斜杠以舊的和新的引用分隔符。如果&出現(xiàn)在新的,它將被舊的替換。一個(gè)反斜杠就會(huì)引用&。如果old為null,則將其設(shè)置為最后一個(gè)舊的替換,或者,如果沒有發(fā)生先前的歷史記錄替換,則為!?string [?]搜索中的最后一個(gè)字符串。&重復(fù)之前的替換。g導(dǎo)致在整個(gè)事件行上應(yīng)用更改。它與`:s'(例如,`:gs / old / new /')或`:&'一起使用。如果與`:s'一起使用,任何分隔符都可以用于代替/,如果它是事件行的最后一個(gè)字符,則最終分隔符是可選的。a可以用作g的同義詞。G對(duì)事件行中的每個(gè)單詞應(yīng)用以下`s'修飾符一次。
SHELL BUILTIN命令 ? 除非另有說(shuō)明,否則本節(jié)中記錄的每個(gè)內(nèi)置命令都是接受選項(xiàng) - 接受 - 表示選項(xiàng)的結(jié)束。:,真的,假的, ? 并且測(cè)試內(nèi)置不接受選項(xiàng)而不接受 - 特別是。exit,logout,break,continue,let和shift builtins接受并處理以...開頭的參數(shù) ? - 無(wú)需 - 。其他接受參數(shù)但未指定為接受選項(xiàng)的內(nèi)置函數(shù)解釋以 - 作為無(wú)效選項(xiàng)和require開頭的參數(shù) ? - 防止這種解釋。 ? :[arg uments] ? 沒有效果; 除擴(kuò)展參數(shù)和執(zhí)行任何指定的重定向之外,該命令不執(zhí)行任何操作。返回零退出代碼。
。文件名[參數(shù)]源文件名[參數(shù)]在當(dāng)前shell環(huán)境中從filename讀取并執(zhí)行命令,并返回從filename執(zhí)行的最后一個(gè)命令的退出狀態(tài)。如果文件名沒有包含斜杠,PATH中的文件名用于查找包含filename的目錄。在PATH中搜索的文件不需要是可執(zhí)行的。當(dāng)bash不在時(shí)posix模式,如果在PATH中找不到文件,則搜索當(dāng)前目錄。如果關(guān)閉shopt builtin命令的sourcepath選項(xiàng),則PATH不會(huì)搜索。如果提供了任何參數(shù),則在執(zhí)行文件名時(shí)它們將成為位置參數(shù)。否則,位置參數(shù)不變。該返回狀態(tài)是腳本中退出的最后一個(gè)命令的狀態(tài)(如果沒有執(zhí)行命令,則為0),如果找不到或無(wú)法讀取文件名,則返回false。別名[-p] [name [= value] ...]沒有參數(shù)的別名或帶-p選項(xiàng)的別名在標(biāo)準(zhǔn)輸出上以別名name = value的形式打印別名列表。提供參數(shù)時(shí),別名為為每個(gè)給出其值的名稱定義。當(dāng)別名展開時(shí),值的尾隨空格會(huì)導(dǎo)致檢查下一個(gè)單詞的別名替換。對(duì)于每一個(gè)參數(shù)列表中沒有提供值的名稱,將打印別名的名稱和值。除非給出沒有別名的名稱,否則別名返回true已定義。bg [jobspec ...]在后臺(tái)恢復(fù)每個(gè)暫停的作業(yè)jobspec,就好像它是以&開頭的一樣。如果jobspec不存在,則使用shell的當(dāng)前作業(yè)概念。BGjobspec返回0,除非在禁用作業(yè)控制時(shí)運(yùn)行,或者在啟用作業(yè)控制的情況下運(yùn)行時(shí),未找到任何指定的jobspec或在沒有作業(yè)控制的情況下啟動(dòng)特倫。綁定[-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顯示當(dāng)前讀取鍵和函數(shù)綁定,將鍵序列綁定到readline函數(shù)或宏,或設(shè)置readline變量。每個(gè)非選項(xiàng)參數(shù)都是a命令,因?yàn)樗鼘⒊霈F(xiàn)在.inputrc中,但每個(gè)綁定或命令必須作為單獨(dú)的參數(shù)傳遞; 例如,''\ Cx \ Cr“:重新讀取-init-file'。選項(xiàng),如果支持合作,具有以下含義:-m keymap使用keymap作為后續(xù)綁定影響的鍵映射。可接受的鍵映射名稱是emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-move,vi-command和vi-insert。vi相當(dāng)于vi-command; emacs相當(dāng)于emacs-standard。-l列出所有readline函數(shù)的名稱。-p以可重新讀取的方式顯示readline函數(shù)名稱和綁定。-P列出當(dāng)前的readline函數(shù)名稱和綁定。-s顯示綁定到宏的readline鍵序列以及它們輸出的字符串,以便可以重新讀取它們。-S顯示綁定到宏的readline鍵序列及其輸出的字符串。-v以可重新讀取的方式顯示readline變量名稱和值。-V列出當(dāng)前的readline變量名稱和值。-f文件名從文件名中讀取鍵綁定。-q功能查詢哪些鍵調(diào)用命名函數(shù)。-u功能取消綁定綁定到指定函數(shù)的所有鍵。-r keyseq刪除keyseq的所有當(dāng)前綁定。-x keyseq:shell-command導(dǎo)致在輸入keyseq時(shí)執(zhí)行shell命令。執(zhí)行shell-command時(shí),shell將READLINE_LINE變量設(shè)置為readline行緩沖區(qū)和READLINE_POINT變量到插入點(diǎn)的當(dāng)前位置。如果執(zhí)行的命令更改了READLINE_LINE的值或者READLINE_POINT,這些新值將反映在編輯狀態(tài)中。除非給出無(wú)法識(shí)別的選項(xiàng)或發(fā)生錯(cuò)誤,否則返回值為0。休息[n]從for,while,until或select循環(huán)中退出。如果指定了n,則中斷n個(gè)級(jí)別。n必須≥1。如果n大于封閉循環(huán)的數(shù)量,則全部退出封閉循環(huán)。當(dāng)n≤0時(shí),返回值不為零; 否則,break返回0值。內(nèi)置shell-builtin [參數(shù)]執(zhí)行指定的shell內(nèi)置,傳遞參數(shù),并返回其退出狀態(tài)。這在定義名稱與shell相同的函數(shù)時(shí)很有用內(nèi)置,保留功能內(nèi)置功能。cd builtin通常以這種方式重新定義。如果是shell-builtin,則返回狀態(tài)為false不是shell內(nèi)置命令。來(lái)電者[expr]返回任何活動(dòng)子例程調(diào)用的上下文(shell函數(shù)或使用。或source builtins執(zhí)行的腳本)。如果沒有expr,調(diào)用者將顯示行號(hào)和當(dāng)前子程序調(diào)用的源文件名。如果提供非負(fù)整數(shù)作為expr,則調(diào)用者顯示行號(hào),子例程名稱和源文件對(duì)應(yīng)于當(dāng)前執(zhí)行調(diào)用堆棧中的該位置。例如,可以使用該額外信息來(lái)打印堆棧跟蹤。目前的框架是除非shell沒有執(zhí)行子例程調(diào)用或者expr不對(duì)應(yīng)于調(diào)用堆棧中的有效位置,否則返回值為0。cd [-L | [-P [-e]]] [dir]將當(dāng)前目錄更改為dir。變量HOME是默認(rèn)目錄。變量CDPATH定義包含dir的目錄的搜索路徑。替代CDPATH中的目錄名用冒號(hào)(:)分隔。CDPATH中的空目錄名與當(dāng)前目錄相同,即“。”。如果dir以斜線開頭(/),然后不使用CDPATH。-P選項(xiàng)表示使用物理目錄結(jié)構(gòu)而不是遵循符號(hào)鏈接(另請(qǐng)參閱set builtin的-P選項(xiàng))命令); -L選項(xiàng)強(qiáng)制遵循符號(hào)鏈接。如果-e選項(xiàng)隨-P提供,并且當(dāng)前工作目錄無(wú)法成功確定成功更改目錄后,cd將返回不成功的狀態(tài)。 - 的參數(shù)相當(dāng)于$ OLDPWD。如果是非空目錄名稱使用CDPATH,或者如果 - 是第一個(gè)參數(shù),并且目錄更改成功,則新工作目錄的絕對(duì)路徑名將寫入標(biāo)準(zhǔn)輸出。如果目錄已成功更改,則返回值為true; 否則是假的。命令[-pVv]命令[arg ...]使用args運(yùn)行命令可以抑制正常的shell函數(shù)查找。僅執(zhí)行在PATH中找到的內(nèi)置命令或命令。如果給出-p選項(xiàng),則使用PATH的默認(rèn)值執(zhí)行搜索命令,保證找到所有標(biāo)準(zhǔn)實(shí)用程序。如果提供-V或-v選項(xiàng),則a打印命令的描述。-v選項(xiàng)會(huì)生成一個(gè)單詞,指示用于調(diào)用命令的命令或文件名; -V選項(xiàng)pro-更詳細(xì)的描述。如果提供了-V或-v選項(xiàng),則在找到命令時(shí)退出狀態(tài)為0,否則為1。如果沒有提供任何選項(xiàng)和發(fā)生錯(cuò)誤或無(wú)法找到命令,退出狀態(tài)為127.否則,命令builtin的退出狀態(tài)是命令的退出狀態(tài)。compgen [選項(xiàng)] [字]根據(jù)選項(xiàng)生成可能的單詞完成匹配,這可能是完整內(nèi)置程序接受的任何選項(xiàng),但-p和-r除外,并且將匹配寫入標(biāo)準(zhǔn)輸出。使用-F或-C選項(xiàng)時(shí),可編程完成工具設(shè)置的各種shell變量雖然可用,沒有有用的價(jià)值。匹配將以與可編程完成代碼直接從具有相同標(biāo)志的完成規(guī)范生成它們相同的方式生成。如果指定了單詞,則僅顯示匹配單詞的那些完成。除非提供了無(wú)效選項(xiàng),否則返回值為true,或者未生成任何匹配項(xiàng)。完成[-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 ...]指定應(yīng)如何完成每個(gè)名稱的參數(shù)。如果提供了-p選項(xiàng),或者未提供任何選項(xiàng),則會(huì)打印現(xiàn)有的完成規(guī)范一種允許它們作為輸入重用的方法。-r選項(xiàng)刪除每個(gè)名稱的完成規(guī)范,如果沒有提供名稱,則刪除所有完成規(guī)范 - 蒸發(fā)散。-D選項(xiàng)表示剩余的選項(xiàng)和操作應(yīng)該適用于``default''命令完成; 也就是說(shuō),嘗試完成命令以前沒有完成任何完成。-E選項(xiàng)表示剩余的選項(xiàng)和操作應(yīng)該適用于``empty''命令完成; 那是,在空行上嘗試完成。上面在可編程完成時(shí)描述了在嘗試完成單詞時(shí)應(yīng)用這些完成規(guī)范的過(guò)程。其他選項(xiàng)(如果指定)具有以下含義。應(yīng)引用-G,-W和-X選項(xiàng)的參數(shù)(如果需要,還有-P和-S選項(xiàng))在調(diào)用完整的內(nèi)置函數(shù)之前保護(hù)它們不被擴(kuò)展。-o comp-optioncomp-option控制compspec行為的幾個(gè)方面,而不僅僅是簡(jiǎn)單生成完成。comp-option可能是以下之一:bashdefault如果compspec沒有生成匹配項(xiàng),則執(zhí)行其余的默認(rèn)bash完成。default如果compspec不生成匹配項(xiàng),則使用readline的默認(rèn)文件名完成。dirnames中如果compspec沒有生成匹配項(xiàng),則執(zhí)行目錄名稱完成。文件名告訴readline compspec生成文件名,因此它可以執(zhí)行任何特定于文件名的處理(比如在目錄名稱中添加斜杠,特殊字符,或抑制尾隨空格)。旨在與shell函數(shù)一起使用。nospace告訴readline不要在行尾添加一個(gè)空格(默認(rèn)值)。plusdirs在生成compspec定義的任何匹配項(xiàng)之后,嘗試完成目錄名稱,并將任何匹配項(xiàng)添加到另一個(gè)匹配項(xiàng)的結(jié)果中動(dòng)作。- 行動(dòng)該操作可以是以下之一,以生成可能的完成列表:別名別名。也可以指定為-a。arrayvar數(shù)組變量名。綁定Readline鍵綁定名稱。builtin shell內(nèi)置命令的名稱。也可以指定為-b。命令命令。也可以指定為-c。目錄目錄名稱。也可以指定為-d。殘已禁用的shell內(nèi)置命令的名稱。enabled已啟用的shell內(nèi)置命令的名稱。export導(dǎo)出的shell變量的名稱。也可以指定為-e。file文件名。也可以指定為-f。功能shell函數(shù)的名稱。組名稱組。也可以指定為-g。HELPTOPIC幫助內(nèi)置的幫助主題。主機(jī)名主機(jī)名,取自HOSTFILE shell變量指定的文件。作業(yè)名稱,如果作業(yè)控制處于活動(dòng)狀態(tài)。也可以指定為-j。關(guān)鍵字Shell保留字。也可以指定為-k。如果作業(yè)控制處于活動(dòng)狀態(tài),則運(yùn)行正在運(yùn)行的作業(yè)的名稱服務(wù)服務(wù)名稱。也可以指定為-s。setopt set builtin的-o選項(xiàng)的有效參數(shù)。shopt內(nèi)置的shopt接受的Shell選項(xiàng)名稱。信號(hào)信號(hào)名稱。如果作業(yè)控制處于活動(dòng)狀態(tài),則停止已停止作業(yè)的名稱。用戶用戶名。也可以指定為-u。變量所有shell變量的名稱。也可以指定為-v。-C命令命令在子shell環(huán)境中執(zhí)行,其輸出用作可能的完成。-F功能shell函數(shù)函數(shù)在當(dāng)前shell環(huán)境中執(zhí)行。完成后,可以從COM的值中檢索可能的完成PREPLY數(shù)組變量。-G globpat擴(kuò)展路徑名擴(kuò)展模式globpat以生成可能的完成。-P前綴在應(yīng)用所有其他選項(xiàng)后,在每個(gè)可能的完成開始時(shí)添加前綴。-S后綴在應(yīng)用所有其他選項(xiàng)后,后綴將附加到每個(gè)可能的完成。-W wordlist使用IFS特殊變量中的字符作為分隔符將單詞列表拆分,并擴(kuò)展每個(gè)結(jié)果單詞。可能的完成是結(jié)果列表中與完成的單詞匹配的成員。-X filterpatfilterpat是用于路徑名擴(kuò)展的模式。它應(yīng)用于前面的選項(xiàng)和參數(shù)生成的可能完成列表,以及從列表中刪除每個(gè)完成匹配filterpat。領(lǐng)先!在filterpat中否定了模式; 在這種情況下,任何完成都不匹配filterpat已移除。返回值為true,除非提供了無(wú)效選項(xiàng),提供了除-p或-r之外的選項(xiàng)而沒有使用name參數(shù),嘗試刪除com-對(duì)于沒有規(guī)范的名稱的pletion規(guī)范,或添加完成規(guī)范時(shí)發(fā)生錯(cuò)誤。compopt [-o選項(xiàng)] [-DE] [+ o選項(xiàng)] [名稱]根據(jù)選項(xiàng)修改每個(gè)名稱的完成選項(xiàng),如果沒有提供名稱,則修改當(dāng)前執(zhí)行的完成選項(xiàng)。如果沒有給出選項(xiàng),則顯示每個(gè)名稱或當(dāng)前完成的完成選項(xiàng)。option的可能值是對(duì)上述完整內(nèi)置函數(shù)有效的值。-D選項(xiàng)表示剩余的選項(xiàng)應(yīng)該適用于``default''命令完成; 也就是說(shuō),在沒有完成任務(wù)的命令上嘗試完成已定義。-E選項(xiàng)表示其余選項(xiàng)應(yīng)適用于“空”命令完成; 也就是說(shuō),在空白行上嘗試完成。除非提供了無(wú)效選項(xiàng),否則返回值為true,嘗試修改不存在完成規(guī)范的名稱的選項(xiàng),或者發(fā)生輸出錯(cuò)誤。繼續(xù)[n]繼續(xù)封閉for,while,until或select循環(huán)的下一次迭代。如果指定了n,則在第n個(gè)封閉循環(huán)處繼續(xù)。n必須≥1。如果n更大比封閉循環(huán)的數(shù)量,最后一個(gè)封閉循環(huán)(“頂級(jí)”循環(huán))恢復(fù)。當(dāng)在循環(huán)內(nèi)執(zhí)行continue時(shí),返回值為非n小于0時(shí)為零; 否則,繼續(xù)返回0值。當(dāng)在循環(huán)外執(zhí)行continue時(shí),返回值為0。聲明[-aAfFgilrtux] [-p] [name [= value] ...]typeset [-aAfFgilrtux] [-p] [name [= value] ...]聲明變量和/或賦予它們屬性。如果沒有給出名稱,則顯示變量的值。-p選項(xiàng)將顯示的屬性和值每個(gè)名字。當(dāng)-p與名稱參數(shù)一起使用時(shí),將忽略其他選項(xiàng)。當(dāng)提供-p而沒有名稱參數(shù)時(shí),它將顯示屬性和值具有由附加選項(xiàng)指定的屬性的所有變量。如果-p沒有提供其他選項(xiàng),declare將顯示屬性和值所有shell變量。-f選項(xiàng)將顯示限制為shell函數(shù)。-F選項(xiàng)禁止顯示函數(shù)定義; 只有功能打印名稱和屬性。如果使用shopt啟用了extdebug shell選項(xiàng),則會(huì)顯示定義函數(shù)的源文件名和行號(hào)同樣。-F選項(xiàng)表示-f。-g選項(xiàng)強(qiáng)制在全局范圍內(nèi)創(chuàng)建或修改變量,即使在shell函數(shù)中執(zhí)行declare也是如此。在所有其他情況下都會(huì)被忽略。以下選項(xiàng)可用于將輸出限制為具有指定屬性的變量或提供變量屬性:-a每個(gè)名稱都是一個(gè)索引數(shù)組變量(參見上面的數(shù)組)。-A每個(gè)名稱都是一個(gè)關(guān)聯(lián)數(shù)組變量(參見上面的數(shù)組)。-f僅使用函數(shù)名稱。-i將變量視為整數(shù); 當(dāng)為變量賦值時(shí),執(zhí)行算術(shù)評(píng)估(參見上面的算術(shù)評(píng)估)。-l為變量賦值時(shí),所有大寫字符都將轉(zhuǎn)換為小寫。大寫屬性已禁用。-r只讀名稱。然后,這些名稱不能通過(guò)后續(xù)賦值語(yǔ)句指定值或取消設(shè)置。-t為每個(gè)名稱指定trace屬性。跟蹤函數(shù)從調(diào)用shell繼承DEBUG和RETURN陷阱。trace屬性沒有特殊含義變量。-u為變量賦值時(shí),所有小寫字符都將轉(zhuǎn)換為大寫。小寫屬性已禁用。-x標(biāo)記要通過(guò)環(huán)境導(dǎo)出到后續(xù)命令的名稱。使用“+”而不是“ - ”會(huì)關(guān)閉屬性,但+ a可能不會(huì)用于銷毀數(shù)組變量,而+ r不會(huì)刪除只讀屬性屬性。在函數(shù)中使用時(shí),除了提供-g選項(xiàng)外,將每個(gè)名稱設(shè)置為local,與local命令一樣,如果變量名后跟= value,則變量的值設(shè)置為value。除非遇到無(wú)效選項(xiàng),否則返回值為0,嘗試使用``-f foo = bar''定義函數(shù),嘗試將值賦給readonly變量,嘗試在不使用復(fù)合賦值語(yǔ)法的情況下為數(shù)組變量賦值(請(qǐng)參閱上面的數(shù)組),其中一個(gè)名稱不是有效的shell變量名,試圖關(guān)閉readonly變量的readonly狀態(tài),嘗試轉(zhuǎn)向關(guān)閉數(shù)組變量的數(shù)組狀態(tài),或嘗試使用-f顯示不存在的函數(shù)。dirs [+ n] [-n] [-clpv]如果沒有選項(xiàng),則顯示當(dāng)前記住的目錄列表。默認(rèn)顯示位于一行,目錄名稱以空格分隔。目錄使用pushd命令添加到列表中; popd命令從列表中刪除條目。+ n顯示從沒有選項(xiàng)調(diào)用時(shí)dirs顯示的列表左側(cè)開始計(jì)數(shù)的第n個(gè)條目,從零開始。-n顯示從沒有選項(xiàng)調(diào)用時(shí)dirs顯示的列表右側(cè)開始計(jì)數(shù)的第n個(gè)條目,從零開始。-c通過(guò)刪除所有條目來(lái)清除目錄堆棧。-l生成更長(zhǎng)的列表; 默認(rèn)列表格式使用代字號(hào)表示主目錄。-p打印目錄堆棧,每行一個(gè)條目。-v打印目錄堆棧,每行一個(gè)條目,在每個(gè)條目前面添加其索引在堆棧中。除非提供了無(wú)效選項(xiàng)或超出目錄堆棧末尾的n個(gè)索引,否則返回值為0。disown [-ar] [-h] [jobspec ...]如果沒有選項(xiàng),則會(huì)從活動(dòng)作業(yè)表中刪除每個(gè)jobspec。如果jobspec不存在,并且既不提供-a也不提供-r,那么shell的概念是租用工作被使用。如果給出-h選項(xiàng),則不會(huì)從表中刪除每個(gè)jobspec,但會(huì)對(duì)其進(jìn)行標(biāo)記,以便在shell收到時(shí)不會(huì)將SIGHUP發(fā)送到作業(yè)SIGHUP。如果不存在jobspec,并且既未提供-a選項(xiàng)也未提供-r選項(xiàng),則使用當(dāng)前作業(yè)。如果未提供jobspec,則-a選項(xiàng)表示刪除或標(biāo)記所有工作; 沒有jobspec參數(shù)的-r選項(xiàng)將操作限制為正在運(yùn)行的作業(yè)。除非jobspec未指定有效作業(yè),否則返回值為0。echo [-neE] [arg ...]輸出args,用空格分隔,后跟換行符。返回狀態(tài)始終為0.如果指定了-n,則抑制尾隨換行符。如果是-e選項(xiàng)給出了以下反斜杠轉(zhuǎn)義字符的解釋。-E選項(xiàng)禁用這些轉(zhuǎn)義字符的解釋,即使在sys-tems默認(rèn)解釋它們。xpg_echo shell選項(xiàng)可用于動(dòng)態(tài)確定echo是否擴(kuò)展這些轉(zhuǎn)義字符默認(rèn)。echo不解釋 - 意味著選項(xiàng)的結(jié)束。echo解釋以下轉(zhuǎn)義序列:警報(bào)(鈴聲)\ b退格\ c抑制進(jìn)一步的輸出。\ E\ E逃脫角色\ f表格飼料\ n新行\(zhòng) r \ n回車\ t水平標(biāo)簽\ v垂直標(biāo)簽\\反斜杠\ nnnnn八位字符,其值為八進(jìn)制值nnn(零到三個(gè)八進(jìn)制數(shù)字)\ xHH八位字符,其值為十六進(jìn)制值HH(一個(gè)或兩個(gè)十六進(jìn)制數(shù)字)\ uHHHH Unicode(ISO / IEC 10646)字符,其值為十六進(jìn)制值HHHH(一到四個(gè)十六進(jìn)制數(shù)字)\ UHHHHHHHHUnicode(ISO / IEC 10646)字符,其值為十六進(jìn)制值HHHHHHHH(一到八個(gè)十六進(jìn)制數(shù)字)啟用[-a] [-dnps] [-f filename] [name ...]啟用和禁用內(nèi)置shell命令。禁用內(nèi)置允許執(zhí)行與內(nèi)置shell同名的磁盤命令,而無(wú)需指定完整路徑名,即使shell通常在磁盤命令之前搜索內(nèi)置命令。如果使用-n,則禁用每個(gè)名稱; 否則,名稱已啟用。對(duì)于例如,要使用通過(guò)PATH而不是shell內(nèi)置版本找到的測(cè)試二進(jìn)制文件,運(yùn)行``enable -n test''。-f選項(xiàng)表示加載新的內(nèi)置命令在支持動(dòng)態(tài)加載的系統(tǒng)上,來(lái)自共享對(duì)象文件名的名稱。-d選項(xiàng)將刪除先前使用-f加載的內(nèi)置函數(shù)。如果沒有名稱參數(shù)給定,或者如果提供-p選項(xiàng),則打印shell builtins列表。如果沒有其他選項(xiàng)參數(shù),則列表包含所有已啟用的shell內(nèi)置函數(shù)。如果-n提供,只打印禁用的內(nèi)置。如果提供了-a,則打印的列表包括所有內(nèi)置函數(shù),并指示是否已啟用每個(gè)內(nèi)置函數(shù)。如果提供-s,輸出僅限于POSIX特殊內(nèi)置。除非名稱不是內(nèi)置shell或加載新的錯(cuò)誤,否則返回值為0內(nèi)置于共享對(duì)象。評(píng)估[arg ...]args被讀取并連接成一個(gè)命令。然后shell讀取并執(zhí)行此命令,并將其退出狀態(tài)作為值返回評(píng)價(jià) 如果沒有args或只有null參數(shù),則eval返回0。exec [-cl] [-a name] [command [arguments]]如果指定了command,則替換shell。沒有創(chuàng)建新進(jìn)程。參數(shù)成為命令的參數(shù)。如果提供了-l選項(xiàng),則為shell在傳遞給命令的第0個(gè)參數(shù)的開頭放置一個(gè)破折號(hào)。這是login(1)的作用。-c選項(xiàng)導(dǎo)致命令以空的環(huán)境執(zhí)行ronment。如果提供了-a,則shell將name作為第0個(gè)參數(shù)傳遞給執(zhí)行的命令。如果由于某種原因無(wú)法執(zhí)行命令,則為非交互式shell退出,除非啟用了shell選項(xiàng)execfail,在這種情況下它會(huì)返回失敗。如果無(wú)法執(zhí)行文件,則交互式shell將返回失敗。如果如果未指定command,則任何重定向在當(dāng)前shell中生效,返回狀態(tài)為0.如果存在重定向錯(cuò)誤,則返回狀態(tài)為1。退出[n]導(dǎo)致shell退出狀態(tài)為n。如果省略n,則退出狀態(tài)是最后執(zhí)行的命令的狀態(tài)。在shell之前執(zhí)行EXIT上的陷阱納茨。export [-fn] [name [= word]] ...export -p提供的名稱標(biāo)記為自動(dòng)導(dǎo)出到后續(xù)執(zhí)行的命令的環(huán)境。如果給出-f選項(xiàng),則名稱引用函數(shù)。如果沒有給出名稱,或者如果提供了-p選項(xiàng),則會(huì)打印在此shell中導(dǎo)出的所有名稱的列表。-n選項(xiàng)導(dǎo)致export屬性從每個(gè)名字中刪除。如果變量名后跟= word,則變量的值設(shè)置為word。export返回退出狀態(tài)為0,除非無(wú)效遇到選項(xiàng),其中一個(gè)名稱不是有效的shell變量名稱,或者-f提供的名稱不是函數(shù)。fc [-e ename] [-lnr] [first] [last]fc -s [pat = rep] [cmd]修復(fù)命令。在第一種形式中,從歷史列表中選擇從頭到尾的一系列命令。可以將first和last指定為字符串(以找到以該字符串開頭的最后一個(gè)命令)或作為數(shù)字(歷史列表的索引,其中負(fù)數(shù)用作當(dāng)前命令編號(hào)的偏移量)。如果未指定last,則將其設(shè)置為當(dāng)前用于列出的命令(以便``fc -l -10''打印最后10個(gè)命令),否則設(shè)置為first。如果不是指定將其設(shè)置為上一個(gè)用于編輯的命令,將-16設(shè)置為列表。-n選項(xiàng)在列出時(shí)禁止命令編號(hào)。-r選項(xiàng)反轉(zhuǎn)命令的順序。如果給出-l選項(xiàng),則列出命令標(biāo)準(zhǔn)輸出。否則,將在包含這些命令的文件上調(diào)用ename給出的編輯器。如果未給出ename,則FCEDIT變量的值為如果未設(shè)置FCEDIT,則使用EDITOR的值。如果兩個(gè)變量都未設(shè)置,則使用vi。編輯完成后,將回顯并執(zhí)行編輯的命令。在第二種形式中,在每個(gè)pat實(shí)例被rep替換之后重新執(zhí)行命令。與此一起使用的一個(gè)有用的別名是``r =“fc -s”'',因此鍵入``r cc''運(yùn)行以“cc”開頭的最后一個(gè)命令,輸入“r”重新執(zhí)行最后一個(gè)命令。如果使用第一個(gè)表單,則返回值為0,除非遇到無(wú)效選項(xiàng)或第一個(gè)或最后一個(gè)指定歷史記錄行超出范圍。如果-e選項(xiàng)是支持plied,返回值是執(zhí)行的最后一個(gè)命令的值,如果命令的臨時(shí)文件發(fā)生錯(cuò)誤,則返回失敗。如果使用第二種形式,則返回狀態(tài)是重新執(zhí)行的命令的狀態(tài),除非cmd未指定有效的歷史記錄行,在這種情況下fc將返回失敗。fg [jobspec]在前臺(tái)恢復(fù)jobspec,并使其成為當(dāng)前作業(yè)。如果jobspec不存在,則使用shell的當(dāng)前作業(yè)概念。返回值是命令置于前臺(tái),如果在禁用作業(yè)控制時(shí)運(yùn)行,或者在啟用作業(yè)控制的情況下運(yùn)行,如果jobspec未指定有效作業(yè)或jobspec指定在沒有作業(yè)控制的情況下啟動(dòng)的作業(yè)。getopts optstring name [args]shell過(guò)程使用getopts來(lái)解析位置參數(shù)。optstring包含要識(shí)別的選項(xiàng)字符; 如果一個(gè)字符后跟一個(gè)冒號(hào),該選項(xiàng)應(yīng)該有一個(gè)參數(shù),該參數(shù)應(yīng)該用空格分隔。冒號(hào)和問號(hào)字符不得用作選項(xiàng)字符 - TER值。每次調(diào)用它時(shí),getopts都會(huì)將下一個(gè)選項(xiàng)放在shell變量名中,如果名稱不存在則初始化名稱,以及下一個(gè)參數(shù)的索引被處理成變量OPTIND。每次調(diào)用shell或shell腳本時(shí),OPTIND都會(huì)初始化為1。當(dāng)一個(gè)選項(xiàng)需要一個(gè)參數(shù)時(shí),getopts將該參數(shù)放入變量OPTARG中。shell不會(huì)自動(dòng)重置OPTIND; 它必須在多次調(diào)用getopts之間手動(dòng)重置如果要使用一組新參數(shù),則調(diào)用相同的shell。遇到選項(xiàng)結(jié)束時(shí),getopts將以大于零的返回值退出。OPTIND設(shè)置為第一個(gè)非選項(xiàng)參數(shù)的索引,名稱為調(diào)成 ?。getopts通常會(huì)解析位置參數(shù),但如果在args中給出了更多參數(shù),則getopts會(huì)解析這些參數(shù)。getopts可以通過(guò)兩種方式報(bào)告錯(cuò)誤。如果optstring的第一個(gè)字符是冒號(hào),則使用靜默錯(cuò)誤報(bào)告。在正常操作中,診斷消息是遇到無(wú)效選項(xiàng)或缺少選項(xiàng)參數(shù)時(shí)打印。如果變量OPTERR設(shè)置為0,則不會(huì)顯示任何錯(cuò)誤消息,即使第一個(gè)也是如此optstring的字符不是冒號(hào)。如果看到無(wú)效選項(xiàng),請(qǐng)使用getopts嗎?進(jìn)入名稱,如果不是沉默,則打印錯(cuò)誤消息并取消設(shè)置OPTARG。如果getopts是靜默的,那么選項(xiàng)字符找到放在OPTARG中,不打印任何診斷消息。如果找不到必需的參數(shù),并且getopts不是靜默的,則會(huì)在名稱中放置一個(gè)問號(hào)(?),取消設(shè)置OPTARG,并打印一條診斷消息。如果getopts是靜默的,然后冒號(hào)(:)放在名稱中,OPTARG設(shè)置為找到的選項(xiàng)字符。如果找到指定或未指定的選項(xiàng),則getopts返回true。如果遇到選項(xiàng)結(jié)尾或發(fā)生錯(cuò)誤,則返回false。hash [-lr] [-p filename] [-dt] [name]每次調(diào)用哈希時(shí),命令名稱的完整路徑名都是通過(guò)搜索$ PATH中的目錄并記住來(lái)確定的。以前記得的任何路徑 - 名稱被丟棄。如果提供了-p選項(xiàng),則不執(zhí)行路徑搜索,并且filename用作命令的完整文件名。-r選項(xiàng)導(dǎo)致貝殼忘了所有記住的位置。-d選項(xiàng)使shell忘記每個(gè)名稱的記憶位置。如果提供-t選項(xiàng),則完整路徑 - 打印每個(gè)名稱對(duì)應(yīng)的名稱。如果使用-t提供了多個(gè)名稱參數(shù),則在散列完整路徑名之前打印名稱。-l選項(xiàng)導(dǎo)致輸出以可以重用為輸入的格式顯示。如果沒有給出參數(shù),或者只提供了-l,則有關(guān)記憶命令的信息是打印。除非找不到名稱或提供了無(wú)效選項(xiàng),否則返回狀態(tài)為true。幫助[-dms] [模式]顯示有關(guān)內(nèi)置命令的有用信息。如果指定了pattern,help會(huì)提供有關(guān)匹配模式的所有命令的詳細(xì)幫助; 否則所有的幫助打印內(nèi)置和外殼控制結(jié)構(gòu)。-d顯示每個(gè)模式的簡(jiǎn)短描述-m以類似聯(lián)機(jī)幫助頁(yè)的格式顯示每個(gè)模式的描述-s僅顯示每個(gè)模式的簡(jiǎn)短用法概要除非沒有命令匹配模式,否則返回狀態(tài)為0。歷史[n]歷史-c歷史-d offset歷史記錄-anrw [文件名]歷史-p arg [arg ...]歷史-s arg [arg ...]如果沒有選項(xiàng),則顯示帶有行號(hào)的命令歷史列表。用*列出的行已被修改。n的參數(shù)僅列出最后n行。如果shell變量HISTTIMEFORMAT已設(shè)置且不為null,它用作strftime(3)的格式字符串,以顯示與每個(gè)顯示的歷史記錄關(guān)聯(lián)的時(shí)間戳條目。在格式化的時(shí)間戳和歷史記錄行之間不打印中間空白。如果提供了filename,則將其用作歷史文件的名稱; 如果不,使用HISTFILE的值。選項(xiàng)(如果提供)具有以下含義:-c通過(guò)刪除所有條目來(lái)清除歷史列表。-d offset刪除位置偏移處的歷史記錄條目。-a將“新”歷史記錄行(自當(dāng)前bash會(huì)話開始以來(lái)輸入的歷史記錄行)附加到歷史記錄文件。-n將尚未從歷史文件中讀取的歷史記錄行讀入當(dāng)前歷史記錄列表。這些是從一開始就附加到歷史文件的行當(dāng)前的bash會(huì)話。-r讀取歷史文件的內(nèi)容并將其用作當(dāng)前歷史記錄。-w將當(dāng)前歷史記錄寫入歷史文件,覆蓋歷史文件的內(nèi)容。-p對(duì)以下args執(zhí)行歷史記錄替換,并在標(biāo)準(zhǔn)輸出上顯示結(jié)果。不將結(jié)果存儲(chǔ)在歷史列表中。每個(gè)arg必須引用以禁用正常的歷史記錄擴(kuò)展。-s將args作為單個(gè)條目存儲(chǔ)在歷史列表中。在添加args之前,將刪除歷史列表中的最后一個(gè)命令。如果設(shè)置了HISTTIMEFORMAT變量,則將與每個(gè)歷史條目關(guān)聯(lián)的時(shí)間戳信息寫入歷史記錄文件,并標(biāo)記歷史記錄字符。讀取歷史文件時(shí),以歷史注釋字符開頭,后面緊跟數(shù)字的行將被解釋為時(shí)間戳以前的歷史記錄。除非遇到無(wú)效選項(xiàng),否則返回值為0,讀取或?qū)懭霘v史文件時(shí)發(fā)生錯(cuò)誤,無(wú)效偏移量為作為-d的參數(shù)提供,或者作為-p參數(shù)提供的歷史擴(kuò)展失敗。工作[-lnprs] [jobspec ...]jobs -x命令[args ...]第一個(gè)表單列出了活動(dòng)作業(yè)。選項(xiàng)具有以下含義:-l除正常信息外,還列出進(jìn)程ID。-n僅顯示自上次向用戶通知其狀態(tài)以來(lái)狀態(tài)已更改的作業(yè)的信息。-p僅列出作業(yè)進(jìn)程組組長(zhǎng)的進(jìn)程ID。-r將輸出限制為正在運(yùn)行的作業(yè)。-s將輸出限制為已停止的作業(yè)。如果給出了jobspec,則輸出僅限于有關(guān)該作業(yè)的信息。返回狀態(tài)為0,除非遇到無(wú)效選項(xiàng)或無(wú)效的jobspec支持合股。如果提供了-x選項(xiàng),則作業(yè)將替換在命令或args中找到的任何jobspec以及相應(yīng)的進(jìn)程組ID,并執(zhí)行命令傳遞args,返回 - 退出狀態(tài)。殺[-s sigspec | -n signum | -sigspec] [pid | jobspec] ...kill -l [sigspec | EXIT_STATUS]將由sigspec或signum命名的信號(hào)發(fā)送到由pid或jobspec命名的進(jìn)程。sigspec是一個(gè)不區(qū)分大小寫的信號(hào)名稱,如SIGKILL(有或沒有SIG前綴)或信號(hào)編號(hào); signum是一個(gè)信號(hào)編號(hào)。如果sigspec不存在,則假定為SIGTERM。-l的參數(shù)列出了信號(hào)名稱。如果有的話給出-l時(shí)提供參數(shù),列出與參數(shù)對(duì)應(yīng)的信號(hào)的名稱,返回狀態(tài)為0. exit_status參數(shù)為-l是指定由信號(hào)終止的進(jìn)程的信號(hào)編號(hào)或退出狀態(tài)的編號(hào)。如果至少有一個(gè)信號(hào)成功,則kill返回true發(fā)送錯(cuò)誤,如果發(fā)生錯(cuò)誤或遇到無(wú)效選項(xiàng),則返回false。讓arg [arg ...]每個(gè)arg都是要評(píng)估的算術(shù)表達(dá)式(參見上面的算術(shù)評(píng)估)。如果最后一個(gè)arg的計(jì)算結(jié)果為0,則返回1; 否則返回0。local [option] [name [= value] ...]對(duì)于每個(gè)參數(shù),將創(chuàng)建名為name的局部變量,并為其指定值。該選項(xiàng)可以是聲明接受的任何選項(xiàng)。在本地使用本地時(shí)函數(shù),它使變量名具有僅限于該函數(shù)及其子函數(shù)的可見范圍。沒有操作數(shù),本地寫入局部變量列表到標(biāo)準(zhǔn)輸出。不在函數(shù)內(nèi)時(shí)使用local是錯(cuò)誤的。除非在函數(shù)外部使用local,否則返回狀態(tài)為0,無(wú)效名稱為提供,或名稱是只讀變量。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]讀取標(biāo)準(zhǔn)輸入到索引數(shù)組變量數(shù)組的行,或者如果提供了-u選項(xiàng),則從文件描述符fd讀取行。變量MAPFILE是默認(rèn)值陣列。選項(xiàng)(如果提供)具有以下含義:-n復(fù)制大多數(shù)計(jì)數(shù)行。如果count為0,則復(fù)制所有行。-O開始分配索引源處的數(shù)組。默認(rèn)索引為0。-s丟棄讀取的第一個(gè)計(jì)數(shù)行。-t從每行讀取中刪除尾部換行符。-u從文件描述符fd而不是標(biāo)準(zhǔn)輸入中讀取行。-C每次讀取量子線時(shí)評(píng)估回調(diào)。-c選項(xiàng)指定量子。-c指定每次調(diào)用回調(diào)之間讀取的行數(shù)。如果在沒有-c的情況下指定-C,則默認(rèn)量程為5000.當(dāng)評(píng)估回調(diào)時(shí),將為其提供要分配的下一個(gè)數(shù)組元素的索引和行要作為附加參數(shù)分配給該元素。在讀取行但在分配數(shù)組元素之前評(píng)估回調(diào)。如果未提供顯式原點(diǎn),則mapfile將在分配之前清除數(shù)組。除非提供了無(wú)效的選項(xiàng)或選項(xiàng)參數(shù),數(shù)組無(wú)效或不可分配,或者數(shù)組不是索引數(shù)組,否則mapfile會(huì)成功返回。popd [-n] [+ n] [-n]從目錄堆棧中刪除條目。如果沒有參數(shù),則從堆棧中刪除頂級(jí)目錄,然后執(zhí)行cd到新的頂級(jí)目錄。爭(zhēng)論,如果支持合作,具有以下含義:-n當(dāng)從堆棧中刪除目錄時(shí),禁止正常更改目錄,以便僅操作堆棧。+ n刪除dirs顯示的列表左側(cè)的第n個(gè)條目,從零開始。例如:``popd +0''刪除第一個(gè)目錄,``popd +1''第二。-n從d開頭的列表右側(cè)刪除第n個(gè)條目,從零開始。例如:``popd -0''刪除最后一個(gè)目錄,``popd -1''倒數(shù)第二個(gè)。如果popd命令成功,也會(huì)執(zhí)行dirs,返回狀態(tài)為0.如果遇到無(wú)效選項(xiàng),popd返回false,該目錄stack為空,指定了不存在的目錄堆棧條目,或者目錄更改失敗。printf [-v var] format [arguments]在格式的控制下將格式化的參數(shù)寫入標(biāo)準(zhǔn)輸出。-v選項(xiàng)導(dǎo)致將輸出分配給變量var而不是被打印到標(biāo)準(zhǔn)輸出。格式是一個(gè)字符串,它包含三種類型的對(duì)象:普通字符,簡(jiǎn)單地復(fù)制到標(biāo)準(zhǔn)輸出,字符轉(zhuǎn)義序列,其中轉(zhuǎn)換并復(fù)制到標(biāo)準(zhǔn)輸出和格式規(guī)范,每個(gè)規(guī)范都會(huì)導(dǎo)致打印下一個(gè)連續(xù)的參數(shù)。除了標(biāo)準(zhǔn)printf(1)格式規(guī)范,printf解釋以下擴(kuò)展:%b導(dǎo)致printf在相應(yīng)的參數(shù)中擴(kuò)展反斜杠轉(zhuǎn)義序列(除了\ c終止輸出,\',\“和\?中的反斜杠不是已刪除,以\ 0開頭的八進(jìn)制轉(zhuǎn)義符最多可包含四位數(shù)字。%q使printf以可以重用為shell輸入的格式輸出相應(yīng)的參數(shù)。%(datefmt)筆導(dǎo)致printf輸出使用datefmt作為strftime(3)的格式字符串得到的日期時(shí)間字符串。相應(yīng)的參數(shù)是一個(gè)整數(shù)表示發(fā)送自紀(jì)元以來(lái)的秒數(shù)。可以使用兩個(gè)特殊參數(shù)值:-1表示當(dāng)前時(shí)間,-2表示shell的時(shí)間被調(diào)用。非字符串格式說(shuō)明符的參數(shù)被視為C常量,但允許使用前導(dǎo)加號(hào)或減號(hào),并且如果前導(dǎo)字符是單個(gè)或雙引號(hào),該值是以下字符的ASCII值。必要時(shí)重用該格式以使用所有參數(shù)。如果格式需要的參數(shù)多于提供的參數(shù),則額外的格式規(guī)范表現(xiàn)為如果提供了適當(dāng)?shù)牧阒祷蚩兆址3晒r(shí)返回值為零,失敗時(shí)返回值為非零。pushd [-n] [+ n] [-n]pushd [-n] [dir]將目錄添加到目錄堆棧的頂部,或者旋轉(zhuǎn)堆棧,使堆棧的新頂部成為當(dāng)前工作目錄。沒有爭(zhēng)論,交流除非目錄堆棧為空,否則前兩個(gè)目錄并返回0。參數(shù)(如果提供)具有以下含義:-n在向堆棧添加目錄時(shí)禁止正常更改目錄,以便僅操作堆棧。+ n旋轉(zhuǎn)堆棧,使第n個(gè)目錄(從dirs顯示的列表左側(cè)開始,從零開始)位于頂部。-n旋轉(zhuǎn)堆棧,使第n個(gè)目錄(從dirs顯示的列表右側(cè)開始,從零開始)位于頂部。dir將dir添加到頂部的目錄堆棧,使其成為新的當(dāng)前工作目錄。如果pushd命令成功,則也執(zhí)行dirs。如果使用第一個(gè)表單,則pushd返回0,除非cd to dir失敗。用第二種形式,推除非目錄堆棧為空,指定了不存在的目錄堆棧元素,或者目錄更改為指定的新當(dāng)前目錄,否則返回0失敗。pwd [-LP]打印當(dāng)前工作目錄的絕對(duì)路徑名。如果提供了-P選項(xiàng)或-o physical選項(xiàng),則打印的路徑名不包含符號(hào)鏈接啟用set builtin命令。如果使用-L選項(xiàng),則打印的路徑名可能包含符號(hào)鏈接。除非發(fā)生錯(cuò)誤,否則返回狀態(tài)為0讀取當(dāng)前目錄的名稱或提供無(wú)效選項(xiàng)。讀[-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ... ]從標(biāo)準(zhǔn)輸入讀取一行,或從作為-u選項(xiàng)的參數(shù)提供的文件描述符fd讀取,并將第一個(gè)單詞分配給第一個(gè)名稱,第二個(gè)單詞到第二個(gè)名字,依此類推,剩下的單詞和他們介入的分隔符分配給姓氏。如果從中讀取的單詞較少輸入流比名稱,其余名稱分配空值。IFS中的字符用于將行拆分為單詞。反斜杠字符(\)可以用于刪除下一個(gè)字符讀取和行繼續(xù)的任何特殊含義。選項(xiàng)(如果提供)具有以下含義:- 一個(gè)人這些單詞被分配給數(shù)組變量aname的順序索引,從0開始。在分配任何新值之前,未設(shè)置aname。其他名稱 - 這些被忽略了。-d delimdelim的第一個(gè)字符用于終止輸入行,而不是換行符。-e如果標(biāo)準(zhǔn)輸入來(lái)自終端,則使用readline(參見上面的READLINE)獲取該行。Readline使用當(dāng)前(或默認(rèn),如果行編輯 - 以前沒有激活ing)編輯設(shè)置。-i文字如果使用readline讀取行,則在編輯開始之前將文本放入編輯緩沖區(qū)。-n nchars讀取nchars字符后讀取返回,而不是等待完整的輸入行,但如果讀取的字符數(shù)少于nchars則遵循分隔符在分隔符之前。-N nchars讀取正好nchars字符后讀取返回,而不是等待完整的輸入行,除非遇到EOF或讀取超時(shí)。分隔符輸入中遇到的字符不會(huì)被特殊處理,并且在讀取nchars字符之前不會(huì)導(dǎo)致讀取。-p提示在嘗試讀取任何輸入之前,在沒有尾隨換行符的情況下顯示標(biāo)準(zhǔn)錯(cuò)誤提示。僅當(dāng)輸入來(lái)自ter-時(shí),才會(huì)顯示提示單寶元。-r反斜杠不作為轉(zhuǎn)義字符。反斜杠被認(rèn)為是該行的一部分。特別是,反斜杠 - 換行符對(duì)可能不會(huì)被用作一條線延續(xù)。-s靜音模式。如果輸入來(lái)自終端,則不回顯字符。-t超時(shí)如果在超時(shí)秒內(nèi)未讀取完整的輸入行,則會(huì)導(dǎo)致讀取超時(shí)并返回失敗。超時(shí)可以是帶小數(shù)的十進(jìn)制數(shù)小數(shù)點(diǎn)后面的部分。此選項(xiàng)僅在讀取來(lái)自終端,管道或其他特殊文件的輸入時(shí)有效; 它沒有效果從常規(guī)文件中讀取。如果timeout為0,如果輸入在指定的文件描述符上可用,則read返回成功,否則失敗。退出狀態(tài)如果超過(guò)超時(shí),則大于128。-u fd從文件描述符fd讀取輸入。如果未提供名稱,則將讀取的行分配給變量REPLY。返回碼為零,除非遇到文件結(jié)尾,讀取超時(shí)(在這種情況下)返回碼大于128),或者提供無(wú)效的文件描述符作為-u的參數(shù)。readonly [-aAf] [-p] [name [= word] ...]給定的名稱標(biāo)記為只讀; 后續(xù)分配不得更改這些名稱的值。如果提供了-f選項(xiàng),則對(duì)應(yīng)的函數(shù)這些名字是如此明顯。-a選項(xiàng)將變量限制為索引數(shù)組; -A選項(xiàng)將變量限制為關(guān)聯(lián)數(shù)組。如果兩個(gè)選項(xiàng)都是提供,-A優(yōu)先。如果未給出名稱參數(shù),或者提供了-p選項(xiàng),則會(huì)打印所有只讀名稱的列表。其他選項(xiàng)可能是用于將輸出限制為只讀名稱集的子集。-p選項(xiàng)使輸出以可以重用為輸入的格式顯示。如果變量能夠名稱后跟= word,變量的值設(shè)置為word。除非遇到無(wú)效選項(xiàng),其中一個(gè)名稱不是a,否則返回狀態(tài)為0有效的shell變量名稱,或者-f提供的名稱不是函數(shù)。返回[n]使函數(shù)以n指定的返回值退出。如果省略n,則返回狀態(tài)是在函數(shù)體中執(zhí)行的最后一個(gè)命令的狀態(tài)。如果使用在函數(shù)外部,但在執(zhí)行腳本期間。(source)命令,它導(dǎo)致shell停止執(zhí)行該腳本并返回n或退出sta腳本中執(zhí)行的最后一個(gè)命令的tus作為腳本的退出狀態(tài)。如果在函數(shù)外部使用而不是在執(zhí)行腳本期間使用。,則返回狀態(tài)為假。在函數(shù)或腳本之后執(zhí)行恢復(fù)之前,將執(zhí)行與RETURN陷阱關(guān)聯(lián)的任何命令。設(shè)置[--abefhkmnptuvxBCEHPT] [-o選項(xiàng)名稱] [arg ...]設(shè)置[+ abefhkmnptuvxBCEHPT] [+ o選項(xiàng)名稱] [arg ...]如果沒有選項(xiàng),每個(gè)shell變量的名稱和值將以一種格式顯示,該格式可以重復(fù)用作設(shè)置或重置當(dāng)前設(shè)置變量的輸入。只讀變量無(wú)法重置。在posix模式下,僅列出shell變量。輸出根據(jù)當(dāng)前區(qū)域設(shè)置進(jìn)行排序。當(dāng)選項(xiàng)是特定的他們?cè)O(shè)置或取消設(shè)置shell屬性。選項(xiàng)處理后剩余的任何參數(shù)都被視為位置參數(shù)的值,并在中進(jìn)行分配訂單,$ 1,$ 2,... $ n。選項(xiàng)(如果指定)具有以下含義:-a自動(dòng)標(biāo)記為了導(dǎo)出到后續(xù)命令的環(huán)境而修改或創(chuàng)建的變量和函數(shù)。-b立即報(bào)告已終止后臺(tái)作業(yè)的狀態(tài),而不是在下一個(gè)主要提示之前報(bào)告。僅在啟用作業(yè)控制時(shí)才有效。-e如果管道(可能包含一個(gè)簡(jiǎn)單命令),括在括號(hào)中的子shell命令或其中一個(gè)執(zhí)行的命令,則立即退出由大括號(hào)括起的命令列表的一部分(參見上面的SHELL GRAMMAR)以非零狀態(tài)退出。如果失敗的命令是shell的一部分,則shell不會(huì)退出緊跟一段時(shí)間或直到關(guān)鍵字的命令列表,在if或elif保留字后面的測(cè)試的一部分,在&&中執(zhí)行的任何命令的一部分或|| 列表除了最后的&&或||之后的命令,管道中的任何命令但是最后一個(gè)命令,或者命令的返回值是否與!相反。ERR上的陷阱(如果已設(shè)置)將在shell退出之前執(zhí)行。此選項(xiàng)分別適用于shell環(huán)境和每個(gè)子shell環(huán)境(請(qǐng)參閱COMMAND上面的執(zhí)行環(huán)境),并且可能導(dǎo)致子shell在執(zhí)行子shell中的所有命令之前退出。-f禁用路徑名擴(kuò)展。-h在查找執(zhí)行命令時(shí)記住命令的位置。默認(rèn)情況下啟用此功能。-k賦值語(yǔ)句形式的所有參數(shù)都放在命令的環(huán)境中,而不僅僅是命令名稱之前的那些參數(shù)。-m監(jiān)控模式。作業(yè)控制已啟用。默認(rèn)情況下,對(duì)于支持它的系統(tǒng)上的交互式shell,此選項(xiàng)處于啟用狀態(tài)(請(qǐng)參閱上面的JOB CONTROL)。背景進(jìn)程在單獨(dú)的進(jìn)程組中運(yùn)行,并且在完成時(shí)打印包含其退出狀態(tài)的行。-n讀取命令但不執(zhí)行它們。這可用于檢查shell腳本是否存在語(yǔ)法錯(cuò)誤。交互式shell會(huì)忽略它。-o選項(xiàng)名稱選項(xiàng)名稱可以是以下之一:allexport與-a相同。braceexpand與-B相同。emacs使用emacs樣式的命令行編輯界面。默認(rèn)情況下,當(dāng)shell是交互式時(shí)啟用,除非shell是以shell啟動(dòng)的--noediting選項(xiàng)。這也會(huì)影響用于讀取-e的編輯界面。errexit與-e相同。errtrace與-E相同。functrace與-T相同。hashall與-h相同。histexpand與-H相同。history啟用命令歷史記錄,如上面HISTORY中所述。默認(rèn)情況下,此選項(xiàng)在交互式shell中處于啟用狀了ignoreeof效果就好像執(zhí)行了shell命令``IGNOREEOF = 10''(參見上面的Shell變量)。keyword與-k相同。監(jiān)視器與-m相同。noclobber選項(xiàng)與-C相同。noexec與-n相同。noglob與-f相同。nolog目前被忽略了。通知與-b相同。nounset與-u相同。onecmd與-t相同。物理與-P相同。pipefail如果設(shè)置,則管道的返回值是以非零狀態(tài)退出的最后(最右邊)命令的值,如果是,則為零。管道退出成功。默認(rèn)情況下禁用此選項(xiàng)。posix更改bash的行為,其中默認(rèn)操作與POSIX標(biāo)準(zhǔn)不同,以匹配標(biāo)準(zhǔn)(posix模式)。特權(quán)與-p相同。verbose與-v相同。vi使用vi樣式的命令行編輯界面。這也會(huì)影響用于讀取-e的編輯界面。xtrace與-x相同。如果-o未提供選項(xiàng)名稱,則打印當(dāng)前選項(xiàng)的值。如果+ o沒有選項(xiàng)名稱,則提供一系列set命令重新創(chuàng)建當(dāng)前選項(xiàng)設(shè)置顯示在標(biāo)準(zhǔn)輸出上。-p啟用特權(quán)模式。在這種模式下,$ ENV和$ BASH_ENV文件不會(huì)被處理,shell函數(shù)不會(huì)從環(huán)境中繼承,而且SHEL-LOPTS,BASHOPTS,CDPATH和GLOBIGNORE變量(如果它們出現(xiàn)在環(huán)境中)將被忽略。如果shell以有效用戶(組)ID啟動(dòng)不等于真實(shí)用戶(組)ID,并且未提供-p選項(xiàng),將采取這些操作并將有效用戶ID設(shè)置為實(shí)際用戶ID。如果啟動(dòng)時(shí)提供-p選項(xiàng),不重置有效用戶ID。關(guān)閉此選項(xiàng)會(huì)導(dǎo)致有效的用戶和組ID設(shè)置為真實(shí)用戶和組ID。-t讀取并執(zhí)行一個(gè)命令后退出。-u在執(zhí)行參數(shù)擴(kuò)展時(shí),將特殊參數(shù)“@”和“*”以外的未設(shè)置變量和參數(shù)視為錯(cuò)誤。如果嘗試擴(kuò)展在未設(shè)置的變量或參數(shù)上,shell會(huì)輸出錯(cuò)誤消息,如果不是交互式,則會(huì)以非零狀態(tài)退出。-v在讀取時(shí)打印shell輸入行。-x擴(kuò)展每個(gè)簡(jiǎn)單命令后,對(duì)于command,case命令,select命令或arithmetic for command,顯示PS4的擴(kuò)展值,然后是命令及其擴(kuò)展參數(shù)或關(guān)聯(lián)的單詞列表。-B shell執(zhí)行大括號(hào)擴(kuò)展(參見上面的Brace Expansion)。默認(rèn)情況下啟用此選項(xiàng)。-C如果設(shè)置,bash不會(huì)使用>,>&和<>重定向運(yùn)算符覆蓋現(xiàn)有文件。使用時(shí)創(chuàng)建輸出文件時(shí)可能會(huì)覆蓋此項(xiàng)重定向運(yùn)算符> | 而不是>。-E如果設(shè)置,則ERR上的任何陷阱都由shell函數(shù),命令替換和子shell環(huán)境中執(zhí)行的命令繼承。ERR陷阱通常不是在這種情況下繼承。-H啟用!風(fēng)格歷史替代。當(dāng)shell是交互式時(shí),默認(rèn)情況下此選項(xiàng)處于啟用狀態(tài)。-P如果設(shè)置,則在執(zhí)行更改當(dāng)前工作目錄的cd等命令時(shí),shell不會(huì)遵循符號(hào)鏈接。它使用物理目錄結(jié)構(gòu)而不是。默認(rèn)情況下,bash在執(zhí)行更改當(dāng)前目錄的命令時(shí)遵循目錄的邏輯鏈。-T如果設(shè)置,則DEBUG和RETURN上的任何陷阱都由shell函數(shù),命令替換和子shell環(huán)境中執(zhí)行的命令繼承。DEBUG和在這種情況下,RETURN陷阱通常不會(huì)被繼承。- 如果此選項(xiàng)后面沒有參數(shù),則取消設(shè)置位置參數(shù)。否則,位置參數(shù)設(shè)置為args,即使它們中的一些也是如此以 - 開頭。- 發(fā)出選項(xiàng)結(jié)束信號(hào),將所有剩余的參數(shù)分配給位置參數(shù)。-x和-v選項(xiàng)已關(guān)閉。如果沒有args,位置參數(shù)保持不變。除非另有說(shuō)明,否則默認(rèn)情況下關(guān)閉選項(xiàng)。使用+而不是 - 會(huì)導(dǎo)致關(guān)閉這些選項(xiàng)。選項(xiàng)也可以指定為參數(shù)一個(gè)shell的調(diào)用。當(dāng)前的選項(xiàng)集可以在$ - 中找到。除非遇到無(wú)效選項(xiàng),否則返回狀態(tài)始終為true。轉(zhuǎn)移[n]來(lái)自n + 1 ...的位置參數(shù)被重命名為$ 1 ....由數(shù)字$#向下表示為$# - n + 1的參數(shù)未設(shè)置。n必須是非負(fù)數(shù)大于或等于$#。如果n為0,則不更改參數(shù)。如果沒有給出n,則假定為1.如果n大于$#,則位置參數(shù)不是改變。如果n大于$#或小于零,則返回狀態(tài)大于零; 否則為0。shopt [-pqsu] [-o] [optname ...]切換控制可選shell行為的變量值。如果沒有選項(xiàng),或者使用-p選項(xiàng),則會(huì)顯示所有可設(shè)置選項(xiàng)的列表,其中包含一個(gè)是否各自設(shè)定的陽(yáng)離子。-p選項(xiàng)使輸出以可以重用為輸入的形式顯示。其他選項(xiàng)具有以下含義:-s啟用(設(shè)置)每個(gè)optname。-u禁用(取消設(shè)置)每個(gè)optname。-q禁止正常輸出(安靜模式); 返回狀態(tài)指示是設(shè)置還是取消設(shè)置optname。如果使用-q給出多個(gè)optname參數(shù),則如果啟用了所有optnames,則返回狀態(tài)為零; 否則為非零。-o將optname的值限制為為set builtin的-o選項(xiàng)定義的值。如果使用-s或-u且沒有optname參數(shù),則顯示僅限于分別設(shè)置或取消設(shè)置的選項(xiàng)。除非另有說(shuō)明,否則該shopt默認(rèn)情況下禁用(取消設(shè)置)選項(xiàng)。如果啟用了所有optnames,則列出選項(xiàng)時(shí)的返回狀態(tài)為零,否則為非零。設(shè)置或取消設(shè)置選項(xiàng)時(shí),返回狀態(tài)為零,除非optname不是有效的shell選項(xiàng)。購(gòu)物選項(xiàng)列表是:autocd如果設(shè)置,則執(zhí)行作為目錄名稱的命令名稱,就好像它是cd命令的參數(shù)一樣。此選項(xiàng)僅供交互式使用炮彈。cdable_vars如果設(shè)置,則假定cd builtin命令不是目錄的參數(shù)是變量的名稱,其值是要更改的目錄。cdspell如果設(shè)置,將更正cd命令中目錄組件拼寫中的次要錯(cuò)誤。檢查的錯(cuò)誤是轉(zhuǎn)置字符,缺少角色,一個(gè)角色太多了。如果找到更正,則打印更正的文件名,然后命令繼續(xù)。此選項(xiàng)僅用于互動(dòng)殼。checkhash如果設(shè)置,bash會(huì)在嘗試執(zhí)行之前檢查哈希表中找到的命令是否存在。如果散列命令不再存在,則進(jìn)行正常路徑搜索執(zhí)行。checkjobs如果設(shè)置,bash將在退出交互式shell之前列出任何已停止和正在運(yùn)行的作業(yè)的狀態(tài)。如果任何作業(yè)正在運(yùn)行,則會(huì)導(dǎo)致退出在沒有干預(yù)命令的情況下推遲到第二次退出(參見上面的JOB CONTROL)。如果任何作業(yè)停止,shell總是推遲退出。checkwinsize如果設(shè)置,bash會(huì)在每個(gè)命令后檢查窗口大小,并在必要時(shí)更新LINES和COLUMNS的值。cmdhist如果設(shè)置,bash會(huì)嘗試在同一歷史記錄條目中保存多行命令的所有行。這樣可以輕松地重新編輯多行命令。compat31如果設(shè)置,bash將其行為更改為版本3.1的行為,相對(duì)于[[條件命令的=?運(yùn)算符]的引用參數(shù)。compat32如果設(shè)置,當(dāng)使用[[條件命令的<和>]時(shí),bash將其行為更改為版本3.2的行為與特定于語(yǔ)言環(huán)境的字符串比較運(yùn)營(yíng)商。bash-4.1之前的Bash版本使用ASCII排序規(guī)則和strcmp(3); bash-4.1及更高版本使用當(dāng)前語(yǔ)言環(huán)境的歸類序列和strcoll(3)。compat40如果設(shè)置,當(dāng)使用[[條件命令的<和>]時(shí),bash將關(guān)于特定于語(yǔ)言環(huán)境的字符串比較的行為更改為版本4.0的行為運(yùn)算符(請(qǐng)參閱上一項(xiàng))以及中斷命令列表的效果。compat41如果設(shè)置,bash,在posix模式下,將雙引號(hào)參數(shù)擴(kuò)展中的單引號(hào)視為特殊字符。單引號(hào)必須匹配(偶數(shù)數(shù)字)和單引號(hào)之間的字符被認(rèn)為是引用的。這是posix模式到4.1版的行為。默認(rèn)的bash行為仍然像以前的版本一樣。direxpand如果設(shè)置,bash在執(zhí)行文件名完成時(shí)將目錄名稱替換為單詞擴(kuò)展的結(jié)果。這改變了readline編輯的內(nèi)容 - 緩沖區(qū)。如果未設(shè)置,bash會(huì)嘗試保留用戶鍵入的內(nèi)容。dirspell如果設(shè)置,如果最初提供的目錄名不存在,bash會(huì)在字完成期間嘗試對(duì)目錄名進(jìn)行拼寫更正。dotglob如果設(shè)置,bash包含以“。”開頭的文件名。在路徑名擴(kuò)展的結(jié)果中。execfail如果設(shè)置,如果非交互式shell無(wú)法執(zhí)行指定為exec builtin命令的參數(shù)的文件,則不會(huì)退出。一個(gè)交互式shell如果exec失敗則不退出。expand_aliases如果設(shè)置,則如上所述在ALIASES下擴(kuò)展別名。對(duì)于交互式shell,默認(rèn)情況下啟用此選項(xiàng)。extdebug如果設(shè)置,則啟用供調(diào)試程序使用的行為:1. declare builtin的-F選項(xiàng)顯示與作為參數(shù)提供的每個(gè)函數(shù)名對(duì)應(yīng)的源文件名和行號(hào)。2.如果DEBUG陷阱運(yùn)行的命令返回非零值,則跳過(guò)下一個(gè)命令而不執(zhí)行。3.如果DEBUG陷阱運(yùn)行的命令返回值2,并且shell正在子例程中執(zhí)行(shell函數(shù)或shell腳本由這個(gè)。或源內(nèi)置),模擬返回調(diào)用。4. BASH_ARGC和BASH_ARGV按照上面的描述進(jìn)行更新。5.啟用了函數(shù)跟蹤:命令替換,shell函數(shù)和使用(命令)調(diào)用的子shell繼承DEBUG和RETURN陷阱。6.啟用了錯(cuò)誤跟蹤:命令替換,shell函數(shù)和使用(命令)調(diào)用的子shell繼承ERR陷阱。extglob如果設(shè)置,則啟用上面描述的路徑名擴(kuò)展下的擴(kuò)展模式匹配功能。extquote如果設(shè)置,則$'string'和$“string”引用在雙引號(hào)括起來(lái)的$ {parameter}擴(kuò)展中執(zhí)行。默認(rèn)情況下啟用此選項(xiàng)。failglob如果設(shè)置,則在路徑名擴(kuò)展期間無(wú)法匹配文件名的模式會(huì)導(dǎo)致擴(kuò)展錯(cuò)誤。force_fignore如果設(shè)置,由FIGNORE shell變量指定的后綴會(huì)導(dǎo)致在執(zhí)行單詞完成時(shí)忽略單詞,即使忽略的單詞是唯一的可能的完成。有關(guān)FIGNORE的說(shuō)明,請(qǐng)參見上面的SHELL VARIABLES。默認(rèn)情況下啟用此選項(xiàng)。globstar如果設(shè)置,則路徑名擴(kuò)展上下文中使用的模式**將匹配所有文件以及零個(gè)或多個(gè)目錄和子目錄。如果遵循模式通過(guò)/,只有目錄和子目錄匹配。gnu_errfmt如果設(shè)置,則shell錯(cuò)誤消息以標(biāo)準(zhǔn)GNU錯(cuò)誤消息格式寫入。histappend如果設(shè)置,則當(dāng)shell退出時(shí),歷史列表將附加到由HISTFILE變量的值指定的文件中,而不是覆蓋文件。histreedit如果設(shè)置,并且正在使用readline,則用戶有機(jī)會(huì)重新編輯失敗的歷史記錄替換。histverify如果設(shè)置,并且正在使用readline,則歷史替換的結(jié)果不會(huì)立即傳遞給shell解析器。而是加載生成的行進(jìn)入readline編輯緩沖區(qū),允許進(jìn)一步修改。hostcomplete如果設(shè)置,并且正在使用readline,當(dāng)包含@的單詞正在完成時(shí),bash將嘗試執(zhí)行主機(jī)名完成(請(qǐng)參閱READ-下的完成上面的LINE)。默認(rèn)情況下啟用此功能。huponexit如果設(shè)置,當(dāng)交互式登錄shell退出時(shí),bash將向所有作業(yè)發(fā)送SIGHUP。interactive_comments如果設(shè)置,則允許以#開頭的單詞使該單詞和該行上的所有剩余字符在交互式shell中被忽略(請(qǐng)參閱上面的注釋)。默認(rèn)情況下啟用此選項(xiàng)。lastpipe如果設(shè)置,并且作業(yè)控制未激活,則shell將運(yùn)行當(dāng)前shell環(huán)境中未在后臺(tái)執(zhí)行的管道的最后一個(gè)命令。lithist如果設(shè)置,并且啟用了cmdhist選項(xiàng),則多行命令將保存到具有嵌入換行符的歷史記錄中,而不是使用分號(hào)分隔符可能。login_shell如果它作為登錄shell啟動(dòng),shell將設(shè)置此選項(xiàng)(請(qǐng)參閱上面的INVOCATION)。該值可能不會(huì)更改。mailwarn如果設(shè)置,并且自上次檢查以來(lái)已經(jīng)訪問了bash正在檢查郵件的文件,則“已讀取郵件文件中的郵件”是顯示。no_empty_cmd_completion如果設(shè)置,并且正在使用readline,則當(dāng)嘗試在空行上完成時(shí),bash將不會(huì)嘗試搜索PATH以尋找可能的完成。nocaseglob如果設(shè)置,則bash在執(zhí)行路徑名擴(kuò)展時(shí)以不區(qū)分大小寫的方式匹配文件名(請(qǐng)參閱上面的路徑名擴(kuò)展)。nocasematch如果設(shè)置,bash在執(zhí)行大小寫或[[條件命令]時(shí)執(zhí)行匹配時(shí)以不區(qū)分大小寫的方式匹配模式。了nullglob如果設(shè)置,bash允許不匹配任何文件的模式(參見上面的Pathname Expansion)擴(kuò)展為空字符串,而不是自己。progcomp如果置位,則啟用可編程完成功能(參見上面的可編程完成)。默認(rèn)情況下啟用此選項(xiàng)。promptvars如果設(shè)置,則提升字符串在按照PROMPT-中所述進(jìn)行擴(kuò)展后進(jìn)行參數(shù)擴(kuò)展,命令替換,算術(shù)擴(kuò)展和引用刪除ING以上。默認(rèn)情況下啟用此選項(xiàng)。restricted_shell如果以限制模式啟動(dòng),shell將設(shè)置此選項(xiàng)(請(qǐng)參閱下面的RESTRICTED SHELL)。該值可能不會(huì)更改。啟動(dòng)時(shí)不會(huì)重置執(zhí)行文件,允許啟動(dòng)文件發(fā)現(xiàn)shell是否受限制。shift_verbose如果設(shè)置,當(dāng)移位計(jì)數(shù)超過(guò)位置參數(shù)的數(shù)量時(shí),移位內(nèi)置打印錯(cuò)誤消息。源路徑如果設(shè)置,源(。)builtin使用PATH的值來(lái)查找包含作為參數(shù)提供的文件的目錄。默認(rèn)情況下啟用此選項(xiàng)。xpg_echo如果設(shè)置,echo builtin默認(rèn)會(huì)擴(kuò)展反斜杠轉(zhuǎn)義序列。暫停[-f]掛起此shell的執(zhí)行,直到收到SIGCONT信號(hào)。當(dāng)掛起的shell是后臺(tái)進(jìn)程時(shí),可以通過(guò)fg命令重新啟動(dòng)它。對(duì)于更多信息,請(qǐng)閱讀JOB CONTROL部分。suspend命令無(wú)法掛起登錄shell。但是,如果指定了-f選項(xiàng),則suspend命令可以掛起甚至登錄shell。除非shell是登錄shell且未提供-f,或者未啟用作業(yè)控制,否則返回狀態(tài)為0。測(cè)試expr[expr]根據(jù)條件表達(dá)式expr的計(jì)算,返回0或1的狀態(tài)。每個(gè)運(yùn)算符和操作數(shù)必須是單獨(dú)的參數(shù)。表達(dá)式是在有條件的表達(dá)下提出的上述初選。test不接受任何選項(xiàng),也不接受和忽略 - 作為表示的參數(shù)選項(xiàng)的結(jié)束。表達(dá)式可以使用以下運(yùn)算符組合,按優(yōu)先級(jí)的降序列出。評(píng)估取決于參數(shù)的數(shù)量; 見下文。當(dāng)有五個(gè)或更多參數(shù)時(shí),使用運(yùn)算符優(yōu)先級(jí)。!expr如果expr為false則為True。(expr)返回expr的值。這可以用于覆蓋運(yùn)算符的正常優(yōu)先級(jí)。expr1 -a expr2如果expr1和expr2都為真,則為真。expr1 -o expr2如果expr1或expr2為真,則為真。測(cè)試和[根據(jù)參數(shù)的數(shù)量使用一組規(guī)則來(lái)評(píng)估條件表達(dá)式。0個(gè)參數(shù)表達(dá)式是假的。1個(gè)論點(diǎn)當(dāng)且僅當(dāng)參數(shù)不為null時(shí),表達(dá)式才為真。2個(gè)論點(diǎn)如果第一個(gè)參數(shù)是!,當(dāng)且僅當(dāng)?shù)诙€(gè)參數(shù)為null時(shí),表達(dá)式才為真。如果第一個(gè)參數(shù)是一元條件運(yùn)算符之一在上面列出的條件表達(dá)式下,如果一元測(cè)試為真,則表達(dá)式為真。如果第一個(gè)參數(shù)不是有效的一元條件運(yùn)算符,表達(dá)式是假的。3個(gè)論點(diǎn)以列出的順序應(yīng)用以下條件。如果第二個(gè)參數(shù)是上面在CONDITIONAL下列出的二元條件運(yùn)算符之一EXPRESSIONS,表達(dá)式的結(jié)果是使用第一個(gè)和第三個(gè)參數(shù)作為操作數(shù)的二進(jìn)制測(cè)試的結(jié)果。-a和-o運(yùn)算符是 - 當(dāng)有三個(gè)參數(shù)時(shí),ered二元運(yùn)算符。如果第一個(gè)參數(shù)是!,則該值是使用第二個(gè)和第三個(gè)參數(shù)的雙參數(shù)測(cè)試的否定參數(shù)。如果第一個(gè)參數(shù)完全正確(并且第三個(gè)參數(shù)完全正確),則結(jié)果是第二個(gè)參數(shù)的單參數(shù)測(cè)試。否則,表達(dá)是錯(cuò)誤的。4個(gè)論點(diǎn)如果第一個(gè)參數(shù)是!,則結(jié)果是否定由剩余參數(shù)組成的三參數(shù)表達(dá)式。否則,表達(dá)式是使用上面列出的規(guī)則根據(jù)優(yōu)先級(jí)進(jìn)行解析和評(píng)估。5個(gè)或更多參數(shù)使用上面列出的規(guī)則根據(jù)優(yōu)先級(jí)解析和評(píng)估表達(dá)式。當(dāng)與test或[,<和>運(yùn)算符一起使用時(shí),使用ASCII排序按字典順序排序。times打印shell的累計(jì)用戶和系統(tǒng)時(shí)間以及從shell運(yùn)行的進(jìn)程。返回狀態(tài)為0。陷阱[-lp] [[arg] sigspec ...]當(dāng)shell接收sigspec信號(hào)時(shí),將讀取并執(zhí)行命令arg。如果arg不存在(并且只有一個(gè)sigspec)或 - ,則每個(gè)指定的信號(hào)都是重置為其原始處置(進(jìn)入shell時(shí)的值)。如果arg是空字符串,則每個(gè)sigspec指定的信號(hào)將被忽略shell以及它調(diào)用的命令。如果arg不存在且已提供-p,則顯示與每個(gè)sigspec關(guān)聯(lián)的陷阱命令。如果沒有爭(zhēng)論 - 如果提供了-p,則trap將打印與每個(gè)信號(hào)關(guān)聯(lián)的命令列表。-l選項(xiàng)使shell打印信號(hào)列表名稱及其相應(yīng)的數(shù)字。每個(gè)sigspec都是<signal.h>中定義的信號(hào)名稱或信號(hào)編號(hào)。信號(hào)名稱不區(qū)分大小寫,SIG前綴是可選的。如果sigspec是EXIT(0),則命令arg在從shell退出時(shí)執(zhí)行。如果sigspec是DEBUG,則在每個(gè)簡(jiǎn)單命令之前執(zhí)行命令arg,mand,case命令,select命令,命令的每個(gè)算術(shù),以及第一個(gè)命令在shell函數(shù)中執(zhí)行之前(參見上面的SHELL GRAMMAR)。參考對(duì)于內(nèi)置的shopt的extdebug選項(xiàng)的描述,詳細(xì)說(shuō)明了它對(duì)DEBUG陷阱的影響。如果sigspec是RETURN,則每次執(zhí)行命令argshell函數(shù)或用它執(zhí)行的腳本。或源內(nèi)置完成執(zhí)行。如果sigspec是ERR,則只要簡(jiǎn)單命令具有非零退出狀態(tài),就會(huì)執(zhí)行命令arg,具體取決于以下條件。ERR陷阱不是exe-如果失敗的命令是緊跟在while或until關(guān)鍵字之后的命令列表的一部分,則在if語(yǔ)句中執(zhí)行部分測(cè)試,執(zhí)行命令的一部分在&&或||中 列表,或者命令的返回值是否被反轉(zhuǎn)!這些是errexit選項(xiàng)遵循的相同條件。進(jìn)入shell時(shí)忽略的信號(hào)不能被捕獲,重置或列出。未被忽略的被捕獲信號(hào)將被重置為其原始值創(chuàng)建一個(gè)shell或subshell環(huán)境。如果任何sigspec無(wú)效,則返回狀態(tài)為false; 否則陷阱返回true。輸入[-aftpP]名稱[名稱...]如果沒有選項(xiàng),請(qǐng)指明在用作命令名稱時(shí)如何解釋每個(gè)名稱。如果使用-t選項(xiàng),則鍵入打印字符串,該字符串是別名,關(guān)鍵字之一,如果name是別名,shell保留字,函數(shù),內(nèi)置文件或磁盤文件,則函數(shù),內(nèi)置函數(shù)或文件。如果找不到名稱,則不打印任何內(nèi)容,并返回退出狀態(tài)false。如果使用-p選項(xiàng),則鍵入要么返回將名稱指定為a時(shí)將執(zhí)行的磁盤文件的名稱命令名,如果``type -t name''不返回文件,則沒有任何內(nèi)容。-P選項(xiàng)強(qiáng)制對(duì)每個(gè)名稱進(jìn)行PATH搜索,即使``type -t name''不會(huì)返回文件。如果對(duì)命令進(jìn)行哈希處理,則-p和-P將打印哈希值,而不一定是PATH中首先出現(xiàn)的文件。如果使用-a選項(xiàng),則鍵入打印所有位置包含名為name的可執(zhí)行文件。當(dāng)且僅當(dāng)不使用-p選項(xiàng)時(shí),這包括別名和函數(shù)。散列命令表不是一致的使用-a時(shí)會(huì)感到沮喪 與內(nèi)置命令一樣,-f選項(xiàng)禁止shell函數(shù)查找。如果找到所有參數(shù),則返回true,否則返回false找不到。ulimit [-HSTabcdefilmnpqrstuvx [limit]]在允許此類控制的系統(tǒng)上,控制shell可用資源及其啟動(dòng)的進(jìn)程。-H和-S選項(xiàng)指定了為給定資源設(shè)置硬限制或軟限制。一旦設(shè)置了非root用戶,就無(wú)法增加硬限制; 軟限制可以增加到值硬限制。如果既未指定-H也未指定-S,則設(shè)置軟限制和硬限制。limit的值可以是為資源指定的單位中的數(shù)字或硬,軟或無(wú)限的特殊值之一,分別代表當(dāng)前硬限制,當(dāng)前軟限制和無(wú)限制。如果省略限制 - 除非給出-H選項(xiàng),否則將打印資源軟限制的當(dāng)前值。指定多個(gè)資源時(shí),限制名稱和單位在值之前打印。其他選項(xiàng)解釋如下:-a報(bào)告所有當(dāng)前限制-b最大套接字緩沖區(qū)大小-c創(chuàng)建的核心文件的最大大小-d進(jìn)程數(shù)據(jù)段的最大大小-e最大調(diào)度優(yōu)先級(jí)(“nice”)-f shell及其子項(xiàng)寫入的文件的最大大小-i待處理信號(hào)的最大數(shù)量-l可以鎖定到內(nèi)存的最大大小-m最大駐留集大小(許多系統(tǒng)不遵守此限制)-n打開文件描述符的最大數(shù)量(大多數(shù)系統(tǒng)不允許設(shè)置此值)-p 512字節(jié)塊中的管道大小(可能未設(shè)置)-q POSIX消息隊(duì)列中的最大字節(jié)數(shù)-r最大實(shí)時(shí)調(diào)度優(yōu)先級(jí)-s最大堆棧大小-t以秒為單位的最大CPU時(shí)間量-u單個(gè)用戶可用的最大進(jìn)程數(shù)-v shell可用的最大虛擬內(nèi)存量,在某些系統(tǒng)上可用于其子級(jí)-x文件鎖的最大數(shù)量-T最大線程數(shù)如果給出limit,則它是指定資源的新值(-a選項(xiàng)僅顯示)。如果沒有給出選項(xiàng),則假定為-f。值以1024字節(jié)為單位增量,除了-t,以秒為單位,-p,以512字節(jié)塊為單位,-T,-b,-n和-u,它們是未縮放的值。返回狀態(tài)為0除非提供了無(wú)效的選項(xiàng)或參數(shù),否則在設(shè)置新限制時(shí)會(huì)發(fā)生錯(cuò)誤。在POSIX模式下,512字節(jié)塊用于`-c'和`-f'選項(xiàng)。umask [-p] [-S] [模式]用戶文件創(chuàng)建掩碼設(shè)置為mode。如果模式以數(shù)字開頭,則將其解釋為八進(jìn)制數(shù); 否則它被解釋為符號(hào)模式掩碼與chmod(1)接受的類似。如果省略mode,則打印掩碼的當(dāng)前值。-S選項(xiàng)使掩碼以符號(hào)形式打印; 該默認(rèn)輸出是八進(jìn)制數(shù)。如果提供了-p選項(xiàng),并且省略了mode,則輸出的形式可以重用為輸入。如果返回狀態(tài)為0模式已成功更改或未提供模式參數(shù),否則為false。unalias [-a] [name ...]從已定義別名列表中刪除每個(gè)名稱。如果提供了-a,則刪除所有別名定義。除非提供的名稱不是a,否則返回值為true別名。未設(shè)置[-fv] [名稱...]對(duì)于每個(gè)名稱,刪除相應(yīng)的變量或函數(shù)。如果未提供任何選項(xiàng),或者給出了-v選項(xiàng),則每個(gè)名稱都引用一個(gè)shell變量。只讀變量可能不會(huì)被取消。如果指定了-f,則每個(gè)名稱引用一個(gè)shell函數(shù),并刪除函數(shù)定義。每個(gè)未設(shè)置的變量或函數(shù)是從傳遞給后續(xù)命令的環(huán)境中刪除。如果未設(shè)置COMP_WORDBREAKS,RANDOM,SECONDS,LINENO,HISTCMD,FUNCNAME,GROUPS或DIRSTACK中的任何一個(gè),則它們失去他們的特殊屬性,即使他們隨后被重置。除非名稱是只讀的,否則退出狀態(tài)為true。等[n ...]等待每個(gè)指定的進(jìn)程并返回其終止?fàn)顟B(tài)。每個(gè)n可以是進(jìn)程ID或作業(yè)規(guī)范; 如果給出了工作規(guī)范,那么所有流程都是如此工作的管道等待。如果未給出n,則等待所有當(dāng)前活動(dòng)的子進(jìn)程,并且返回狀態(tài)為零。如果n指定不存在進(jìn)程或作業(yè),返回狀態(tài)為127.否則,返回狀態(tài)是最后一個(gè)進(jìn)程或作業(yè)等待的退出狀態(tài)。
受限制的外殼 ? 如果使用名稱rbash啟動(dòng)bash,或者在調(diào)用時(shí)提供-r選項(xiàng),則shell將受到限制。受限制的shell用于更多地設(shè)置環(huán)境 ? 控制比標(biāo)準(zhǔn)外殼。它的行為與bash相同,但不允許或不執(zhí)行以下操作:
·用cd更改目錄·設(shè)置或取消設(shè)置SHELL,PATH,ENV或BASH_ENV的值·指定包含/的命令名·指定包含/作為參數(shù)的文件名。內(nèi)置命令·指定包含斜杠的文件名作為hash builtin命令的-p選項(xiàng)的參數(shù)·在啟動(dòng)時(shí)從shell環(huán)境導(dǎo)入函數(shù)定義·在啟動(dòng)時(shí)從shell環(huán)境中解析SHELLOPTS的值·使用>,> |,<>,>&,&>和>>重定向運(yùn)算符重定向輸出·使用exec builtin命令用另一個(gè)命令替換shell·使用-bu和-d選項(xiàng)向enable builtin命令添加或刪除內(nèi)置命令·使用enable builtin命令啟用禁用的shell內(nèi)置命令·為命令builtin命令指定-p選項(xiàng)·使用設(shè)定+ r或設(shè)定+ o限制關(guān)閉限制模式。在讀取任何啟動(dòng)文件后強(qiáng)制執(zhí)行這些限制。當(dāng)執(zhí)行一個(gè)被發(fā)現(xiàn)是shell腳本的命令時(shí)(參見上面的命令執(zhí)行),rbash會(huì)關(guān)閉生成的shell中執(zhí)行腳本的任何限制。
也可以看看 ? Bash參考手冊(cè),Brian Fox和Chet Ramey ? Gnu Readline圖書館,Brian Fox和Chet Ramey ? Gnu歷史圖書館,Brian Fox和Chet Ramey ? 便攜式操作系統(tǒng)接口(POSIX)第2部分:Shell和實(shí)用程序,IEEE ? sh(1),ksh(1),csh(1) ? emacs(1),vi(1) ? readline的(3)
FILES ? /斌/慶典 ? bash可執(zhí)行文件 ? / etc / profile文件 ? 系統(tǒng)范圍的初始化文件,為登錄shell執(zhí)行 ? /etc/bash.bash_logout ? 系統(tǒng)范圍的登錄shell清理文件,在登錄shell退出時(shí)執(zhí)行 ? 在?/ .bash_profile ? 為登錄shell執(zhí)行的個(gè)人初始化文件 ? 在?/ .bashrc ? 單個(gè)per-interactive-shell啟動(dòng)文件 ? ?/ .bash_logout中 ? 單個(gè)登錄shell清理文件,在登錄shell退出時(shí)執(zhí)行 ? ?/ .inputrc文件 ? 單獨(dú)的readline初始化文件
作者 ? Brian Fox,自由軟件基金會(huì) ? bfox@gnu.org
凱斯西儲(chǔ)大學(xué)Chet Rameychet.ramey@case.edu
BUG報(bào)告 ? 如果你在bash中發(fā)現(xiàn)了一個(gè)bug,你應(yīng)該報(bào)告它。但首先,你應(yīng)該確保它確實(shí)是一個(gè)bug,它出現(xiàn)在最新版本的bash中。最新版本 ? sion總是可以從ftp://ftp.gnu.org/pub/gnu/bash/獲得。
一旦確定實(shí)際存在錯(cuò)誤,請(qǐng)使用bashbug命令(來(lái)自源包)提交錯(cuò)誤報(bào)告。如果您有修復(fù),建議您發(fā)送郵件那也是!建議和“哲學(xué)”錯(cuò)誤報(bào)告可以郵寄到bug-bash@gnu.org或發(fā)布到Usenet新聞組gnu.bash.bug。所有錯(cuò)誤報(bào)告應(yīng)包括:bash的版本號(hào)硬件和操作系統(tǒng)用于編譯的編譯器錯(cuò)誤行為的描述一個(gè)簡(jiǎn)短的腳本或“食譜”,它可以解決這個(gè)問題有關(guān)本手冊(cè)頁(yè)的評(píng)論和錯(cuò)誤報(bào)告應(yīng)發(fā)送至chet.ramey@case.edu。
BUGS ? 它太大太慢了。
bash和傳統(tǒng)版本的sh之間存在一些細(xì)微差別,主要是因?yàn)镻OSIX規(guī)范。別名在某些用途中令人困惑。Shell內(nèi)置命令和函數(shù)不可停止/可重新啟動(dòng)。復(fù)合命令和命令序列形式`a; b; 嘗試進(jìn)程暫停時(shí),不會(huì)正常處理c'。當(dāng)一個(gè)進(jìn)程停止時(shí),shell立即ately執(zhí)行序列中的下一個(gè)命令。將命令序列放在括號(hào)之間以將其強(qiáng)制轉(zhuǎn)換為子shell就足夠了,子shell可以作為a停止單元。可能尚未導(dǎo)出數(shù)組變量。一次可能只有一個(gè)活動(dòng)的協(xié)處理器。
GNU Bash-4.2 2010年12月28日BASH(1)
轉(zhuǎn)載于:https://blog.51cto.com/14127444/2330797
總結(jié)
以上是生活随笔 為你收集整理的Linux中bash文档翻译 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。