BASH(1)通用命令手册BASH(1)

名称
​ bash - GNU Bourne-Again SHell

概要
​ bash [选项] [文件]

版权
​ Bash是自由软件基金会版权所有(C)1989-2011。

描述
​ Bash是一种兼容sh的命令语言解释器,它执行从标准输入或文件读取的命令。Bash还包含了有用的功能
​ Korn和C shell(ksh和csh)。

   Bash旨在成为IEEE POSIX规范(IEEE标准1003.1)的Shell和Utilities部分的一致实现。Bash可以配置为默认情况下,POSIX符合。

OPTIONS
​ 在调用shell时,set builtin命令描述中记录的所有单字符shell选项都可以用作选项。另外,bash
​ 在调用时解释以下选项:

   -c string如果存在-c选项,则从字符串中读取命令。如果在字符串后面有参数,则将它们分配给位置参数,从而开始0美元。-i如果存在-i选项,则shell是交互式的。-l使bash行为就像它作为登录shell一样被调用(参见下面的INVOCATION)。-r如果存在-r选项,则shell将受到限制(请参阅下面的RESTRICTED SHELL)。-s如果存在-s选项,或者在选项处理后没有参数,则从标准输入读取命令。此选项允许位置调用交互式shell时要设置的参数。在标准输出上打印所有以$开头的双引号字符串的-DA列表。这些是在语言翻译时需要进行语言翻译的字符串。租赁区域设置不是C或POSIX。这意味着-n选项; 没有命令会被执行。[ -  +] O [shopt_option]shopt_option是内置商店接受的shell选项之一(参见下面的SHELL BUILTIN命令)。如果存在shopt_option,则-O设置该值选项; + O取消它。如果未提供shopt_option,则shopt接受的shell选项的名称和值将打印在标准输出上。如果调用选项为+ O,输出以可以重用为输入的格式显示。-  A  - 表示选项结束并禁用进一步的选项处理。 - 之后的任何参数都被视为文件名和参数。一个论点 - 是相当于  - 。Bash还解释了许多多字符选项。在要识别单字符选项之前,这些选项必须出现在命令行上。--debugger安排在shell启动之前执行调试器配置文件。打开扩展调试模式(请参阅shopt的extdebug选项说明内置于下方)。自卸宝串相当于-D,但输出是GNU gettext po(便携式对象)文件格式。自卸串相当于-D。--help在标准输出上显示用法消息并成功退出。--init-file文件--rcfile文件如果shell是交互式的,则从文件而不是标准的个人初始化文件?/ .bashrc执行命令(参见下面的INVOCATION)。- 登录相当于-l。--noediting当shell是交互式时,不要使用GNU readline库来读取命令行。--noprofile不要读取系统范围的启动文件/ etc / profile或任何个人初始化文件?/ .bash_profile,?/ .bash_login或?/ .profile。默认情况下,当bash作为登录shell调用时,bash会读取这些文件(请参阅下面的INVOCATION)。--norc如果shell是交互式的,请不要读取和执行个人初始化文件?/ .bashrc。如果以sh调用shell,则默认情况下此选项处于启用状态。--posix更改bash的行为,其中默认操作与POSIX标准不同,以匹配标准(posix模式)。--restricted外壳受限制(见下面的限制外壳)。--rpm-要求生成shell脚本运行所需的文件列表。这意味着'-n'并且受到与编译时错误检查相同的限制检查; 不解析命令替换,条件表达式和eval内置,因此可能会遗漏某些依赖项。--verbose相当于-v。- 版在标准输出上显示此bash实例的版本信息并成功退出。

ARGUMENTS
​ 如果在选项处理之后仍然存在参数,并且既未提供-c选项也未提供-s选项,则假定第一个参数是包含shell的文件的名称
​ 命令。如果以这种方式调用bash,则将$ 0设置为文件名,并将位置参数设置为其余参数。Bash读取并执行
​ 来自此文件的命令,然后退出。Bash的退出状态是脚本中执行的最后一个命令的退出状态。如果未执行任何命令,则退出状态为0。
​ 首先尝试在当前目录中打开文件,如果没有找到文件,则shell在PATH中搜索脚本中的目录。

INVOCATION
​ 登录shell是其参数零的第一个字符是 - 或者以--login选项开头的一个。

   交互式shell是在没有非选项参数的情况下启动的,没有-c选项,其标准输入和错误都连接到终端(由isatty(3)),或者以-i选项开头的。如果bash是交互式的,则设置PS1和$  - 包括i,允许shell脚本或启动文件测试此状态。以下段落描述了bash如何执行其启动文件。如果存在任何文件但无法读取,则bash报告错误。Tildes在文件中扩展在扩展部分的Tilde扩展下面描述的名称。当bash作为交互式登录shell或作为具有--login选项的非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令,如果该文件存在。读取该文件后,它按顺序查找?/ .bash_profile,?/ .bash_login和?/ .profile,并从第一个文件中读取并执行命令存在且可读。启动shell以禁止此行为时,可以使用--noprofile选项。当登录shell退出时,如果文件存在,bash将从文件?/ .bash_logout和/etc/bash.bash_logout读取并执行命令。当启动不是登录shell的交互式shell时,如果该文件存在,bash将从?/ .bashrc读取并执行命令。这可以通过使用来抑制--norc选项。--rcfile文件选项将强制bash从文件而不是?/ .bashrc读取和执行命令。例如,当以非交互方式启动bash以运行shell脚本时,它会在环境中查找变量BASH_ENV,如果它出现在那里则展开其值,并且使用扩展值作为要读取和执行的文件的名称。Bash的行为就像执行了以下命令一样:if [-n“$ BASH_ENV”]; 然后 。“$ BASH_ENV”; 科幻但PATH变量的值不用于搜索文件名。如果使用名称sh调用bash,它会尝试尽可能接近地模仿sh的历史版本的启动行为,同时符合POSIX标准好。当作为交互式登录shell或带有--login选项的非交互式shell调用时,它首先尝试从/ etc / profile中读取和执行命令,?/ .profile,按此顺序。--noprofile选项可用于禁止此行为。当作为名为sh的交互式shell调用时,bash会查找该变量ENV,如果已定义,则展开其值,并使用扩展值作为要读取和执行的文件的名称。因为以sh调用的shell不会尝试读取和执行来自任何其他启动文件的可爱命令,--rcfile选项无效。使用名称sh调用的非交互式shell不会尝试读取任何其他启动文件。当以sh调用时,bash在读取启动文件后进入posix模式。当bash以posix模式启动时,与--posix命令行选项一样,它遵循启动文件的POSIX标准。在此模式下,交互式shell扩展了ENV变量和命令从名称为扩展值的文件中读取和执行。没有读取其他启动文件。Bash尝试确定何时将其标准输入连接到网络连接,如远程shell守护程序(通常为rshd)或安全shell守护进程sshd。如果bash确定它以这种方式运行,它会从?/ .bashrc中读取并执行命令,如果该文件存在且可读的话。它会如果作为sh调用,则不要这样做。--norc选项可用于禁止此行为,--rcfile选项可用于强制读取另一个文件,但rshd不会通常使用这些选项调用shell或允许指定它们。如果以有效用户(组)id不等于真实用户(组)id启动shell,并且未提供-p选项,则不读取任何启动文件,shell函数tions不是从环境继承的,SHELLOPTS,BASHOPTS,CDPATH和GLOBIGNORE变量,如果它们出现在环境中,则被忽略,并且有效用户ID设置为真实用户ID。如果在调用时提供了-p选项,则启动行为相同,但不会重置有效用户标识。

定义
​ 本文档的其余部分使用以下定义。
​ 空白或空格。
​ 单词由shell视为单个单元的字符序列。也称为令牌。
​ name仅由字母数字字符和下划线组成的单词,以字母字符或下划线开头。也称为标识符。
​ 元字符
​ 一个字符,当不加引号时,分隔单词。以下之一:
​ | &; ()<>空格标签
​ 控制操作员
​ 执行控制功能的令牌。它是以下符号之一:
​ || &&&; ;; ()| |&<newline>

保留字
​ 保留字是对shell具有特殊含义的字。以下单词在未加引号时被识别为保留,并且是简单命令的第一个单词
​ (参见下面的SHELL GRAMMAR)或案例的第三个词或命令:

   !案例做完elif else esac fi for function如果在select中那么直到{{time] [[]]

SHELL GRAMMAR
简单的命令
​ 一个简单的命令是一系列可选的变量赋值,后跟空格分隔的单词和重定向,并由控制操作符终止。第一个字
​ 指定要执行的命令,并作为参数零传递。其余的单词作为参数传递给调用的命令。

   简单命令的返回值是其退出状态,如果命令由信号n终止,则返回128 + n。

管道
​ 管道是由一个控制操作符|分隔的一个或多个命令的序列 或|&。管道的格式是:

          [时间[-p]] [!]命令[[|?|&] command2 ...]命令的标准输出通过管道连接到command2的标准输入。此连接在命令指定的任何重定向之前执行(请参阅下面的重定向)。如果使用|&,则命令的标准错误通过管道连接到command2的标准输入; 它是2>&1 |的简写。这隐含的重新在命令指定的任何重定向之后执行标准错误的反转。除非启用了pipefail选项,否则管道的返回状态是最后一个命令的退出状态。如果启用了pipefail,则管道的返回状态为以非零状态退出的最后一个(最右边)命令的值,如果所有命令都成功退出,则返回零。如果保留字!在管道之前,退出状态该流水线是如上所述的退出状态的逻辑否定。shell在返回值之前等待管道中的所有命令终止。如果时间保留字在管道之前,则在管道终止时报告其执行所消耗的经过时间以及用户和系统时间。-p选项将输出格式更改为POSIX指定的格式。当shell处于posix模式时,如果下一个标记以“ - ”开头,则它不会将时间识别为保留字。TIMEFORMAT变量可以设置为格式字符串,指定如何显示定时信息; 请参阅Shell变量下的TIMEFORMAT说明下面。当shell处于posix模式时,时间可以跟在换行符之后。在这种情况下,shell显示shell及其子级占用的总用户和系统时间。TIMEFORMAT变量可用于指定时间信息的格式。管道中的每个命令都作为单独的进程执行(即,在子shell中)。

清单
​ 列表是由一个运算符;,&,&&或||分隔的一个或多个管道的序列,并且可选地以;,&或<newline>之一终止。

   在这些列表运算符中,&&和|| 具有相同的优先权,其次是; 和&,具有相同的优先权。一个或多个换行符的序列可以出现在列表而不是分号中以分隔命令。如果命令由控制操作符&终止,则shell在子shell中在后台执行命令。shell不会等待命令完成,并且返回状态为0.命令由a分隔; 按顺序执行; shell等待每个命令依次终止。返回状态是退出状态执行的最后一个命令。AND和OR列表是由&&和||分隔的一个或多个管道的序列 分别控制运营商。AND和OR列表以左关联性执行。AND列表具有表单command1 && command2当且仅当command1返回退出状态为零时,才执行command2。OR列表具有表单command1 || 命令2当且仅当command1返回非零退出状态时才执行command2。AND和OR列表的返回状态是在中执行的最后一个命令的退出状态名单。

复合命令
​ 复合命令是以下之一:

   (list)列表在子shell环境中执行(参见下面的COMMAND EXECUTION ENVIRONMENT)。影响shell环境的变量赋值和内置命令可以命令完成后不会保持有效。返回状态是列表的退出状态。{list; }list只是在当前的shell环境中执行。列表必须以换行符或分号结尾。这称为组命令。返回状态是列表的退出状态。请注意,与元字符(和)不同,{和}是保留字,必须出现在允许保留字被识别的地方。识别的。由于它们不会导致单词分隔,因此必须通过空格或其他shell元字符将它们与列表分开。((表达))根据ARITHMETIC EVALUATION下面描述的规则评估表达式。如果表达式的值不为零,则返回状态为0;否则返回状态为1.这与let“expression”完全相同。[[表达]]根据条件表达式表达式的求值,返回0或1的状态。表达式由CONDI-下面描述的原色组成 - TIONAL EXPRESSIONS。不对[[和]]之间的单词执行单词拆分和路径名扩展; 波浪扩展,参数和变量扩展,执行算术扩展,命令替换,进程替换和引用删除。诸如-f之类的条件运算符必须不加引号才能被识别作为初选。与[[,<和>运算符一起使用时,使用当前语言环境按字典顺序排序。当使用==和!=运算符时,运算符右侧的字符串被视为一个模式,并根据下面描述的模式进行匹配匹配。如果启用了shell选项nocasematch,则执行匹配而不考虑字母字符的情况。如果是字符串,则返回值为0匹配(==)或不匹配(!=)模式,否则为1。可以引用模式的任何部分以强制它作为字符串匹配。可以使用另一个二元运算符=?,其优先级与==和!=相同。使用时,运算符右侧的字符串被视为a扩展正则表达式并相应地匹配(如在正则表达式(3)中)。如果字符串与模式匹配,则返回值为0,否则返回1。如果经常表达式在语法上是不正确的,条件表达式的返回值是2.如果启用了shell选项nocasematch,则执行匹配关于字母字符的情况。可以引用模式的任何部分以强制它作为字符串匹配。子字符串与括号内的子字符串匹配正则表达式中的压力保存在数组变量BASH_REMATCH中。索引为0的BASH_REMATCH元素是字符串匹配的部分整个正则表达式。索引为n的BASH_REMATCH元素是与第n个带括号的子表达式匹配的字符串部分。可以使用以下运算符组合表达式,按优先级递减顺序列出:(表达)返回表达式的值。这可以用于覆盖运算符的正常优先级。!表达如果表达式为false,则为True。expression1 && expression2如果expression1和expression2都为true,则为True。expression1 || 表达式2如果expression1或expression2为true,则为True。&&和|| 如果expression1的值足以确定整个条件表达式的返回值,则运算符不会计算expression2。名称[[in [word ...]]; ]列表; DONE扩展后面的单词列表,生成项目列表。变量名依次设置到该列表的每个元素,并且每次都执行列表。如果省略in字,for命令对每个设置的位置参数执行一次列表(参见下面的参数)。返回状态是退出状态执行的最后一个命令。如果后续项目的扩展导致空列表,则不执行任何命令,返回状态为0。for((expr1; expr2; expr3)); 做清单; DONE首先,根据算术评估下面描述的规则评估算术表达式expr1。然后算术表达式expr2进行评估反复进行,直到评估为零。每次expr2计算为非零值时,执行列表并计算算术表达式expr3。如果有的话表达式被省略,它的行为就好像它的计算结果为1.返回值是执行列表中最后一个命令的退出状态,如果是任何一个,则返回false表达式无效。选择名称[在单词]; 做清单; DONE扩展后面的单词列表,生成项目列表。扩展单词集打印在标准错误上,每个单词前面都有一个数字。如果在word中省略,打印位置参数(参见下面的参数)。然后显示PS3提示并从标准输入读取一行。如果line由与显示的单词之一对应的数字组成,然后name的值设置为该单词。如果该行为空,则单词和提示符为又玩了。如果读取EOF,则命令完成。读取的任何其他值都会将name设置为null。读取的行保存在变量REPLY中。清单是在每次选择之后执行,直到执行break命令。select的退出状态是列表中执行的最后一个命令的退出状态,如果没有,则为零mands被执行了。[[(] pattern [| pattern] ...)列表中的案例单词;; ] ... esaccase命令首先扩展word,并尝试依次使用与路径名扩展相同的匹配规则将其与每个模式匹配(请参阅路径名扩展)下面)。使用波浪扩展,参数和变量扩展,算术替换,命令替换,过程替换和引用来扩展该词去除。检查的每个模式都使用波形扩展,参数和变量扩展,算术替换,命令替换和过程替换来扩展。形式予以。如果启用了shell选项nocasematch,则执行匹配而不考虑字母字符的情况。找到匹配后,相关执行自选列表。如果;; 使用运算符,在第一个模式匹配后不会尝试后续匹配。使用;代替;; 导致执行继续与下一组模式相关联的列表。使用;;代替;; 导致shell测试语句中的下一个模式列表(如果有)和在成功匹配时执行任何关联列表。如果没有模式匹配,则退出状态为零。否则,它是执行的最后一个命令的退出状态名单。如果列表; 然后列出; [elif list; 然后列出; ] ... [else list; ] fi执行if列表。如果其退出状态为零,则执行then列表。否则,每个elif列表依次执行,如果其退出状态为零,则执行相应的列表并完成命令。否则,执行else列表(如果存在)。退出状态是最后一个退出状态执行命令,如果没有条件测试,则为零。而list-1; 做list-2; DONE直到list-1; 做list-2; DONE只要列表list-1中的最后一个命令返回退出状态为零,while命令就会连续执行列表list-2。until命令是相同的到while命令,除了测试被否定; 只要list-1中的最后一个命令返回非零退出状态,就会执行list-2。退出状态while和until命令是list-2中执行的最后一个命令的退出状态,如果没有执行则返回零。

协进程
​ coprocess是一个shell命令,前面是coproc保留字。协同进程在子shell中异步执行,就像命令已以&结束一样
​ 控制操作符,在执行的shell和协同进程之间建立双向管道。

   协同进程的格式是:coproc [NAME]命令[重定向]这将创建一个名为NAME的协同进程。如果未提供NAME,则默认名称为COPROC。如果command是一个简单的命令,则不得提供NAME(见上文); 除此以外,它被解释为简单命令的第一个单词。执行coproc时,shell会在上下文中创建一个名为NAME的数组变量(请参阅下面的数组)正在执行的shell。命令的标准输出通过管道连接到执行shell中的文件描述符,该文件描述符分配给NAME [0]。命令的标准输入通过管道连接到执行shell中的文件描述符,并且该文件描述符被分配给NAME [1]。这个管道建立了在命令指定的任何重定向之前(请参阅下面的REDIRECTION)。文件描述符可以用作shell命令和使用标准的重定向的参数单词扩展。为执行协同进程而生成的shell的进程ID可用作变量NAME_PID的值。wait builtin命令可能用于等待协处理器终止。协同进程的返回状态是命令的退出状态。

壳函数定义
​ shell函数是一个被称为简单命令的对象,它使用一组新的位置参数执行复合命令。Shell函数声明为
​ 如下:

   name()compound-command [重定向]函数名[()]复合命令[重定向]这定义了一个名为name的函数。保留字功能是可选的。如果提供了功能保留字,则括号是可选的。的身体function是复合命令compound-command(参见上面的Compound命令)。该命令通常是{和}之间的命令列表,但可以是任何命令在上面的复合命令下列出。只要将name指定为简单命令的名称,就会执行compound-command。任何重定向(请参阅重定向在执行该功能时执行定义功能时指定的)。除非发生语法错误,否则函数定义的退出状态为零或者已经存在具有相同名称的只读函数。执行时,函数的退出状态是正文中执行的最后一个命令的退出状态。(参见下面的功能。)

评论
​ 在非交互式shell中,或者在内置shopt的interactive_comments选项的交互式shell中(参见下面的SHELL BUILTIN命令),
​ 使用#导致该行以及该行上的所有剩余字符被忽略。未启用interactive_comments选项的交互式shell不允许
​ 评论。默认情况下,interactive_comments选项在交互式shell中处于启用状态。

QUOTING
​ 引用用于删除shell中某些字符或单词的特殊含义。引用可用于禁用特殊字符的特殊处理,以预先
​ 使保留字不被识别,并防止参数扩展。

   上面在定义下列出的每个元字符对shell具有特殊含义,如果要表示它,则必须引用它。当使用命令历史扩展工具时(参见下面的历史扩展),必须引用历史扩展字符,通常为!以防止历史记录扩张。有三种引用机制:转义字符,单引号和双引号。未引用的反斜杠(\)是转义字符。它保留了下一个字符的字面值,但<newline>除外。如果是\ <换行符>对出现,反斜杠本身没有引用,\ <newline>被视为一个行继续(即,它从输入流中删除并被有效忽略)。用单引号括起字符可以保留引号中每个字符的字面值。单引号之间可能不会出现单引号,即使在前面引用也是如此通过反斜杠。用双引号括起字符会保留引号内所有字符的字面值,但$,`,\除外,并且在启用历史记录扩展时,!字符$和`在双引号中保留其特殊含义。反斜杠只有在遵循下列特征之一时才保留其特殊含义ters:$,`,“,\或<newline>。双引号可以用双引号引用,前面加一个反斜杠。如果启用,将执行历史记录扩展一个!出现在双引号中的是使用反斜杠转义的。之前的反斜杠!没有删除。在双引号中,特殊参数*和@具有特殊含义(参见下面的参数)。$'string'形式的单词是专门处理的。单词扩展为字符串,替换为ANSI C标准指定的反斜杠转义字符。反斜杠转义序列(如果存在)按如下方式解码:警报(铃声)\ b退格。\ E\ E逃脱角色\ f表格饲料\ n新行\ r \ n回车\ t水平标签\ v垂直标签\\反斜杠单引号“双引号\ nnnn八位字符,其值为八进制值nnn(一到三位数)\ xHH八位字符,其值为十六进制值HH(一个或两个十六进制数字)\ uHHHH Unicode(ISO / IEC 10646)字符,其值为十六进制值HHHH(一到四个十六进制数字)\ UHHHHHHHHUnicode(ISO / IEC 10646)字符,其值为十六进制值HHHHHHHH(一到八个十六进制数字)\ cx是control-x字符扩展结果是单引号,好像美元符号不存在一样。带有美元符号($“string”)的双引号字符串将导致根据当前语言环境转换字符串。如果当前语言环境是C或POSIX,则美元符号被忽略。如果翻译并替换字符串,则替换为双引号。

参数
​ 参数是存储值的实体。它可以是特殊参数下面列出的名称,数字或特殊字符之一。变量是一个参数
​ 用名字表示。变量具有值和零个或多个属性。使用declare builtin命令分配属性(请参阅SHELL BUILTIN COM中的声明)
​ MANDS)。

   如果已为其分配了值,则会设置该参数。空字符串是有效值。设置变量后,只能使用unset builtin命令取消设置(参见SHELL BUILTIN COMMANDS如下)。可以通过表单的声明来分配变量名称= [值]如果未给出值,则为变量分配空字符串。所有值都进行波形扩展,参数和变量扩展,命令替换,算术扩展和报价删除(参见下面的扩展)。如果变量的整数属性已设置,则即使$((...))也将值计算为算术表达式不使用扩展(参见下面的算术扩展)。除了“$ @”之外,不执行单词拆分,如下面特殊参数下所述。路径名不进行扩展。赋值语句也可以作为别名,声明,排版,导出,只读和本地内置命令的参数出现。在赋值语句为shell变量或数组索引赋值的上下文中,+ =运算符可用于追加或添加到变量的prev-价值。当+ =应用于已设置整数属性的变量时,将值计算为算术表达式并添加到变量的当前值值,也被评估。当使用复合赋值将+ =应用于数组变量时(请参阅下面的数组),变量的值不会被取消(就像使用时一样)=),并且新值将附加到数组,从大于数组的最大索引(对于索引数组)开始,或作为附加键值对添加到数组中ciative数组。应用于字符串值变量时,会扩展值并将其附加到变量的值。

位置参数
​ 位置参数是由一个或多个数字表示的参数,而不是单个数字0.位置参数是从shell的参数分配的。
​ 调用,可以使用set builtin命令重新分配。可能无法使用赋值语句将位置参数分配给它们。位置参数是时间 -
​ 执行shell函数时,rarily被替换(参见下面的功能)。

   当展开由多个数字组成的位置参数时,必须将其括在大括号中(参见下面的扩展)。

特殊参数
​ shell专门处理几个参数。这些参数只能被引用; 不允许分配给他们。
从一个开始扩展到位置参数。当扩展发生在双引号内时,它会扩展为具有每个参数值的单个单词
​ 由IFS特殊变量的第一个字符分隔。也就是说,“$
”相当于“$ 1c $ 2c ...”,其中c是IFS变量值的第一个字符。
​ 能够。如果未设置IFS,则参数由空格分隔。如果IFS为null,则参数将在不插入分隔符的情况下连接。
​ @从一个开始扩展到位置参数。当扩展发生在双引号内时,每个参数都会扩展为单独的单词。也就是说,“$ @”是
​ 相当于“$ 1”“$ 2”...如果双引号扩展发生在一个单词中,则第一个参数的扩展与原始的起始部分相连
​ nal word,并且最后一个参数的扩展与原始单词的最后部分连接。当没有位置参数时,“$ @”和$ @展开到
​ 没有(即,他们被删除)。
​ #扩展为十进制的位置参数数。
​ ?扩展到最近执行的前台管道的退出状态。
​ - 扩展为调用时指定的当前选项标志,set builtin命令或shell本身设置的那些(例如-i选项)。
​ $扩展为shell的进程ID。在()子shell中,它扩展为当前shell的进程ID,而不是子shell。
​ !扩展到最近执行的后台(异步)命令的进程ID。
​ 0扩展为shell或shell脚本的名称。这是在shell初始化时设置的。如果使用命令文件调用bash,则将$ 0设置为该名称
​ 文件。如果使用-c选项启动bash,则将$ 0设置为要执行的字符串之后的第一个参数(如果存在)。否则,它被设置为
​ 用于调用bash的文件名,由参数zero指定。
​ _在shell启动时,设置为用于调用在环境或参数列表中传递的正在执行的shell或shell脚本的绝对路径名。随后,
​ 扩展后扩展到上一个命令的最后一个参数。同时设置为用于调用已执行并放置在环境中的每个命令的完整路径名
​ 导出到该命令。检查邮件时,此参数保存当前正在检查的邮件文件的名称。

壳变量
​ 以下变量由shell设置:

   BASH扩展为用于调用此bash实例的完整文件名。BASHOPTS以冒号分隔的已启用shell选项列表。列表中的每个单词都是shopt内置命令的-s选项的有效参数(请参阅SHELL BUILTIN命令下面)。BASHOPTS中出现的选项是shopt报告的选项。如果此变量在bash启动时的环境中,则每个shell选项都在列表将在读取任何启动文件之前启用。此变量是只读的。BASHPID扩展到当前bash进程的进程ID。这在某些情况下不同于$$,例如不需要bash重新初始化的子shell化的。BASH_ALIASES一个关联数组变量,其成员对应于别名内置维护的别名内部列表。添加到此数组的元素显示在别名列表; 取消设置数组元素会导致从别名列表中删除别名。BASH_ARGC一个数组变量,其值是当前bash执行调用堆栈的每个帧中的参数数。当前子例程的参数数量(使用。或source执行的shell函数或脚本)位于堆栈的顶部。执行子程序时,会传递传递的参数数量BASH_ARGC。shell仅在处于扩展调试模式时才设置BASH_ARGC(请参阅下面内置shopt的extdebug选项的说明)BASH_ARGV包含当前bash执行调用堆栈中所有参数的数组变量。最后一个子程序调用的最后一个参数位于顶部堆; 初始调用的第一个参数位于底部。执行子程序时,提供的参数将被推送到BASH_ARGV。外壳设置BASH_ARGV仅在扩展调试模式下(参见下面内置shopt的extdebug选项说明)BASH_CMDS一个关联数组变量,其成员对应于由哈希内置维护的命令的内部哈希表。出现添加到此数组的元素在哈希表中; unsetting数组元素导致从哈希表中删除命令。BASH_COMMAND当前正在执行或即将执行的命令,除非shell正在执行命令作为陷阱的结果,在这种情况下,它是命令执行 - 在陷阱的时候。BASH_EXECUTION_STRING-c调用选项的命令参数。BASH_LINENO一个数组变量,其成员是源文件中的行号,其中调用了FUNCNAME的每个相应成员。$ {BASH_LINENO [$ i]}是中的行号源文件($ {BASH_SOURCE [$ i + 1]})其中调用$ {FUNCNAME [$ i]}(如果在另一个shell函数中引用,则为$ {BASH_LINENO [$ i-1]})。使用LINENO获取当前行号。BASH_REMATCH一个数组变量,其成员由=?二元运算符分配给[[条件命令。索引为0的元素是字符串匹配的部分整个正则表达式。索引为n的元素是与第n个带括号的子表达式匹配的字符串部分。此变量是只读的。BASH_SOURCE一个数组变量,其成员是源文件名,其中定义了FUNCNAME数组变量中相应的shell函数名。shell函数$ {FUNCNAME [$ i]}在$ {BASH_SOURCE [$ i]}文件中定义,并从$ {BASH_SOURCE [$ i + 1]}调用。BASH_SUBSHELL每次生成子shell或子shell环境时增加1。初始值为0。BASH_VERSINFO一个只读数组变量,其成员包含此bash实例的版本信息。分配给数组成员的值如下:BASH_VERSINFO [0]主要版本号(发行版)。BASH_VERSINFO [1]次要版本号(版本)。BASH_VERSINFO [2]补丁级别。BASH_VERSINFO [3]构建版本。BASH_VERSINFO [4]发布状态(例如,beta1)。BASH_VERSINFO [5] MACHTYPE的值。BASH_VERSION扩展为描述此bash实例版本的字符串。COMP_CWORD包含当前光标位置的单词$ {COMP_WORDS}的索引。此变量仅在可编程补充调用的shell函数中可用。设施(见下面的可编程完成)。COMP_KEY用于调用当前完成函数的键(或键序列的最终键)。COMP_LINE当前命令行。此变量仅在可编程完成工具调用的shell函数和外部命令中可用(请参阅可编程完成下面)。COMP_POINT当前光标位置相对于当前命令开头的索引。如果当前光标位置在当前命令的末尾,则此变量的值等于$ {#COMP_LINE}。此变量仅在可编程完成调用的shell函数和外部命令中可用设施(见下面的可编程完成)。COMP_TYPE设置为与导致调用完成函数的尝试完成类型相对应的整数值:TAB,正常完成,?,用于列出连续标签之后的完成,!,用于列出部分单词完成的备选方案,@,如果单词未被修改则列出完成,或%,用于菜单补充灰。此变量仅在可编程完成工具调用的shell函数和外部命令中可用(请参阅下面的可编程完成)。COMP_WORDBREAKS执行单词完成时,readline库将其视为单词分隔符的字符集。如果COMP_WORDBREAKS未设置,则会失去其特殊的适当性 - 关系,即使它随后被重置。COMP_WORDS一个数组变量(参见下面的数组),由当前命令行中的各个单词组成。该行被分成单词,因为readline将使用它来分割它COMP_WORDBREAKS如上所述。此变量仅在可编程完成工具调用的shell函数中可用(请参阅可编程完成下面)。COPROC一个数组变量(参见下面的数组),用于保存文件描述符以输出和输入未命名的协同进程(参见上面的Coprocesses)。DIRSTACK包含目录堆栈当前内容的数组变量(请参阅下面的数组)。目录按照它们显示的顺序出现在堆栈中dirs builtin。分配给此数组变量的成员可用于修改堆栈中已有的目录,但必须使用pushd和popd内置函数来添加并删除目录。对此变量的赋值不会更改当前目录。如果未设置DIRSTACK,它将丢失其特殊属性,即使它是后续重置。EUID扩展为当前用户的有效用户ID,在shell启动时初始化。这个变量是只读的。FUNCNAME一个数组变量,包含当前在执行调用堆栈中的所有shell函数的名称。索引为0的元素是当前正在执行的任何元素shell函数。最底部的元素(索引最高的元素)是“main”。此变量仅在执行shell函数时存在。分配给FUNCNAME无效并返回错误状态。如果未设置FUNCNAME,则会丢失其特殊属性,即使它随后被重置。此变量可与BASH_LINENO和BASH_SOURCE一起使用。FUNCNAME的每个元素在BASH_LINENO和BASH_SOURCE中都有相应的元素来描述调用堆。例如,$ {FUNCNAME [$ i]}是从行号$ {BASH_LINENO [$ i]}的$ {BASH_SOURCE [$ i + 1]}调用的。内置呼叫者显示当前呼叫堆栈使用此信息。GROUPS一个数组变量,包含当前用户所属的组列表。对GROUPS的分配无效并返回错误状态。如果是GROUPS未设置,即使随后重置,它也会失去其特殊属性。HISTCMD当前命令的历史记录编号或历史记录列表中的索引。如果未设置HISTCMD,它将失去其特殊属性,即使它随后被重置。主机名自动设置为当前主机的名称。HOSTTYPE自动设置为唯一描述正在执行bash的计算机类型的字符串。默认值取决于系统。LINENO每次引用此参数时,shell都会在脚本中替换表示当前顺序行号(以1开头)的十进制数或功能。当不在脚本或函数中时,替换值不保证有意义。如果LINENO未设置,即使它失去了它的特殊属性随后重置。MACHTYPE自动设置为完全描述执行bash的系统类型的字符串,采用标准GNU cpu-company-system格式。默认为系统 - 依赖。MAPFILE创建一个数组变量(请参阅下面的数组),用于保存未提供变量名时内置文件读取的文本。OLDPWD cd命令设置的上一个工作目录。OPTARG getopts builtin命令处理的最后一个选项参数的值(参见下面的SHELL BUILTIN命令)。OPTIND getopts builtin命令要处理的下一个参数的索引(参见下面的SHELL BUILTIN命令)。OSTYPE自动设置为一个字符串,描述执行bash的操作系统。默认值取决于系统。PIPESTATUS一个数组变量(参见下面的数组),其中包含最近执行的前台管道(可能包含)中的进程的退出状态值列表只有一个命令)。PPID shell的父进程ID。这个变量是只读的。PWD cd命令设置的当前工作目录。RANDOM每次引用此参数时,都会生成0到32767之间的随机整数。可以通过赋值来初始化随机数序列随机。如果未设置RANDOM,即使随后重置,它也会失去其特殊属性。READLINE_LINEreadline行缓冲区的内容,用于“bind -x”(参见下面的SHELL BUILTIN命令)。READLINE_POINT插入点在readline行缓冲区中的位置,与“bind -x”一起使用(请参阅下面的SHELL BUILTIN命令)。REPLY在没有提供参数时设置为read builtin命令读取的输入行。SECONDS每次引用此参数时,都会返回自返回shell调用以来的秒数。如果为SECONDS分配了值,则返回的值为quent references是分配后的秒数加上分配的值。如果SECONDS未设置,它将失去其特殊属性,即使它是subse-好意重置。SHELLOPTS以冒号分隔的已启用shell选项列表。列表中的每个单词都是set builtin命令的-o选项的有效参数(请参阅SHELL BUILTIN命令下面)。SHELLOPTS中出现的选项是由set -o报告的选项。如果此变量在bash启动时的环境中,则每个shell选项都在列表将在读取任何启动文件之前启用。此变量是只读的。SHLVL每次启动bash实例时增加1。UID扩展为当前用户的用户标识,在shell启动时初始化。这个变量是只读的。shell使用以下变量。在某些情况下,bash会为变量分配默认值; 这些情况如下所述。BASH_ENV如果在bash执行shell脚本时设置了此参数,则其值将被解释为包含初始化shell的命令的文件名,如?/ .bashrc中所示。BASH_ENV的值在被解释为文件名之前需要进行参数扩展,命令替换和算术扩展。PATH不习惯搜索结果文件名。BASH_XTRACEFD如果设置为与有效文件描述符对应的整数,则bash会将set -x启用时生成的跟踪输出写入该文件描述符。文件当取消设置BASH_XTRACEFD或分配新值时,将关闭描述符。取消设置BASH_XTRACEFD或为其分配空字符串会导致发送跟踪输出到标准错误。请注意,将BASH_XTRACEFD设置为2(标准错误文件描述符)然后取消设置将导致标准错误被关闭。CDPATH cd命令的搜索路径。这是一个以冒号分隔的目录列表,其中shell查找cd命令指定的目标目录。一个样本值为“。:?:/ usr”。列由select select命令用于确定打印选择列表时的终端宽度。收到SIGWINCH后自动设置。COMPREPLY一个数组变量,bash读取由可编程完成工具调用的shell函数生成的可能完成(参见Programmable Com-请注意以下内容)。EMACS如果bash在shell以值“t”开始时在环境中找到此变量,则它假定shell在Emacs shell缓冲区中运行并禁用行编辑。ENV类似于BASH_ENV; 在POSIX模式下调用shell时使用。FCEDIT fc内置命令的默认编辑器。FIGNORE执行文件名完成时要忽略的以冒号分隔的后缀列表(请参阅下面的READLINE)。一个文件名,其后缀与FIGNORE中的一个条目匹配从匹配的文件名列表中排除。示例值为“.o:?”。FUNCNEST如果设置为大于0的数值,则定义最大函数嵌套级别。超过此嵌套级别的函数调用将导致当前命令中止。GLOBIGNORE以冒号分隔的模式列表,用于定义要由路径名扩展忽略的文件名集。如果文件名也与路径名扩展模式匹配匹配GLOBIGNORE中的一个模式,它将从匹配列表中删除。HISTCONTROL以冒号分隔的值列表,用于控制命令在历史列表中的保存方式。如果值列表包含ignorespace,则以空格开头的行字符未保存在历史记录列表中。ignoredups的值导致不保存与先前历史记录条目匹配的行。ignoreboth的值是short-为忽略空间和ignoredups的手。erasedups的值导致与该当前行匹配的所有先前行在该行之前从历史列表中删除保存。忽略上面列表中没有的任何值。如果未设置HISTCONTROL,或者未包含有效值,则shell解析器读取的所有行都将保存在历史列表,受HISTIGNORE的价值限制。未测试多行复合命令的第二行和后续行,并将其添加到历史记录中无论HISTCONTROL的值如何。HISTFILE保存命令历史记录的文件的名称(请参阅下面的历史记录)。默认值为?/ .bash_history。如果未设置,则在保存时不保存命令历史记录交互式shell退出。HISTFILESIZE历史文件中包含的最大行数。为此变量分配值时,如有必要,通过删除最旧的文件来截断历史文件条目,包含不超过该行数。默认值为500.在交互式写入历史文件后,历史文件也会被截断为此大小shell退出。HISTIGNORE以冒号分隔的模式列表,用于决定应在历史列表中保存哪些命令行。每个模式都锚定在行的开头必须匹配整行(不附加隐式`*')。在应用HISTCONTROL指定的检查后,将针对该行测试每个模式。在阿迪-对于正常的shell模式匹配字符,`&'匹配以前的历史记录行。`&'可以使用反斜杠进行转义; 之前删除了反斜杠尝试比赛。多行复合命令的第二行和后续行未经过测试,无论HISTIG的值如何,都会添加到历史记录中NORE。HISTSIZE命令历史记录中要记住的命令数(请参阅下面的历史记录)。默认值为500。HISTTIMEFORMAT如果此变量已设置且不为null,则其值将用作strftime(3)的格式字符串,以打印与由此显示的每个历史记录条目关联的时间戳。历史建立。如果设置了此变量,则会将时间戳记写入历史记录文件,以便可以跨shell会话保留它们。这使用了历史评论用于区分时间戳与其他历史记录行的字符。HOME当前用户的主目录; cd builtin命令的默认参数。执行波浪扩展时也使用此变量的值。HOSTFILE包含与/ etc / hosts格式相同的文件名,当shell需要完成主机名时应该读取该文件的名称。可能的主机名列表 - 在shell运行时可能会改变tions; 更改值后,下次尝试完成主机名时,bash会将新文件的内容添加到现有清单。如果设置了HOSTFILE但没有值,或者没有命名可读文件,bash会尝试读取/ etc / hosts以获取可能的主机名列表落成。取消设置HOSTFILE时,将清除主机名列表。IFS内部字段分隔符,用于在扩展后进行单词拆分,并使用read builtin命令将行拆分为单词。默认值为``<空间> <标签> <换行符> ''。IGNOREEOF控制交互式shell在接收EOF字符作为唯一输入时的操作。如果设置,则该值是必须的连续EOF字符数在bash退出之前输入作为输入行的第一个字符。如果变量存在但没有数值,或者没有值,则默认值为10.如果它不存在,EOF表示shell的输入结束。INPUTRCreadline启动文件的文件名,覆盖默认的?/ .inputrc(参见下面的READLINE)。LANG用于确定未使用以LC_开头的变量专门选择的任何类别的区域设置类别。LC_ALL此变量将覆盖LANG的值以及指定区域设置类别的任何其他LC_变量。LC_COLLATE此变量确定排序路径名扩展结果时使用的归类顺序,并确定范围表达式的行为,等价类和路径名扩展和模式匹配中的整理序列。LC_CTYPE此变量确定字符的解释以及路径名扩展和模式匹配中字符类的行为。LC_MESSAGES此变量确定用于转换前缀为$的双引号字符串的语言环境。LC_NUMERIC此变量确定用于数字格式的区域设置类别。LINES select复合命令用于确定打印选择列表的列长度。收到SIGWINCH后自动设置。MAIL如果此参数设置为文件或目录名称且未设置MAILPATH变量,则bash会通知用户邮件到达指定文件或Maildir格式目录。MAILCHECK指定bash检查邮件的频率(以秒为单位)。默认值为60秒。当需要检查邮件时,shell会在显示主邮件之前执行此操作提示。如果未设置此变量,或将该值设置为大于或等于零的数值,则shell将禁用邮件检查。MAILPATH要检查邮件的以冒号分隔的文件名列表。当邮件到达特定文件时要打印的消息可以通过分离文件来指定带有“?”的消息的名称。在消息文本中使用时,$ _将扩展为当前邮件文件的名称。例:MAILPATH ='/ var / mail / bfox?“你有邮件”:?/ shell-mail?“$ _有邮件!”'Bash为此变量提供默认值,但它使用的用户邮件文件的位置取决于系统(例如,/ var / mail / $ USER)。OPTERR如果设置为值1,bash将显示getopts builtin命令生成的错误消息(请参阅下面的SHELL BUILTIN命令)。OPTERR每次初始化为1调用shell或执行shell脚本。PATH命令的搜索路径。它是以冒号分隔的目录列表,其中shell查找命令(请参阅下面的命令执行)。零长度(null)PATH值中的目录名称表示当前目录。空目录名称可以显示为两个相邻的冒号,或者作为初始冒号或尾随冒号。该默认路径是系统相关的,由安装bash的管理员设置。一个常见的值是``/ usr / gnu / bin:/ usr / local / bin:/ usr / ucb:/ bin:/ usr / bin''。POSIXLY_CORRECT如果此变量在bash启动时处于环境中,则shell在读取启动文件之前进入posix模式,就像--posix调用选项已经提供。如果在shell运行时设置它,则bash启用posix模式,就像命令set -o posix已被执行一样。PROMPT_COMMAND如果设置,则在发出每个主要提示之前将该值作为命令执行。PROMPT_DIRTRIM如果设置为大于零的数字,则该值将用作展开\ w和\ W提示字符串转义时要保留的尾随目录组件的数量(见下面的提示)。删除的字符将替换为省略号。PS1此参数的值已扩展(请参阅下面的PROMPTING)并用作主要提示字符串。默认值为``\ s- \ v \ $''。PS2此参数的值与PS1一样展开,并用作辅助提示字符串。默认为“>”。PS3此参数的值用作select命令的提示符(请参阅上面的SHELL GRAMMAR)。PS4此参数的值与PS1一样展开,并且在执行跟踪期间显示每个命令bash之前打印该值。PS4的第一个角色必要时多次复制以指示多个间接级别。默认为“+”。SHELL shell的完整路径名保存在此环境变量中。如果在shell启动时未设置它,bash会为其分配当前的完整路径名用户的登录shell。时间格式此参数的值用作格式字符串,指定应如何显示以时间保留字为前缀的管道的时序信息。%字符引入了一个转义为时间值或其他信息的转义序列。逃逸序列及其含义如下; 该大括号表示可选部分。%%一个字面%。%[p] [l] R经过的时间,以秒为单位。%[p] [l] U在用户模式下花费的CPU秒数。%[p] [l] S在系统模式下花费的CPU秒数。%P CPU百分比,计算方式为(%U +%S)/%R。可选p是指定精度的数字,小数点后的小数位数。值为0会导致小数点或分数无效放。最多可以指定小数点后的三个位置; p大于3的值更改为3.如果未指定p,则使用值3。可选l指定MMmSS.FFs格式的更长格式,包括分钟。p的值确定是否包括该分数。如果未设置此变量,则bash的行为就像它具有$'\ nreal \ t%3lR \ nuser \ t%3lU \ nsys%3lS'的值。如果该值为null,则不显示任何计时信息。一个显示格式字符串时添加尾随换行符。TMOUT如果设置为大于零的值,则TMOUT将被视为读取内置的默认超时。如果在TMOUT之后输入未到达,则select命令终止输入来自终端的秒数。在交互式shell中,该值被解释为在发出主要数据后等待输入的秒数提示。如果输入未到达,Bash会在等待该秒数后终止。TMPDIR如果设置,bash使用其值作为bash为shell使用创建临时文件的目录的名称。auto_resume此变量控制shell如何与用户和作业控件交互。如果设置了此变量,则不带重定向的单字简单命令将被视为恢复现有停工的候选人。疗法e为无歧义允许; 如果有一个以键入的字符串开头的多个作业,则该作业最多最近访问被选中。在此上下文中,已停止作业的名称是用于启动它的命令行。如果设置为exact,则必须提供字符串完全匹配已停止作业的名称; 如果设置为substring,则提供的字符串需要匹配已停止作业名称的子字符串。子串值pro-提供类似于%的功能?作业标识符(参见下面的JOB CONTROL)。如果设置为任何其他值,则提供的字符串必须是已停止作业的前缀名称; 这提供了类似于%字符串作业标识符的功能。histchars控制历史扩展和标记化的两个或三个字符(参见下面的历史扩展)。第一个字符是历史扩展字符,表示历史扩展开始的字符,通常是“!”。第二个字符是快速替换字符,用作速记重新运行上一个输入的命令,在命令中用一个字符串替换另一个字符串。默认为“^”。可选的第三个字符是字符表示当作为单词的第一个字符找到时,该行的其余部分是注释,通常是“#”。历史评论字符导致历史记录替代要跳过该线上剩余的单词的tution。它不一定会导致shell解析器将该行的其余部分视为注释。

数组
​ Bash提供一维索引和关联数组变量。任何变量都可以用作索引数组; declare builtin将显式声明一个数组。
​ 对数组的大小没有最大限制,也没有要求成员被索引或连续分配的要求。索引数组使用整数引用
​ (包括算术表达式)并且基于零; 使用任意字符串引用关联数组。

   如果使用语法name [subscript] = value分配任何变量,则会自动创建索引数组。下标被视为算术表达式必须评估一个数字。如果下标求值为小于零的数字,则将其用作大于数组最大索引的偏移量(因此下标为-1)指的是数组的最后一个元素)。要显式声明索引数组,请使用declare -a name(请参阅下面的SHELL BUILTIN命令)。声明-a name [下标]也是公认; 下标被忽略。使用declare -A name创建关联数组。可以使用declare和readonly builtins为数组变量指定属性。每个属性都适用于数组的所有成员。数组被赋值为使用格式名称=(value1 ... valuen)的复合赋值,其中每个值的格式为[subscript] = string。索引数组赋值没有需要括号和下标。分配给索引数组时,如果提供了可选括号和下标,则将该索引分配给; 否则指数分配的元素是语句分配的最后一个索引加一。索引从零开始。分配给关联数组时,下标是必需的。声明内置也接受此语法。可以使用上面引入的名称[subscript] = value语法来指定各个数组元素。可以使用$ {name [subscript]}引用数组的任何元素。需要大括号以避免与路径名扩展冲突。如果下标是@或*,那么这个词扩展到名称的所有成员。这些下标仅在单词出现在双引号内时有所不同。如果单词是双引号,$ {name [*]}会扩展为单个单词将每个数组成员的值用IFS特殊变量的第一个字符分隔,$ {name [@]}将name的每个元素展开为一个单独的单词。当有没有数组成员,$ {name [@]}扩展为空。如果双引号扩展发生在一个单词中,则第一个参数的扩展与开头连接原始单词的一部分,最后一个参数的扩展与原始单词的最后一部分相连。这类似于特殊的扩展参数*和@(参见上面的特殊参数)。$ {#name [下标]}扩展为$ {name [下标]}的长度。如果下标是*或@,则扩展名为数组中的元素。引用不带下标的数组变量等效于引用下标为0的数组。如果已为下标指定值,则认为数组变量已设置。空字符串是有效值。未设置的内置函数用于销毁数组。unset name [subscript]在索引下标处销毁数组元素。必须注意避免引起不必要的副作用通过路径名扩展。取消设置名称,其中name是数组,或取消设置name [subscript],其中下标为*或@,删除整个数组。declare,local和readonly内置函数都接受-a选项来指定索引数组,并使用-A选项来指定关联数组。如果提供了两个选项,-A优先。read builtin接受-a选项,将从标准输入读取的单词列表分配给数组。set和declare内置显示数组值以允许它们作为赋值重用的方式。

扩张
​ 在将命令行拆分为单词后,将在命令行上执行扩展。进行了七种扩展:支撑扩展,波浪扩展,参数和
​ 变量扩展,命令替换,算术扩展,字拆分和路径名扩展。

   扩展的顺序是:括号扩展,波浪扩展,参数,变量和算术扩展以及命令替换(以从左到右的方式完成),单词拆分和路径名扩展。在可以支持它的系统上,还有一个额外的扩展可用:进程替换。只有大括号扩展,分词和路径名扩展才能改变扩展的单词数; 其他扩展将单个单词扩展为单个单词。该唯一的例外是“$ @”和“$ {name [@]}”的扩展,如上所述(参见PARAMETERS)。

支持扩张
​ 支撑扩展是一种可以生成任意字符串的机制。此机制类似于路径名扩展,但生成的文件名不需要存在。
​ 要扩展的模式采用可选前导码的形式,后跟一系列以逗号分隔的字符串或一对括号之间的序列表达式,
​ 然后是可选的附言。前导码以大括号中包含的每个字符串为前缀,然后将postscript附加到每个结果字符串,
​ 从左到右扩展。

   Brace扩展可以嵌套。每个展开的字符串的结果都没有排序; 保持从左到右的顺序。例如,{d,c,b} e扩展为“ade ace abe”。序列表达式采用{x..y [.. incr]}的形式,其中x和y是整数或单个字符,incr是可选的增量,是整数。当整数如果提供,表达式将扩展到x和y之间的每个数字,包括0和y。提供的整数可以以0为前缀,以强制每个术语具有相同的宽度。什么时候无论是x还是y都以零开头,shell会尝试强制所有生成的术语包含相同数量的数字,必要时填充零填充。当人物是如果提供,表达式将按字典顺序在x和y之间扩展到每个字符。请注意,x和y必须属于同一类型。当增量是支持合计,它被用作每个术语之间的差异。根据需要,默认增量为1或-1。在任何其他扩展之前执行大括号扩展,并且在结果中保留对其他扩展特殊的任何字符。这是严格的文字。Bash没有将任何句法解释应用于扩展的上下文或大括号之间的文本。正确形成的大括号扩展必须包含不带引号的开括号和右大括号,以及至少一个不带引号的逗号或有效的序列表达式。任何错误形成支撑扩展保持不变。一个{或者,可以用反斜杠引用,以防止它被视为括号表达式的一部分。避免与参数冲突扩展,字符串$ {不被认为有资格进行大括号扩展。当要生成的字符串的公共前缀比上例中的更长时,此构造通常用作速记:mkdir / usr / local / src / bash / {old,new,dist,bugs}要么chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}支撑扩展引入了与sh的历史版本的轻微不兼容。sh不会特别当它们作为单词的一部分出现时打开或关闭括号,并将它们保存在输出中。由于大括号扩展,Bash从单词中删除大括号。例如,输入sh作为文件{1,2}的单词在中显示相同输出。在通过bash扩展后,相同的单词输出为file1 file2。如果需要与sh严格兼容,请使用+ B选项启动bash或禁用大括号使用set命令的+ B选项进行扩展(参见下面的SHELL BUILTIN命令)。

Tilde扩张
​ 如果一个单词以不带引号的波形符(`?')开头,则第一个不带引号的斜杠之前的所有字符(或者所有字符,如果没有未加引号的斜杠)都是
​ 支持波浪号前缀。如果没有引用tilde-prefix中的字符,则代字号后面的波浪号前缀中的字符将被视为可能的登录名
​ 名称。如果此登录名是空字符串,则将波形符替换为shell参数HOME的值。如果未设置HOME,则执行用户的主目录
​ 相反,shell被替换。否则,tilde-prefix将替换为与指定登录名关联的主目录。

   如果tilde-prefix是“?+”,则shell变量PWD的值将替换tilde-prefix。如果tilde-prefix是“? - ”,则shell变量OLDPWD的值(如果是)设置,被替换。如果在波浪号前缀中波浪号后面的字符由数字N组成,可选地以“+”或“ - ”为前缀,则替换波形符前缀使用目录堆栈中的相应元素,因为它将以使用tilde-prefix作为参数调用的内置结构显示。如果字符跟随 - 在波浪号前缀中的波浪号由一个没有前导“+”或“ - ”的数字组成,假定为“+”。如果登录名无效,或者代字号扩展失败,则该字不变。检查每个变量赋值是否紧跟在:或第一个=之后的未加引号的波浪号前缀。在这些情况下,还执行波浪扩展。所以,在PATH,MAILPATH和CDPATH的赋值中,可以使用带有波浪号的文件名,shell会分配扩展值。

参数扩展
​ `$'字符引入了参数扩展,命令替换或算术扩展。要展开的参数名称或符号可以用大括号括起来
​ 是可选的,但用于保护变量以便从紧跟在其后面的字符扩展,这可以被解释为名称的一部分。

   当使用大括号时,匹配的结束括号是第一个没有被反斜杠或带引号的字符串转义的`}',而不是嵌入式算术扩展中的,强制替换或参数扩展。$ {}参数参数的值被替换。当参数是具有多个数字的位置参数或参数后跟a时,需要括号不得将其解释为其名称的一部分的字符。如果参数的第一个字符是感叹号(!),则引入变量间接的级别。Bash使用从其余部分形成的变量的值参数作为变量的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值。这个被称为间接扩张。例外情况是下面描述的$ {!prefix *}和$ {!name [@]}的扩展。感叹号必须紧跟着左支撑以引入间接。在下面的每种情况中,单词都受波形扩展,参数扩展,命令替换和算术扩展的影响。当不执行子字符串扩展时,使用下面记录的表单,bash测试未设置或为null的参数。省略冒号导致仅对a进行测试未设置的参数。$ {参数:-word}使用默认值。如果参数未设置或为null,则替换单词的扩展。否则,参数的值将被替换。$ {参数:=词}分配默认值。如果参数未设置或为null,则将字的扩展分配给参数。然后替换参数的值。位置参数 - 不能以这种方式分配ters和特殊参数。$ {参数:?单词}如果为空或未设置则显示错误。如果参数为null或未设置,则将单词的扩展(或者如果单词不存在则为该效果的消息)写入标准错误和shell,如果不是交互式,则退出。否则,参数的值将被替换。$ {参数:+单词}使用替代值。如果参数为null或未设置,则不替换任何内容,否则将替换word的扩展。$ {参数:偏移}$ {参数:偏移量:长度}子串扩展。从offset指定的字符开始扩展为参数的最大长度字符。如果省略length,则展开为子字符串参数从offset指定的字符开始。length和offset是算术表达式(参见下面的ARITHMETIC EVALUATION)。如果偏移评估为a如果数字小于零,则该值用作参数值末尾的偏移量。如果length的计算结果小于零,且参数不是@而不是索引或关联数组,它被解释为从参数值的末尾而不是多个字符的偏移,并且扩展是两个偏移之间的字符。如果参数为@,则结果是从offset开始的长度位置参数。如果参数是索引数组名称子由@或*编写,结果是以$ {parameter [offset]}开头的数组的长度成员。相对于大于1的负偏移指定数组的最大索引。应用于关联数组的子串扩展会产生未定义的结果。请注意,必须分隔负偏移量从冒号到至少一个空间,以避免与: - 扩展混淆。除非使用位置参数,否则子串索引是从零开始的在哪种情况下,索引默认从1开始。如果offset为0,并且使用了位置参数,则会在列表中添加$ 0作为前缀。$ {!前缀*}$ {!前缀@}名称匹配前缀。扩展为名称以prefix开头的变量的名称,由IFS特殊变量的第一个字符分隔。使用@时并且扩展名出现在双引号内,每个变量名称都会扩展为单独的单词。$ {!名称[@]}$ {!名称[*]}数组键列表。如果name是数组变量,则展开到名称中指定的数组索引(键)列表。如果name不是数组,则如果设置了name,则展开为0否则为null。当使用@并且扩展名出现在双引号内时,每个键都会扩展为单独的单词。$ {#参数}参数长度。参数值的字符长度被替换。如果参数是*或@,则替换值是位置参数的数量 - ETERS。如果parameter是由*或@下标的数组名,则替换的值是数组中元素的数量。$ {参数#字}$ {参数##字}删除匹配的前缀模式。这个词被扩展为产生一个模式,就像路径名扩展一样。如果模式匹配参数值的开头那么,扩展的结果是参数的扩展值,具有最短的匹配模式(“#”情况)或最长的匹配模式(``##''case)已删除。如果参数是@或*,则模式删除操作依次应用于每个位置参数,并且扩展是结果列表。如果参数是使用@或*下标的数组变量,则模式删除操作依次应用于数组的每个成员,并且扩展为结果清单。$ {参数%字}$ {参数%%词}删除匹配的后缀模式。这个词被扩展为产生一个模式,就像路径名扩展一样。如果模式匹配展开的尾部参数的值,那么扩展的结果是具有最短匹配模式(“%”的情况)或最长匹配的参数的扩展值模式(``%%''案例)已删除。如果参数是@或*,则模式删除操作依次应用于每个位置参数,并且扩展为结果清单。如果参数是使用@或*下标的数组变量,则模式删除操作依次应用于数组的每个成员,并且扩展是结果列表。$ {参数/模式/字符串}模式替换。扩展模式以生成模式,就像路径名扩展一样。参数被扩展并且模式与其最长匹配value被替换为string。如果pattern以/开头,则pattern的所有匹配都将替换为string。通常只替换第一场比赛。如果模式以#开头,它必须在参数的扩展值的开头匹配。如果模式以%开头,则它必须在参数的扩展值的末尾匹配之三。如果string为null,则删除pattern的匹配,并且可以省略/ following模式。如果参数是@或*,则应用替换操作每个位置参数依次,扩展是结果列表。如果参数是使用@或*下标的数组变量,则替换操作为依次应用于数组的每个成员,扩展是结果列表。$ {参数M模式}$ {参数^^模式}$ {参数,模式}$ {参数,,模式}案例修改。此扩展修改参数中字母字符的大小写。扩展模式以生成模式,就像在路径名扩展中一样锡永。^运算符将匹配模式的小写字母转换为大写; ,运算符将匹配的大写字母转换为小写。^^和,,扩展 - sions转换扩展值中的每个匹配字符; ^和,扩展匹配并仅转换扩展值中的第一个字符。如果模式是省略,它被视为一个?,它匹配每个字符。如果参数是@或*,则将大小写修改操作应用于每个位置参数转,扩展是结果列表。如果参数是使用@或*下标的数组变量,则将大小写修改操作应用于每个成员依次是数组,扩展是结果列表。

命令替换
​ 命令替换允许输出命令来替换命令名称。有两种形式:

          $(命令)要么`command`Bash通过执行命令并用命令的标准输出替换命令替换来执行扩展,删除任何尾随换行符。嵌入式换行不会被删除,但在分词时可能会删除它们。命令替换$(cat文件)可以用等效但更快的$(<file)替换。当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后跟$,`或\。第一个反引号前面没有反斜杠终止命令替换。使用$(命令)表单时,括号之间的所有字符组成命令; 没有人特别对待。命令替换可以嵌套。要在使用反引号形式时进行嵌套,请使用反斜杠转义内部反引号。如果替换出现在双引号内,则不会对结果执行单词拆分和路径名扩展。

算术扩展
​ 算术扩展允许评估算术表达式和结果的替换。算术扩展的格式是:

          $((表达式))该表达式被视为在双引号内,但括号内的双引号未被特别处理。表达式中的所有标记都经历了参数 - 扩展,字符串扩展,命令替换和引用删除。算术扩展可以嵌套。评估根据算术评估下列出的规则进行。如果表达式无效,bash会打印一条消息,指示失败并且没有子发生了侮辱。

流程替代
​ 支持命名管道(FIFO)的系统或命名打开文件的/ dev / fd方法支持进程替换。它采用<(list)或>(list)的形式。该
​ 进程列表运行时其输入或输出连接到FIFO或/ dev / fd中的某个文件。此文件的名称作为参数传递给当前命令作为结果
​ 扩张。如果使用>(列表)表单,写入文件将提供列表输入。如果使用<(list)表单,则应读取作为参数传递的文件
​ 获取列表的输出。

   可用时,进程替换与参数和变量扩展,命令替换和算术扩展同时执行。

单词分裂
​ shell扫描参数扩展,命令替换和算术扩展的结果,这些结果在双引号内没有出现用于分词。

   shell将IFS的每个字符视为分隔符,并将其他扩展的结果拆分为这些字符上的单词。如果未设置IFS,或其值为正好<space> <tab> <newline>,默认情况下,忽略前面扩展结果开头和结尾的<space>,<tab>和<newline>序列,并且任何不在开头或结尾的IFS字符序列都用于分隔单词。如果IFS的值不是默认值,那么空格字符的序列 - 只要空白字符的值为IFS(IFS空白字符),就会在单词的开头和结尾忽略ters空格和制表符。任何角色在IFS中,不是IFS空格,以及任何相邻的IFS空白字符,用于分隔字段。一系列IFS空白字符也被视为一个分隔符国际热核实验堆。如果IFS的值为null,则不会发生分词。保留显式空参数(“”或“”)。将删除由于没有值的参数的扩展而产生的不带引号的隐式空参数。如果参数 - 没有值的ter在双引号内展开,null参数结果并保留。请注意,如果不发生扩展,则不执行拆分。

路径名扩展
​ 分词后,除非设置了-f选项,否则bash会扫描每个单词中的字符*,?和[。如果出现其中一个字符,则认为该字
​ 作为模式,并替换为与模式匹配的按字母顺序排序的文件名列表。如果找不到匹配的文件名,则shell选项nullglob不是
​ 启用后,单词保持不变。如果设置了nullglob选项,并且未找到匹配项,则删除该单词。如果设置了failglob shell选项,则不匹配
​ 发现,打印出错误消息并且不执行该命令。如果启用了shell选项nocaseglob,则执行匹配而不考虑alpha-的情况
​ betic characters。当一个模式用于路径名扩展时,必须明确匹配名称开头或紧跟斜杠后面的字符“。”。
​ 除非设置了shell选项dotglob。匹配路径名时,必须始终明确匹配斜杠字符。在其他情况下,不会处理“。”字符
​ 特别。有关nocaseglob,nullglob,failglob和dotglob shell选项的说明,请参阅SHELL BUILTIN COMMANDS下面的shopt说明。

   GLOBIGNORE shell变量可用于限制与模式匹配的文件名集。如果设置了GLOBIGNORE,则每个匹配的文件名也匹配其中一个GLOBIGNORE中的模式将从匹配列表中删除。设置GLOBIGNORE时,文件名“。”和“..”将始终被忽略,而不是null。但是,设置GLO-BIGNORE到非null值具有启用dotglob shell选项的效果,因此所有其他以“。”开头的文件名都将匹配。获得旧的行为忽略以“。”开头的文件名,使“。*”成为GLOBIGNORE中的一种模式。未设置GLOBIGNORE时,将禁用dotglob选项。模式匹配除了下面描述的特殊模式字符之外,模式中出现的任何字符都与其自身匹配。NUL字符可能不会出现在模式中。背面 - 斜线逃脱以下角色; 匹配时丢弃转义反斜杠。如果要按字面匹配,则必须引用特殊模式字符。特殊模式字符具有以下含义:*匹配任何字符串,包括空字符串。启用globstar shell选项时,*在路径名扩展上下文中使用,使用两个相邻的*因为单个模式将匹配所有文件以及零个或多个目录和子目录。如果后跟一个/,则两个相邻的*将仅匹配目录和子目录。?匹配任何单个字符。[...]匹配任何一个附带的字符。用连字符分隔的一对字符表示范围表达式; 任何在这两者之间排序的角色使用当前区域设置的整理顺序和字符集的字符匹配。如果[后面的第一个字符是!或者^然后任何未包含的字符都匹配。范围表达式中字符的排序顺序由当前区域设置和LC_COLLATE的值确定shell变量,如果设置。A  - 可以通过将其包括在集合中的第一个或最后一个字符来匹配。A]可以通过将其包括为第一个特征来匹配在集合中。在[和]中,可以使用语法[:class:]指定字符类,其中class是POSIX标准中定义的以下类之一:alnum alpha ascii空白cntrl数字图表下部打印punct空间上部字xdigit字符类匹配属于该类的任何字符。单词字符类匹配字母,数字和字符_。在[和]中,可以使用语法[= c =]指定等价类,该语法匹配具有相同归类权重的所有字符(由当前语言环境)作为字符c。在[和]中,语法[.symbol。]匹配整理符号符号。可识别多个扩展模式匹配运算符。在以下描述中,模式列表是由|分隔的一个或多个模式的列表。复合拍可以使用以下子模式中的一个或多个来形成燕鸥:?(模式列表)匹配给定模式的零次或一次出现*(模式列表)匹配给定模式的零次或多次出现+(模式列表)匹配给定模式的一次或多次出现@(模式列表)匹配给定模式之一如果使用内置shopt启用了extglob shell选项,则还会识别以下模式匹配运算符:!(模式列表)匹配除了给定模式之外的任何内容

引用删除
​ 在前面的扩展之后,将删除未由上述扩展之一产生的字符\,'和“的所有未引用的出现。

REDIRECTION
​ 在执行命令之前,可以使用shell解释的特殊表示法重定向其输入和输出。重定向也可用于打开和关闭文件
​ 对于当前的shell执行环境。以下重定向运算符可以在简单命令之前或出现在任何位置,也可以跟随命令。Redirec-
​ tions按照它们出现的顺序从左到右处理。

   可以在文件描述符号之前的每个重定向可以改为在{varname}形式的单词之后。在这种情况下,对于每个重定向运算符除外>& - 和<& - ,shell将分配大于10的文件描述符并将其分配给varname。如果>& - 或<& - 前面有{varname},则varname的值定义要关闭的文件描述符。在以下描述中,如果省略文件描述符编号,并且重定向操作符的第一个字符是<,则重定向是指标准输入(文件描述符0)。如果重定向运算符的第一个字符是>,则重定向引用标准输出(文件描述符1)。除非另有说明,否则以下描述中的重定向运算符后面的单词将进行括号扩展,波形扩展,参数扩展,mand替换,算术扩展,引用删除,路径名扩展和单词拆分。如果它扩展为多个单词,bash会报告错误。请注意,重定向的顺序很重要。例如,命令ls> dirlist 2>&1在命令时将标准输出和标准错误都指向文件dirlistls 2>&1> dirlist仅将标准输出指向文件dirlist,因为在将标准输出重定向到dirlist之前,标准错误与标准输出重复。Bash在重定向中使用时会处理多个文件名,如下表所述:的/ dev / FD / FD如果fd是有效整数,则重复文件描述符fd。的/ dev /标准输入文件描述符0是重复的。的/ dev /标准输出文件描述符1是重复的。的/ dev /标准错误文件描述符2是重复的。的/ dev / TCP /主机/端口如果host是有效的主机名或Internet地址,并且port是整数端口号或服务名,则bash尝试打开到相应的TCP连接插座。的/ dev / UDP /主机/端口如果host是有效的主机名或Internet地址,并且port是整数端口号或服务名,则bash尝试打开UDP连接到相应的插座。无法打开或创建文件会导致重定向失败。应谨慎使用使用大于9的文件描述符的重定向,因为它们可能与shell在内部使用的文件描述符冲突。

重定向输入
​ 输入的重定向导致打开名称来自word扩展的文件,以便读取文件描述符n或标准输入(文件描述符0),如果
​ n未指定。

   重定向输入的一般格式是:[N] <字

重定向输出
​ 输出的重定向导致打开名称来自word扩展的文件,以便在文件描述符n或标准输出(文件描述符1)上进行写入
​ 如果没有指定n。如果文件不存在则创建; 如果确实存在则将其截断为零大小。

   重定向输出的一般格式是:[N]>字如果重定向运算符是>,并且已启用set builtin的noclobber选项,则如果名称由扩展名称生成的文件,则重定向将失败单词存在并且是常规文件。如果重定向运算符是> |,或者重定向运算符是>并且未启用set builtin命令的noclobber选项,即使由word命名的文件存在,也会尝试重定向。

附加重定向输出
​ 以这种方式重定向输出会导致打开名称来自word扩展的文件,以便附加到文件描述符n或标准输出
​ (文件描述符1)如果未指定n。如果该文件不存在,则创建该文件。

   附加输出的一般格式是:[N] >>字

重定向标准输出和标准错误
​ 此构造允许将标准输出(文件描述符1)和标准错误输出(文件描述符2)重定向到名称为扩展的文件
​ 的字。

   重定向标准输出和标准错误有两种格式:&>字和>&字在这两种形式中,第一种是优选的。这在语义上等同于>字2>&1

附加标准输出和标准错误
​ 此构造允许将标准输出(文件描述符1)和标准错误输出(文件描述符2)附加到名称为扩展的文件
​ 字。

   附加标准输出和标准错误的格式为:&>>字这在语义上等同于>>字2>&1

这里的文件
​ 这种类型的重定向指示shell从当前源读取输入,直到看到只包含分隔符(没有尾随空白)的行。所有的线条
​ 然后读取到该点作为命令的标准输入。

   here-documents的格式是:<< [ - ]字这里文档分隔符不对字执行参数扩展,命令替换,算术扩展或路径名扩展。如果引用单词中的任何字符,则分隔符为在单词上删除引号的结果,并且不会展开here-document中的行。如果单词不加引号,则here-document的所有行都受到参数扩展的影响 - sion,命令替换和算术扩展。在后一种情况下,将忽略字符序列\ <newline>,并且\必须用于引用字符\,$和`。如果重定向运算符是<<  - ,则从输入行和包含分隔符的行中删除所有前导制表符。这允许shell中的文档脚本以自然方式缩进。

这里的弦乐
​ 这里文档的一个变体,格式是:

          <<<字单词被扩展并在其标准输入上提供给命令。

复制文件描述符
​ 重定向运算符

          [N] <&字用于复制输入文件描述符。如果word扩展为一个或多个数字,则由n表示的文件描述符将成为该文件描述符的副本。如果word中的数字不指定打开输入的文件描述符,发生重定向错误。如果word求值为 - ,则关闭文件描述符n。如果未指定n,则使用标准输入(文件描述符0)。运营商[N]>&字与重复的输出文件描述符类似地使用。如果未指定n,则使用标准输出(文件描述符1)。如果单词中的数字未指定文件描述符打开输出,发生重定向错误。作为一种特殊情况,如果省略n,并且word不会扩展为一个或多个数字,则标准输出和标准如前所述,错误被重定向。

移动文件描述符
​ 重定向运算符

          [N] <&digit-如果未指定n,则将文件描述符数字移动到文件描述符n或标准输入(文件描述符0)。数字在复制到n后关闭。同样,重定向运算符[N]>&digit-如果未指定n,则将文件描述符数字移动到文件描述符n或标准输出(文件描述符1)。

打开阅读和写作的文件描述符
​ 重定向运算符

          [N] <>字导致名称为word扩展的文件在文件描述符n上读取和写入时打开,如果未指定n则在文件描述符0上打开。如果文件不存在,它被创建。

ALIASES
​ 别名允许在将字符串用作简单命令的第一个字时替换字符串。shell维护一个可以设置和取消设置的别名列表
​ 使用alias和unalias内置命令(参见下面的SHELL BUILTIN命令)。如果不加引号,则检查每个简单命令的第一个单词以查看它是否具有别名。如果
​ 所以,该单词被别名的文本替换。上面列出的字符/,$,`和=以及任何shell元字符或引号字符可能不会出现在
​ 别名。替换文本可以包含任何有效的shell输入,包括shell元字符。替换文本的第一个单词是针对别名测试的,但是一个单词
​ 与扩展的别名相同的内容不会再次展开。这意味着,例如,可以将ls别名为ls -F,而bash不会尝试递归
​ 扩展替换文本。如果别名值的最后一个字符为空,则还会检查别名后面的下一个命令字的别名扩展。

   使用alias命令创建和列出别名,并使用unalias命令删除别名。在替换文本中没有使用参数的机制。如果需要参数,则应使用shell函数(请参阅下面的函数)。当shell不是交互式时,不会扩展别名,除非使用shopt设置expand_aliases shell选项(请参阅SHELL BUILTIN COM下的shopt说明)MANDS下面)。关于别名的定义和使用的规则有些令人困惑。在执行任何命令之前,Bash始终读取至少一个完整的输入行那条线。读取命令时会扩展别名,而不会在执行时扩展别名。因此,出现在与另一个命令相同的行上的别名定义不会占用效果,直到读取下一行输入。该行上别名定义后面的命令不受新别名的影响。这种行为也是一个问题功能被执行。读取函数定义时扩展别名,而不是在执行函数时扩展,因为函数定义本身就是复合函数普通话。因此,在执行该函数之后,函数中定义的别名才可用。为安全起见,请始终将别名定义放在单独的行中,并且不要在复合命令中使用别名。对于几乎所有目的,别名都被shell函数取代。

功能
​ 如上所述在SHELL GRAMMAR中定义的shell函数存储一系列命令以供稍后执行。当shell函数的名称用作简单的com-
​ mand name,执行与该函数名关联的命令列表。函数在当前shell的上下文中执行; 没有创建新进程
​ 解释它们(与shell脚本的执行形成对比)。执行函数时,函数的参数将成为函数的位置参数
​ 执行。更新特殊参数#以反映更改。特殊参数0不变。FUNCNAME变量的第一个元素设置为的名称
​ 函数执行时的函数。

   shell执行环境的所有其他方面在函数和调用者之间是相同的,但有以下例外:DEBUG和RETURN陷阱(请参阅描述)除了为函数提供了trace属性之外,不会继承下面的SHELL BUILTIN命令内置的陷阱)(参见声明内置的描述)使用set builtin启用了-o functrace shell选项(在这种情况下,所有函数都继承了DEBUG和RETURN陷阱),并且ERR陷阱不是继承 - 除非启用了-o errtrace shell选项。可以使用local builtin命令声明函数本地的变量。通常,变量及其值在函数和调用者之间共享。FUNCNEST变量,如果设置为大于0的数值,则定义最大函数嵌套级别。超出限制的函数调用会导致整个com-要求中止。如果在函数中执行内置命令返回,则函数完成,并在函数调用后使用下一个命令继续执行。任何关联的命令在执行恢复之前执行RETURN陷阱。当函数完成时,位置参数和特殊参数#的值将恢复为在函数执行之前它们具有的值。可以使用declare或typeset builtin命令的-f选项列出函数名称和定义。声明或排版的-F选项将列出函数名称only(如果启用了extdebug shell选项,则可选择使用源文件和行号)。可以导出函数,以便子壳自动定义它们使用-f选项导出内置。可以使用unset内置的-f选项删除函数定义。注意shell函数和变量用相同的名称可能会导致传递给shell的子项的环境中有多个具有相同名称的条目。如果这可能导致问题,应该小心。函数可以是递归的。FUNCNEST变量可用于限制函数调用堆栈的深度并限制函数调用的数量。默认情况下,没有对递归调用的数量施加限制。

算术评估
​ 在某些情况下,shell允许计算算术表达式(参见let和declare builtin命令和算术扩展)。评估完成
​ 在固定宽度整数中没有检查溢出,但除以0被捕获并标记为错误。运算符及其优先级,关联性和值
​ 与C语言相同。以下运算符列表分组为等优先运算符的级别。级别按先前减少的顺序列出
​ 信心。

   id ++ id--变量后增量和后减量++ id --id变量预增量和预减量-  +一元减号和加号!?逻辑和按位否定**取幂* /%乘法,除法,余数+  - 加法,减法<< >>左右按位移位<=> = <>对照==!=平等和不平等&按位AND^按位异或| 按位OR&&逻辑AND|| 逻辑或EXPR EXPR:EXPR条件运算符= * = / =%= + =  -  = << = >> =&= ^ = | =分配expr1,expr2逗号允许Shell变量作为操作数; 在计算表达式之前执行参数扩展。在表达式中,shell变量也可以引用不使用参数扩展语法的名称。null或unset的shell变量在按名称引用时计算结果为0,而不使用参数扩展syn-税。变量的值在引用时被计算为算术表达式,或者当使用declare -i给出整数属性的变量时被赋予一个值。null值的计算结果为0. shell变量不需要打开其整数属性即可在表达式中使用。前导0的常量被解释为八进制数。前导0x或0X表示十六进制。否则,数字采用[base#] n形式,其中可选基数为a表示算术基数的2到64之间的十进制数,n是该基数的数字。如果省略base#,则使用基数10。大于9的数字是由小写字母,大写字母,@和_按顺序表示。如果base小于或等于36,则可以使用小写和大写字母可变地代表10到35之间的数字。按优先顺序评估运算符。首先评估括号中的子表达式,并可以覆盖上面的优先级规则。

有条件的表达
​ 条件表达式由[[compound命令和test和[builtin命令]用于测试文件属性并执行字符串和算术比较。
​ 表达式由以下一元或二元原色形成。如果其中一个原色的任何文件参数的格式为/ dev / fd / n,则文件描述符n为
​ 检查。如果其中一个原色的文件参数是/ dev / stdin,/ dev / stdout或/ dev / stderr之一,则分别检查文件描述符0,1或2。

   除非另有说明,否则对文件进行操作的原色遵循符号链接并在链接的目标上操作,而不是链接本身。与[[,<和>运算符一起使用时,使用当前语言环境按字典顺序排序。测试命令使用ASCII排序进行排序。-一份文件如果文件存在则为真。-b文件如果文件存在则为真,并且是块特殊文件。-c文件如果文件存在则为真,并且是字符特殊文件。-d文件如果文件存在且为目录,则为True。-e文件如果文件存在则为真。-f文件如果文件存在且为常规文件,则为True。-g文件如果文件存在且为set-group-id,则为True。-h文件如果文件存在且为符号链接,则为真。-k文件如果文件存在且设置了“粘滞”位,则为真。-p文件如果文件存在且为命名管道(FIFO),则为真。-r文件如果文件存在且可读,则为真。-s文件如果文件存在且大小大于零,则为真。-t fd如果文件描述符fd打开并引用终端,则为真。-u文件如果文件存在且其set-user-id位已设置,则为True。-w文件如果文件存在且可写,则为True。-x文件如果文件存在且可执行,则为True。-G文件如果文件存在并且由有效组ID拥有,则为True。-L文件如果文件存在且为符号链接,则为真。-N文件如果文件存在且自上次读取以来已被修改,则为真。-O文件如果文件存在且由有效用户标识拥有,则为True。-S文件如果文件存在且为套接字,则为真。file1 -ef file2如果file1和file2引用相同的设备和inode编号,则为True。file1 -nt file2如果file1比file2更新(或根据修改日期),或者file1存在而file2不存在,则为True。file1 -ot file2如果file1早于file2,或者file2存在且file1不存在,则为True。-o optname如果启用了shell选项optname,则为True。请参阅下面的set builtin的-o选项说明下的选项列表。-v varname如果设置了shell变量varname,则为True(已分配值)。-z字符串如果字符串的长度为零,则为True。串-n string如果字符串的长度不为零,则为True。string1 == string2string1 = string2如果字符串相等则为True。=应与POSIX一致性的测试命令一起使用。string1!= string2如果字符串不相等则为True。string1 <string2如果string1按字典顺序在string2之前排序,则为True。string1> string2如果string1按字典顺序在string2之后排序,则为True。arg1 OP arg2OP是-eq,-ne,-lt,-le,-gt或-ge之一。如果arg1等于,不等于,小于,小于或等于,则这些算术二元运算符返回true,分别大于,或大于或等于arg2。Arg1和arg2可以是正整数或负整数。

简单的命令扩展
​ 执行简单命令时,shell将从左到右执行以下扩展,分配和重定向。

   1.解析器标记为变量赋值(命令名称前面的那些)和重定向的单词将保存以供以后处理。2.扩展不是变量赋值或重定向的单词。如果扩展后仍有任何单词,则第一个单词将被视为命令的名称其余的词是争论。3.重定向如上所述在REDIRECTION下进行。4.每个变量赋值中的=之后的文本经历了波浪扩展,参数扩展,命令替换,算术扩展和之前的引用删除被分配给变量。如果未生成命令名称,则变量赋值会影响当前的shell环境。否则,将变量添加到已执行命令的环境中不要影响当前的shell环境。如果任何分配尝试将值分配给只读变量,则会发生错误,并且命令以非零状态。如果没有命令名称结果,则执行重定向,但不影响当前的shell环境。重定向错误导致命令以非零sta退出土族。如果在扩展后留下命令名称,则执行如下所述。否则,该命令退出。如果其中一个扩展包含一个命令替换 - ,该命令的退出状态是执行的最后一个命令替换的退出状态。如果没有命令替换,则命令以状态退出零。

命令执行
​ 将命令拆分为单词后,如果它生成简单命令和可选参数列表,则执行以下操作。

   如果命令名称不包含斜杠,则shell会尝试找到它。如果存在该名称的shell函数,则如上所述在FUNC中调用该函数。系统蒸发散。如果名称与函数不匹配,shell将在shell builtins列表中搜索它。如果找到匹配项,则调用该内置项。如果名称既不是shell函数也不是内置函数,并且不包含斜杠,则bash会在PATH的每个元素中搜索包含可执行文件的目录。名称。Bash使用哈希表来记住可执行文件的完整路径名(请参阅下面的SHELL BUILTIN命令下的哈希)。完全搜索PATH中的目录是仅当在哈希表中找不到该命令时才执行。如果搜索不成功,shell将搜索名为command_not_found_handle的已定义shell函数。如果该函数存在,则使用原始命令和原始命令的参数作为其参数调用它,并且函数的退出状态变为退出状态的壳。如果未定义该函数,则shell将输出错误消息并返回退出状态127。如果搜索成功,或者命令名称包含一个或多个斜杠,则shell在单独的执行环境中执行指定的程序。参数0已设置到给定的名称,并将命令的其余参数设置为给定的参数,如果有的话。如果由于文件不是可执行格式而导致此执行失败,并且该文件不是目录,则假定它是shell脚本,即包含shell命令的文件。生成子shell以执行它。这个子shell重新初始化,因此效果就好像调用了一个新shell来处理脚本一样,异常由父母记住的命令的位置(参见SHELL BUILTIN COMMANDS下面的哈希)由孩子保留。如果程序是以#!开头的文件,则第一行的其余部分指定程序的解释程序。shell在operat-上执行指定的解释器不自行处理此可执行格式的系统。解释器的参数由解释器名称后面的单个可选参数组成程序的第一行,后跟程序的名称,后跟命令参数,如果有的话。

命令执行环境
​ shell有一个执行环境,它包含以下内容:

   ·在调用时由shell继承的打开文件,由提供给exec内置的重定向修改·当前工作目录由cd,pushd或popd设置,或由shell在调用时继承·文件创建模式掩码,由umask设置或从shell的父级继承·陷阱设置的当前陷阱·由变量赋值设置的shell参数,或者从环境中shell的父级设置或继承的shell参数·shell函数在执行期间定义或从shell的父级环境中继承·调用时启用的选项(默认情况下或使用命令行参数)或set·由shopt启用的选项·使用别名定义的shell别名·各种进程ID,包括后台作业,$$的值和PPID的值当要执行除内置函数或shell函数之外的简单命令时,将在包含以下内容的单独执行环境中调用它。除非 - 错误地指出,值是从shell继承的。·shell的打开文件,以及由命令重定向指定的任何修改和添加·当前的工作目录·文件创建模式掩码·标记为导出的shell变量和函数,以及为该命令导出的变量,在环境中传递·shell捕获的陷阱被重置为从shell的父级继承的值,并忽略shell忽略的陷阱在此单独环境中调用的命令不会影响shell的执行环境。命令替换,用括号分组的命令和异步命令在子shell环境中调用,该环境是shell环境的副本,除了shell捕获的陷阱将重置为shell在调用时从其父级继承的值。作为管道的一部分调用的内置命令是也在子shell环境中执行。对子shell环境所做的更改不会影响shell的执行环境。衍生为执行命令替换的子shell继承父shell的-e选项的值。当不处于posix模式时,bash会清除-e选项。炮弹。如果命令后面跟着&且作业控件未激活,则该命令的缺省标准输入是空文件/ dev / null。否则,调用的命令继承 - 它是由重定向修改的调用shell的文件描述符。

环境
​ 调用程序时,会给出一个称为环境的字符串数组。这是名称 - 值对的列表,格式为name = value。

   shell提供了几种操作环境的方法。在调用时,shell会扫描自己的环境,并自动为每个找到的名称创建一个参数标记它以导出到子进程。执行的命令继承环境。export和declare -x命令允许将参数和函数添加到和从环境中删除。如果修改了环境中参数的值,则新值将成为环境的一部分,替换旧值。环境任何执行的命令继承的都包含shell的初始环境,其值可以在shell中修改,少于unset命令删除的任何对,加上通过export和declare -x命令添加任何内容。任何简单命令或函数的环境可以通过在其前面加上参数赋值来临时扩充,如上面参数中所述。这些转让 - 语句仅影响该命令所见的环境。如果设置了-k选项(请参阅下面的set builtin命令),那么所有参数赋值都将放置在命令的环境中,而不仅仅是那些在命令之前的命令。命名。当bash调用外部命令时,变量_将设置为命令的完整文件名,并在其环境中传递给该命令。

退出状态
​ 执行命令的退出状态是waitpid系统调用或等效函数返回的值。然而,退出状态介于0到255之间,正如所解释的那样
​ 在下面,shell可能会特别使用125以上的值。shell builtins和复合命令的退出状态也仅限于此范围。在某些情况下,
​ shell将使用特殊值来指示特定的故障模式。

   出于shell的目的,以零退出状态退出的命令已成功。退出状态为零表示成功。非零退出状态表示失败。当命令终止于致命信号N时,bash使用128 + N的值作为退出状态。如果未找到命令,则为执行该命令而创建的子进程将返回状态127.如果找到命令但不可执行,则返回状态为126。如果命令因扩展或重定向期间的错误而失败,则退出状态大于零。Shell builtin命令如果成功则返回状态0(true),如果执行时发生错误则返回非零(false)。所有内置函数都返回2的退出状态表明用法不正确。Bash本身返回最后执行的命令的退出状态,除非发生语法错误,在这种情况下,它以非零值退出。另见内置出口com-下面的要求。

SIGNALS
​ 当bash是交互式的时候,在没有任何陷阱的情况下,它会忽略SIGTERM(因此kill 0不会杀死交互式shell),并且会捕获并处理SIGINT(以便
​ 等待内置是可中断的)。在所有情况下,bash都会忽略SIGQUIT。如果作业控制生效,bash将忽略SIGTTIN,SIGTTOU和SIGTSTP。

   由bash运行的非内置命令将信号处理程序设置为shell从其父级继承的值。当作业控制无效时,异步命令除了这些继承的处理程序之外,还忽略SIGINT和SIGQUIT。由于命令替换而运行的命令忽略键盘生成的作业控制信号SIGT-TIN,SIGTTOU和SIGTSTP。收到SIGHUP后,shell默认退出。在退出之前,交互式shell会将SIGHUP重新发送到所有正在运行或已停止的作业。停止的工作发送给SIGCONT确保他们收到SIGHUP。为了防止shell将信号发送到特定作业,应该使用disown builtin从jobs表中删除它(参见下面的SHELL BUILTIN命令)或使用disown -h标记为不接收SIGHUP。如果已使用shopt设置了huponexit shell选项,则当交互式登录shell退出时,bash会向所有作业发送SIGHUP。如果bash正在等待命令完成并收到已设置陷阱的信号,则在命令完成之前不会执行该陷阱。当bash是通过等待内置等待异步命令,接收已设置陷阱的信号将导致等待内置立即返回退出状态大于128,紧接着执行陷阱。

工作控制
​ 作业控制是指有选择地停止(暂停)进程的执行并在稍后继续(恢复)它们的执行的能力。用户通常使用
​ 这个工具通过操作系统内核的终端驱动程序和bash共同提供的交互式界面。

   shell将作业与每个管道相关联。它保留当前正在执行的作业的表,可以使用jobs命令列出。当bash开始工作asyn-(在后台),它打印出一条如下所示的线:[1] 25647指示此作业是作业编号1,并且与此作业关联的管道中的最后一个进程的进程ID是25647.单个中的所有进程管道是同一个工作的成员。Bash使用作业抽象作为工作控制的基础。为了便于实现作业控制的用户界面,操作系统维护当前终端进程组ID的概念。这个成员进程组(进程组ID等于当前终端进程组ID的进程)接收键盘生成的信号,如SIGINT。这些过程是据说是在前台。后台进程是进程组ID与终端进程不同的进程; 这些过程不受键盘生成的信号的影响。只允许前台进程读取,或者如果用户使用stty tostop指定,则写入终端。尝试从中读取的后台进程(当stty tostop生效时写入)终端由内核的终端驱动程序发送SIGTTIN(SIGTTOU)信号,除非被捕获,否则暂停该进程。如果运行bash的操作系统支持作业控制,则bash包含使用它的工具。在a时键入暂停字符(通常为^ Z,Control-Z)进程正在运行导致该进程停止并将控制权返回给bash。键入延迟暂停字符(通常为^ Y,Control-Y)会导致进程当它试图从终端读取输入时停止,并且控制返回到bash。然后,用户可以使用bg命令来操作该作业的状态在后台继续它,fg命令在前台继续它,或者kill命令来杀死它。A ^ Z立即生效,并具有附加的一面导致挂起输出和预先输出的效果被丢弃。有很多方法可以引用shell中的作业。字符%引入了作业规范(jobspec)。作业号n可以称为%n。一份工作也可能使用用于启动它的名称的前缀,或使用出现在其命令行中的子字符串来引用。例如,%ce指的是停止的作业。如果是前缀匹配多个作业,bash报告错误。另一方面,使用%?ce指的是在其命令行中包含字符串ce的任何作业。如果子串匹配不止一个工作,bash报告错误。符号%%和%+指的是当前作业的shell概念,它是在前台停止时的最后一个作业或者在后台开始。可以使用% - 引用上一个作业。如果只有一个作业,%+和% - 都可以用来引用该作业。在输出中为了工作(例如,job命令的输出),当前作业总是标记为+,而前一个作业标记为 - 。单个%(没有随附的工作规范 - ification)也指当前的工作。简单地命名一个作业可以用来将它带到前台:%1是``fg%1'的同义词,将作业1从后台带到前台。同样,``%1&''在后台恢复作业1,相当于“bg%1”。当作业改变状态时,shell立即学习。通常情况下,bash会在报告作业状态更改之前等待打印提示,以免发生中断任何其他输出。如果启用了set builtin命令的-b选项,bash会立即报告此类更改。SIGCHLD上的任何陷阱都是针对每个孩子执行的退出。如果在作业停止时尝试退出bash(或者,如果使用内置的shopt启用了checkjobs shell选项,则运行),shell会输出警告消息,如果启用了checkjobs选项,则列出作业及其状态。然后可以使用jobs命令检查其状态。如果第二次尝试退出如果没有插入命令,shell不会打印另一个警告,并且任何已停止的作业都将终止。

PROMPTING
​ 交互式执行时,bash在准备好读取命令时显示主提示PS1,在需要更多输入时显示辅助提示PS2以完成a
​ 命令。Bash允许通过插入一些反斜杠转义的特殊字符来自定义这些提示字符串,这些特殊字符按如下方式解码:
​ \ a一个ASCII铃铛字符(07)
​ \ d“工作日月日期”格式的日期(例如,“Tue May 26”)
​ \ d {格式}
​ 格式传递给strftime(3),结果插入到提示字符串中; 空格式导致特定于语言环境的时间表示。该
​ 大括号是必需的
​ \ e ASCII转义字符(033)
​ \ h主机名最多为第一个`。'
​ \ H主机名
​ \ j目前由shell管理的作业数量
​ \ l shell的终端设备名称的基本名称
​ \ n换行
​ \ r \ n回车
​ \ s shell的名称,$ 0的基本名称(最终斜杠后面的部分)
​ 以24小时HH:MM:SS格式显示当前时间
​ \ T当前时间为12小时HH:MM:SS格式
​ \ @当前时间为12小时上午/下午格式
​ \当前时间为24小时HH:MM格式
​ \ u当前用户的用户名
​ \ v bash的版本(例如,2.00)
​ \ v发布bash,版本+补丁级别(例如,2.00.0)
​ \ w当前工作目录,$ HOME缩写为tilde(使用PROMPT_DIRTRIM变量的值)
​ \ W当前工作目录的基本名称,$ HOME缩写为波浪号
​ \!此命令的历史编号
​ \#此命令的命令编号
​ \ $如果有效UID为0,则为#,否则为$
​ \ nnn对应八进制数nnn的字符
​ 一个反斜杠
​ \ [开始一系列非打印字符,可用于将终端控制序列嵌入到提示中
​ ]结束一系列非打印字符

   命令编号和历史编号通常不同:命令的历史编号是其在历史列表中的位置,其中可能包括从中恢复的命令历史文件(参见下面的HISTORY),而命令编号是当前shell会话期间执行的命令序列中的位置。字符串后解码后,通过参数扩展,命令替换,算术扩展和引用删除进行扩展,具体取决于promptvars shell选项的值(请参阅在SHELL BUILTIN COMMANDS下面的shopt命令的描述)。

READLINE
​ 这是在使用交互式shell时处理读取输入的库,除非在shell调用时给出了--noediting选项。行时编辑也用于
​ 使用-e选项读取内置函数。默认情况下,行编辑命令与Emacs的命令类似。还提供vi风格的线编辑界面。线
​ 可以使用-o emacs或-o vi选项随时启用编辑内置编辑(请参阅下面的SHELL BUILTIN命令)。在shell之后关闭行编辑
​ 运行时,使用+ o emacs或+ o vi选项来设置内置。

Readline表示法
​ 在本节中,Emacs样式表示法用于表示击键。控制键由C键表示,例如,Cn表示Control-N。类似地,元键表示为
​ M键,所以Mx表示Meta-X。(在没有元键的键盘上,Mx表示ESC x,即按Esc键然后按x键。这使ESC成为元前缀。
​ MCx表示ESC-Control-x,或按Esc键,然后在按住x键的同时按住Control键。)

   Readline命令可以给出数字参数,通常用作重复计数。然而,有时,这是论证的重要标志。通过一个在向前方向上作用的命令的负参数(例如,kill-line)导致该命令以向后方向动作。其行为与争论的命令与此不同的是下面提到的。当命令被描述为杀死文本时,保存已删除的文本以供将来检索(yanking)。被杀死的文本保存在杀戮戒指中。连续杀人使文本被累积到一个单元中,可以一次全部拉出。不杀死文本的命令将kill ring上的文本块分开。

读取线初始化
​ 通过将命令放入初始化文件(inputrc文件)来自定义Readline。此文件的名称取自INPUTRC变量的值。如果说
​ 变量未设置,默认为?/ .inputrc。当启动使用readline库的程序时,将读取初始化文件,以及键绑定和变量
​ 已设定。readline初始化文件中只允许几个基本结构。空行被忽略。以#开头的行是注释。线开始 -
​ 用$表示条件结构。其他行表示键绑定和变量设置。

   可以使用inputrc文件更改默认的键绑定。使用此库的其他程序可能会添加自己的命令和绑定。例如,放置M-Control-u:普遍参数要么C-Meta-u:普遍论证进入inputrc将使MCu执行readline命令universal-argument。识别以下符号字符名称:RUBOUT,DEL,ESC,LFD,NEWLINE,RET,RETURN,SPC,SPACE和TAB。除了命令名之外,readline还允许将键绑定到按下键时插入的字符串(宏)。

Readline键绑定
​ 用于控制inputrc文件中的键绑定的语法很简单。所需要的只是命令的名称或宏的文本以及宏的键序列
​ 应该受到约束。可以使用以下两种方式之一指定名称:作为符号键名称,可能使用Meta-或Control-前缀,或作为键序列。

   使用表单keyname:function-name或macro时,keyname是用英语拼写的键的名称。例如:Control-u:通用参数Meta-Rubout:反向杀戮词Control-o:“>输出”在上面的例子中,Cu绑定到函数universal-argument,M-DEL绑定到函数reverse-kill-word,而Co绑定运行宏表示的右侧(即将文本“输出”插入行)。在第二种形式中,“keyseq”:function-name或macro,keyseq与上面的keyname不同,因为表示整个键序列的字符串可以通过放置双引号内的序列。可以使用某些GNU Emacs样式键转义,如下例所示,但无法识别符号字符名称。“\ Cu”:普遍论证“\ Cx \ Cr”:重新读取-init-file“\ e [11~”:“功能键1”在此示例中,Cu再次绑定到函数universal-argument。Cx Cr绑定到函数re-read-init-file,并且ESC [1 1~必须插入文本``功能键1''。完整的GNU Emacs样式转义序列是\ C-控制前缀\ M-元前缀\ e逃避角色\\反斜杠\“文字”\'文字'除了GNU Emacs样式转义序列之外,还有第二组反斜杠转义:警报(铃声)\ b退格\ d删除\ f表格饲料\ n换行\ r \ n回车\ t水平标签\ v垂直标签\ nnnn八位字符,其值为八进制值nnn(一到三位数)\ xHH八位字符,其值为十六进制值HH(一个或两个十六进制数字)输入宏的文本时,必须使用单引号或双引号来表示宏定义。假设未加引号的文本是函数名称。在宏体中,上面描述的反斜杠转义扩展了。反斜杠将引用宏文本中的任何其他字符,包括“和”。Bash允许使用bind builtin命令显示或修改当前的readline键绑定。可以在交互式使用期间通过使用来切换编辑模式set builtin命令的-o选项(参见下面的SHELL BUILTIN命令)。

Readline变量
​ Readline具有可用于进一步定制其行为的变量。可以在inputrc文件中使用表单语句设置变量

          设置变量名称值除非另有说明,否则readline变量可以取值On或Off(不考虑大小写)。忽略无法识别的变量名称。读取变量值时为空或null值,“on”(不区分大小写),“1”等于On。所有其他值等同于Off。变量及其默认值为:钟式(可听)控制当readline想要敲响终端铃时发生的事情。如果设置为none,则readline永远不会响铃。如果设置为可见,则readline使用可见铃声如果有的话。如果设置为可听,则readline尝试响铃终端的铃声。bind-tty-special-chars(On)如果设置为On,则readline尝试将内核终端驱动程序专门处理的控制字符绑定到其readline等效项。comment-begin(``#'')执行readline insert-comment命令时插入的字符串。此命令绑定到emacs模式下的M-#和vi命令模式下的#。完成 - 忽略 - 案例(关闭)如果设置为On,则readline以不区分大小写的方式执行文件名匹配和完成。completion-prefix-display-length(0)无需修改即可显示的可能完成列表的公共前缀的字符长度。设置为大于零的值时,常见在显示可能的完成时,超过此值的前缀将替换为省略号。completion-query-items(100)这确定何时查询用户查看由possible-completions命令生成的可能完成的数量。它可以设置为任何整数值大于或等于零。如果可能的完成次数大于或等于该变量的值,则询问用户是否他希望看到他们; 否则他们只是在终端上列出。convert-meta(On)如果设置为On,readline将通过剥离第8位并为转义字符加前缀(将in字符转换为第8位设置为ASCII键序列的字符效果,使用转义作为元前缀)。禁用完成(关闭)如果设置为On,则readline将禁止字完成。完成字符将插入到行中,就像它们已映射到自插入一样。编辑模式(emacs)控制readline是否以一组类似于Emacs或vi的键绑定开头。编辑模式可以设置为emacs或vi。echo-control-characters(开)设置为On时,在表示支持它的操作系统上,readline回显与键盘生成的信号对应的字符。启用键盘(关闭)设置为On时,readline将在调用时尝试启用应用程序键盘。某些系统需要此功能才能启用箭头键。enable-meta-key(On)设置为On时,readline将尝试启用终端声称在调用时支持的任何元修饰键。在许多终端上,元密钥用于发送八位字符。expand-tilde(关闭)如果设置为On,则当readline尝试单词完成时执行波形扩展。历史保留点(关闭)如果设置为“开”,则历史记录代码会尝试将点放在使用previous-history或next-history检索的每个历史记录行的相同位置。历史大小(0)设置历史列表中保存的最大历史条目数。如果设置为零,则历史列表中的条目数不受限制。水平滚动模式(关闭)当设置为On时,使readline使用单行显示,当输入长于屏幕宽度时,在单个屏幕行上水平滚动输入而不是包装到新的行。input-meta(关闭)如果设置为On,则readline将启用8位输入(即,它不会从其读取的字符中剥离高位),无论终端声称它是什么可以支持。名称meta-flag是此变量的同义词。isearch-terminators(``C- [C-J'')应该终止增量搜索而不随后将该字符作为命令执行的字符串。如果没有给出这个变量a值,字符ESC和CJ将终止增量搜索。keymap(emacs)设置当前的readline键映射。有效键映射名称的集合是emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-command和vi-insert。vi相当于VI-命令; emacs相当于emacs-standard。默认值为emacs; 编辑模式的值也会影响默认的键盘映射。标记目录(开)如果设置为On,则已完成的目录名称会附加斜杠。mark-modified-lines(Off)如果设置为“开”,则已修改的历史记录行将显示前一个星号(*)。mark-symlinked-directories(Off)如果设置为On,则作为目录的符号链接的已完成名称会附加斜杠(取决于mark-directories的值)。match-hidden-files(On)此变量设置为On时,会使readline匹配名称以“。”开头的文件。执行文件名完成时(隐藏文件)。如果设置为Off,则领先`。' 必须由用户提供要完成的文件名。menu-complete-display-prefix(关闭)如果设置为“开”,菜单完成将在循环列表之前显示可能的完成列表的公共前缀(可能为空)。output-meta(关闭)如果设置为On,则readline将显示直接设置第8位的字符,而不是带有元前缀的转义序列。页面完成(开)如果设置为On,则readline使用内部更类似的寻呼机一次显示一组可能的完成。水平打印完成(关闭)如果设置为On,则readline将显示匹配按字母顺序水平排序的匹配,而不是屏幕下方。revert-all-at-newline(关闭)如果设置为On,则readline将在执行accept-line返回之前撤消对历史行的所有更改。默认情况下,可以修改和保留历史记录行单个撤消列表调用readline。show-all-if-ambiguous(Off)这会改变完成函数的默认行为。如果设置为On,则具有多个可能完成的单词会导致匹配立即列出而不是响铃。show-all-if-unmodified(Off)这会以类似于show-all-if-ambiguous的方式更改完成函数的默认行为。如果设置为On,则具有多个可能的com-在没有任何可能的部分完成的情况下(可能的完成不共享公共前缀)导致匹配立即列出而不是响铃钟声。跳过完成文本(关闭)如果设置为On,则在将单个匹配插入到行中时,这会改变默认的完成行为。它只在中间执行完成时才有效字。如果启用,则readline不会在完成单词后面的字符之后插入字符,所以单词fol-低位光标不重复。visible-stats(关闭)如果设置为On,则在列出可能的完成时,会将表示stat(2)报告的文件类型的字符附加到文件名。

Readline条件构造
​ Readline实现了与C预处理器的条件编译功能类似的功能,允许执行键绑定和变量设置
​ 作为测试的结果。使用了四种解析器指令。

   $ if $ if结构允许基于编辑模式,正在使用的终端或使用readline的应用程序进行绑定。测试文本延伸至线的终点; 隔离它不需要任何字符。mode $ if指令的mode =形式用于测试readline是处于emacs还是vi模式。这可以与set keymap命令一起使用例如,仅当readline以emacs模式开始时才在emacs-standard和emacs-ctlx键映射中设置绑定。术语术语=表单可用于包括特定于终端的键绑定,可能用于绑定终端的功能键输出的键序列。关于这个词在第一个 - 之前,对终端的全名和终端名称的部分测试=的右侧。这允许太阳匹配两者例如,sun和sun-cmd。应用应用程序构造用于包括特定于应用程序的设置。每个使用readline库的程序都会设置应用程序名称,并且ization文件可以测试特定值。这可用于将键序列绑定到对特定程序有用的函数。例如,以下内容命令添加一个引用bash中当前或上一个单词的键序列:$如果Bash#引用当前或上一个单词“\ C-xq”:“\ eb \”\ ef \“”$ ENDIF$ endif此命令,如上例所示,终止$ if命令。$ else如果测试失败,则执行$ if指令的此分支中的命令。$包括该指令将单个文件名作为参数,并从该文件中读取命令和绑定。例如,以下指令将读取/ etc / inputrc:$ include / etc / inputrc

搜索
​ Readline提供了用于搜索包含指定字符串的行的命令历史记录(请参阅下面的HISTORY)的命令。有两种搜索模式:增量和
​ 非增量。

   在用户键入搜索字符串之前开始增量搜索。当键入搜索字符串的每个字符时,readline将显示下一个条目到目前为止匹配字符串的历史记录。增量搜索仅需要所需的字符数来查找所需的历史记录条目。人物中存在的人物isearch-terminators变量的值用于终止增量搜索。如果尚未为该变量分配Escape和Control-J字符的值将终止增量搜索。Control-G将中止增量搜索并恢复原始行。搜索终止时,包含的历史条目搜索字符串成为当前行。要在历史记录列表中查找其他匹配条目,请根据需要键入Control-S或Control-R。这将在历史记录中向后或向前搜索下一个条目匹配 - 到目前为止输入的搜索字符串。绑定到readline命令的任何其他键序列将终止搜索并执行该命令。例如,换行符将 - 修改搜索并接受该行,从而从历史列表中执行命令。Readline会记住最后一个增量搜索字符串。如果键入两个Control-R而没有任何插入字符定义新的搜索字符串,则记住任何搜索使用字符串。在开始搜索匹配的历史记录行之前,非增量搜索会读取整个搜索字符串。搜索字符串可以由用户键入或者是搜索字符串的一部分当前行的内容。

Readline命令名称
​ 以下是命令的名称列表以及它们绑定的默认键序列。没有附带键序列的命令名称不受限制
​ 默认。在以下描述中,point指的是当前光标位置,而mark指的是set-mark命令保存的光标位置。之间的文字
​ 点和标记称为区域。

移动命令
​ 行首(Ca)
​ 移动到当前行的开头。
​ 行尾(Ce)
​ 移到行尾。
​ forward-char(Cf)
​ 向前移动一个角色。
​ 反向字符(Cb)
​ 移回一个角色。
​ 前向词(Mf)
​ 前进到下一个单词的结尾。单词由字母数字字符(字母和数字)组成。
​ 后向词(Mb)
​ 移回当前或上一个单词的开头。单词由字母数字字符(字母和数字)组成。
​ 壳正向词
​ 前进到下一个单词的结尾。单词由非引用的shell元字符分隔。
​ 壳反向词
​ 移回当前或上一个单词的开头。单词由非引用的shell元字符分隔。
​ 透明屏幕(Cl)
​ 清除屏幕,将当前行保留在屏幕顶部。使用参数,刷新当前行而不清除屏幕。
​ 重绘电流线
​ 刷新当前行。

操纵历史的命令
​ 接受(换行,返回)
​ 无论光标在哪里,都接受该行。如果此行非空,请根据HISTCONTROL变量的状态将其添加到历史列表中。如果
​ line是已修改的历史记录行,然后将历史记录行还原为其原始状态。
​ 前历史(Cp)
​ 从历史列表中获取上一个命令,然后在列表中返回。
​ 次历史(Cn)
​ 从历史列表中获取下一个命令,在列表中向前移动。
​ 历史起点(M- <)
​ 移至历史记录的第一行。
​ 历史终结(M->)
​ 移动到输入历史记录的末尾,即当前输入的行。
​ 反向搜索历史(Cr)
​ 从当前行开始向后搜索,并根据需要在历史记录中“向上”移动。这是增量搜索。
​ 前向搜索历史(Cs)
​ 从当前行开始向前搜索,并根据需要在历史记录中“向下”移动。这是增量搜索。
​ 非增量反向搜索历史(Mp)
​ 使用非增量搜索用户提供的字符串向后搜索从当前行开始的历史记录。
​ 非增量前向搜索历史(Mn)
​ 使用非增量搜索用户提供的字符串向前搜索历史记录。
​ 历史搜索前进
​ 在历史记录中搜索当前行的起点和点之间的字符串。这是一种非增量搜索。
​ 历史搜索落后
​ 在历史记录中向后搜索当前行的开头和点之间的字符串。这是一种非增量搜索。
​ yank-nth-arg(MCy)
​ 将第一个参数插入上一个命令(通常是前一行的第二个字)。使用参数n,插入前一个第n个单词
​ 命令(上一个命令中的单词以单词0开头)。负参数插入上一个命令末尾的第n个单词。一旦参数n为
​ 在计算中,提取参数就好像已经指定了“!n”历史扩展一样。
​ yank-last-arg(M-。,M-
​ 将最后一个参数插入上一个命令(上一个历史记录条目的最后一个单词)。使用数字参数,行为与yank-nth-arg完全相同。连续
​ 调用yank-last-arg后退回历史列表,依次插入每行的最后一个单词(或参数指定的单词)。任何
​ 提供给这些连续调用的数字参数决定了在历史记录中移动的方向。一个负面的论点改变了他的方向 -
​ 保守党(后退或前锋)。历史扩展工具用于提取最后一个参数,就好像已经指定了“!$”历史扩展一样。
​ 壳扩展线(MCe)
​ 像shell一样扩展行。这将执行别名和历史记录扩展以及所有shell单词扩展。有关描述,请参阅下面的历史扩展
​ 历史扩张的历史。
​ 历史扩展线(M- ^)
​ 在当前行上执行历史记录扩展。有关历史记录扩展的说明,请参阅下面的历史记录扩展。
​ 魔术空间
​ 在当前行上执行历史记录扩展并插入空格。有关历史记录扩展的说明,请参阅下面的历史记录扩展。
​ 别名扩展线
​ 在当前行上执行别名扩展。有关别名扩展的说明,请参见上面的ALIASES。
​ 历史和别名扩展线
​ 在当前行上执行历史记录和别名扩展。
​ insert-last-argument(M-。,M-

​ yank-last-arg的同义词。
​ 操作并获得下一个(Co)
​ 接受当前行以执行并从历史记录中获取相对于当前行的下一行以进行编辑。任何参数都会被忽略。
​ 编辑执行命令(C-xC-e)
​ 在当前命令行上调用编辑器,并将结果作为shell命令执行。Bash尝试调用$ VISUAL,$ EDITOR和emacs作为编辑器
​ 订购。

更改文本的命令
​ delete-char(Cd)
​ 删除点上的字符。如果point位于行的开头,则行中没有字符,并且键入的最后一个字符未绑定
​ delete-char,然后返回EOF。
​ backward-delete-char(Rubout)
​ 删除光标后面的字符。给定数字参数时,将删除的文本保存在kill ring上。
​ 前后 - 删除 - 木炭
​ 删除光标下的字符,除非光标位于行的末尾,在这种情况下,光标后面的字符将被删除。
​ 引用插入(Cq,Cv)
​ 将逐字输入的下一个字符添加到行中。例如,这是如何插入像Cq这样的字符。
​ tab-insert(Cv TAB)
​ 插入制表符。
​ 自插入(a,b,A,1,!,...)
​ 插入键入的字符。
​ 转置字符(Ct)
​ 在角点前方向拖动角色,然后向前移动角色。如果point位于该行的末尾,那么这将转换为两者
​ 点之前的字符。否定论点没有效果。
​ 转置词(Mt)
​ 在点之前拖过单词之前的单词,也将点移动到该单词之上。如果point位于该行的末尾,则会转换最后两个单词
​ 这条线。
​ upcase-word(Mu)
​ 大写当前(或后续)单词。使用否定参数,大写前一个单词,但不要移动点。
​ downcase-word(M1)
​ 小写当前(或后续)单词。使用否定参数,小写前一个单词,但不要移动点。
​ 大写字(Mc)
​ 将当前(或后续)单词大写。使用否定参数,将前一个词大写,但不要移动点。
​ 覆盖模式
​ 切换覆盖模式。使用显式正数字参数,切换到覆盖模式。使用显式非正数字参数,切换到插入
​ 模式。此命令仅影响emacs模式; vi模式会以不同方式覆盖。每次调用readline()都以插入模式启动。在覆盖模式下,字符绑定
​ 自我插入在点处替换文本而不是将文本推向右侧。绑定到backward-delete-char的字符用a替换点之前的字符
​ 空间。默认情况下,此命令未绑定。

杀戮和Yanking
​ 杀线(Ck)
​ 将文本从点到终止。
​ 反向杀线(Cx Rubout)
​ 向后杀到行的开头。
​ unix-line-discard(Cu)
​ 从点向后杀死到行的开头。被杀死的文本保存在kill-ring中。
​ 杀,整线
​ 杀死当前行上的所有字符,无论在哪里。
​ 杀字(Md)
​ 从点到当前单词的结尾,或者如果在单词之间,到下一个单词的结尾。字边界与前向字使用的边界相同。
​ 反向杀词(M-Rubout)
​ 杀掉点后面的词。字边界与后向字使用的边界相同。
​ shell-kill-word(Md)
​ 从点到当前单词的结尾,或者如果在单词之间,到下一个单词的结尾。字边界与shell-forward-word使用的边界相同。
​ shell-backward-kill-word(M-Rubout)
​ 杀掉点后面的词。字边界与shell-backward-word使用的边界相同。
​ unix-word-rubout(Cw)
​ 使用空格作为单词边界,杀掉单词后面的单词。被杀死的文本保存在kill-ring中。
​ UNIX的文件名,擦去
​ 使用空格和斜线字符作为单词边界,将单词后面的单词杀死。被杀死的文本保存在kill-ring中。
​ 删除 - 水平空间(M- \)
​ 删除点周围的所有空格和制表符。
​ 杀区
​ 杀死当前区域的文本。
​ 复制区域作为杀
​ 将区域中的文本复制到kill缓冲区。
​ 复制反向词
​ 将点前的单词复制到kill buffer。单词边界与后向单词相同。
​ 复制正向词
​ 将以下单词复制到kill buffer。单词边界与前向单词相同。
​ 猛拉(Cy)
​ 将杀戮戒指的顶部放入缓冲点。
​ yank-pop(我的)
​ 旋转杀环,并猛拉新的顶部。只能在yank或yank-pop之后工作。

数字参数
​ 数字参数(M-0,M-1,...,M--)
​ 将此数字添加到已累积的参数中,或启动新参数。M--开始一个负面的论点。
​ 通用参数的
​ 这是指定参数的另一种方法。如果此命令后跟一个或多个数字,可选地带有前导减号,则这些数字定义参数。
​ 如果该命令后跟数字,则再次执行universal-argument将结束数字参数,否则将被忽略。作为一种特殊情况,如果是这个命令
​ 紧接着是一个既不是数字也不是减号的字符,下一个命令的参数计数乘以4。参数计数是ini
​ 因此,第一次执行此函数会使参数计数为4,第二次使参数计数为16,依此类推。

完成
​ 完成(TAB)
​ 尝试在点之前对文本执行完成。Bash尝试完成将文本视为变量(如果文本以$开头),用户名(如果是文本
​ 以?)开头,主机名(如果文本以@开头)或命令(包括别名和函数)依次开始。如果这些都不产生匹配,则文件名完成
​ 尝试。
​ 可能完成(M-?)
​ 在点之前列出文本的可能完成情况。
​ 插入完成(M- *)
​ 在可能完成生成的点之前插入文本的所有完成。
​ 菜单完成
​ 与完成类似,但用可能的完成列表中的单个匹配替换要完成的单词。重复执行菜单完成步骤
​ 通过可能的完成列表,依次插入每个匹配。在完成列表的最后,响铃响起(根据钟式设置)
​ 并恢复原始文本。n的参数在匹配列表中向前移动n个位置; 可以使用否定参数向后移动
​ 名单。此命令旨在绑定到TAB,但默认情况下不绑定。
​ 菜单完成后向
​ 与菜单完成相同,但在可能的完成列表中向后移动,就像菜单完成被赋予了否定参数一样。这个命令是
​ 默认情况下不绑定。
​ 删除 - 炭或列表
​ 如果不在行的开头或结尾(如delete-char),则删除光标下的字符。如果在行尾,行为与可能的行为相同
​ pletions。默认情况下,此命令未绑定。
​ 完整文件名(M- /)
​ 在点之前的文本上尝试完成文件名。
​ 可能的文件名完成次数(Cx /)
​ 在点之前列出文本的可能完成,将其视为文件名。
​ 完整用户名(M-~)
​ 在点之前尝试完成文本,将其视为用户名。
​ 可能的用户名完成次数(Cx~)
​ 在点之前列出文本的可能完成,将其视为用户名。
​ 完全变量(M- $)
​ 在点之前尝试完成文本,将其视为shell变量。
​ 可能变量完成(Cx $)
​ 在点之前列出文本的可能完成,将其视为shell变量。
​ 完整主机名(M- @)
​ 在点之前尝试完成文本,将其视为主机名。
​ 可能的主机名完成次数(Cx @)
​ 在点之前列出文本的可能完成,将其视为主机名。
​ 完成命令(M-!)
​ 在点之前尝试完成文本,将其视为命令名称。命令完成尝试将文本与别名,保留字,shell函数匹配
​ tions,shell builtins,最后是可执行文件名,按顺序排列。
​ 可能的命令完成(Cx!)
​ 在点之前列出文本的可能完成,将其视为命令名称。
​ 动态完整历史(M-TAB)
​ 在点之前尝试完成文本,将文本与历史列表中的行进行比较,以获得可能的完成匹配。
​ dabbrev-扩大
​ 尝试在点之前的文本上完成菜单,将文本与历史列表中的行进行比较,以获得可能的完成匹配。
​ 完成括号(M- {)
​ 执行文件名完成并插入括号内的可能完成列表,以便shell可以使用该列表(参见上面的Brace Expansion)。

键盘宏
​ start-kbd-macro(Cx()
​ 开始保存键入当前键盘宏的字符。
​ end-kbd-macro(Cx))
​ 停止保存键入当前键盘宏的字符并存储定义。
​ call-last-kbd-macro(Cx e)
​ 重新执行最后定义的键盘宏,方法是使宏中的字符显示为在键盘上键入。


​ re-read-init-file(Cx Cr)
​ 读入inputrc文件的内容,并合并在那里找到的任何绑定或变量赋值。
​ 中止(Cg)
​ 中止当前编辑命令并振铃终端铃(取决于铃声设置)。
​ do-uppercase-version(Ma,Mb,Mx,...)
​ 如果元化字符x为小写,请运行绑定到相应大写字符的命令。
​ 前缀元(ESC)
​ Metafy下一个字符输入。ESC f相当于Meta-f。
​ 撤消(C-_,Cx Cu)
​ 增量撤消,分别记住每一行。
​ 恢复线(先生)
​ 撤消对此行所做的所有更改。这就像执行undo命令足够多次以将行返回到其初始状态。
​ 波浪扩展(M-&)
​ 对当前单词执行波浪扩展。
​ 设定标记(C- @,M- <空格>)
​ 将标记设置为该点。如果提供了数字参数,则标记将设置为该位置。
​ 交换点和标记(Cx Cx)
​ 用标记交换点。当前光标位置设置为保存位置,旧光标位置保存为标记。
​ 字符搜索(C-])
​ 读取一个字符,并将点移动到该字符的下一个匹配项。否定计数搜索先前发生的事件。
​ 字符搜索后退(MC-])
​ 读取一个字符,并将点移动到该字符的上一个匹配项。否定计数搜索后续发生的事件。
​ 跳过-CSI-序列
​ 读取足够多的字符以使用多键序列,例如为Home和End等键定义的序列。此类序列以控制序列指示符(CSI)开头,
​ 通常ESC- [。如果此序列绑定到“\ [”,则生成此类序列的键将无效,除非明确绑定到readline命令,而不是插入 -
​ 将杂散字符放入编辑缓冲区。默认情况下,这是未绑定的,但通常绑定到ESC- [。
​ 插入注释(M-#)
​ 如果没有数字参数,则会在当前行的开头插入readline comment-begin变量的值。如果提供了数字参数,则为此
​ 命令用作切换:如果行开头的字符与comment-begin的值不匹配,则插入值,否则输入字符
​ comment-begin从行的开头删除。在任何一种情况下,都接受该行,就像输入换行符一样。comment-begin的默认值
​ 导致此命令使当前行成为shell注释。如果数字参数导致删除注释字符,则该行将由执行
​ 贝壳。
​ 全球字(Mg)
​ 点之前的单词被视为路径名扩展的模式,隐式附加星号。此模式用于生成匹配文件列表
​ 可能的完成名称。
​ glob-expand-word(Cx *)
​ 点之前的单词被视为路径名扩展的模式,并插入匹配文件名列表,替换单词。如果是数字参数
​ 如果提供,则在路径名扩展之前附加星号。
​ glob-list-expansions(Cx g)
​ 将显示由glob-expand-word生成的扩展列表,并重新绘制该行。如果提供了数字参数,则为星号
​ 在路径名扩展之前附加。
​ 翻斗功能
​ 将所有函数及其键绑定打印到readline输出流。如果提供了数字参数,则输出的格式可以是这样
​ 成为inputrc文件的一部分。
​ 翻斗变量
​ 将所有可设置的readline变量及其值打印到readline输出流。如果提供了数字参数,则以这种方式格式化输出
​ 它可以成为inputrc文件的一部分。
​ 翻斗宏
​ 打印绑定到宏的所有readline键序列及其输出的字符串。如果提供了数字参数,则输出的格式将使其格式化
​ 可以成为inputrc文件的一部分。
​ display-shell-version(Cx Cv)
​ 显示有关当前bash实例的版本信息。

可编程完成
​ 当尝试使用完整内置函数定义完成规范(compspec)的命令的参数时,单词完成(参见SHELL
​ 下面的BUILTIN命令),调用可编程完成工具。

   首先,识别命令名称。如果命令字是空字符串(在空行的开头尝试完成),则使用-E定义任何compspec使用完成选项。如果已为该命令定义了compspec,则compspec用于生成该单词的可能完成列表。如果命令word是完整路径名,首先搜索完整路径名的compspec。如果没有找到完整路径名的compspec,则尝试查找compspec在最后的斜线之后的部分。如果这些搜索没有导致compspec,则使用-D选项完成定义的任何compspec都将用作默认值。找到compspec后,它将用于生成匹配单词列表。如果未找到compspec,则完成上面所述的默认bash完成 - 执行。首先,使用compspec指定的操作。仅返回以完成的单词为前缀的匹配。当-f或-d选项用于文件时 - 名称或目录名称完成后,shell变量FIGNORE用于过滤匹配项。接下来生成由路径名扩展模式指定到-G选项的任何完成。模式生成的单词不需要与正在完成的单词匹配。GLOBIGNORE shell变量不用于过滤匹配项,但使用了FIGNORE变量。接下来,将考虑指定为-W选项的参数的字符串。首先使用IFS特殊变量中的字符将字符串拆分为分隔符。贝壳报价很荣幸。然后使用括号扩展,波浪扩展,参数和变量扩展,命令替换和算术扩展来扩展每个单词如上所述在扩展中。使用上面在Word Splitting下描述的规则拆分结果。扩展的结果是前缀匹配的单词正在完成,匹配的单词成为可能的完成。生成这些匹配项后,将调用使用-F和-C选项指定的任何shell函数或命令。当调用命令或函数时,COMP_LINE,COMP_POINT,COMP_KEY和COMP_TYPE变量分配值如上所述在Shell变量下。如果正在调用shell函数,则为COMP_WORDS和COMP_CWORD变量也设置。调用函数或命令时,第一个参数是参数完成的命令的名称,第二个参数参数是正在完成的单词,第三个参数是在当前命令行上完成的单词之前的单词。没有过滤生成的com-反对完成的词语被执行; 函数或命令在生成匹配时具有完全的自由度。首先调用使用-F指定的任何函数。该函数可以使用任何shell工具,包括下面描述的compgen,来生成匹配。它必须将可能的完成放在COMPREPLY数组变量中。接下来,在与命令替换等效的环境中调用使用-C选项指定的任何命令。它应该打印一个完成列表,每行一个,到标准输出。如有必要,可以使用反斜杠来转义换行符。生成所有可能的完成后,将使用-X选项指定的任何过滤器应用于列表。过滤器是用于路径名扩展的模式;模式中的a&替换为正在完成的单词的文本。文字&可以用反斜杠逃脱; 在尝试匹配之前删除反斜杠。任何与模式匹配的完成都将从列表中删除。领先!否定了这种模式; 在这种情况下,任何与模式不匹配的完成都将被删除。最后,将使用-P和-S选项指定的任何前缀和后缀添加到完成列表的每个成员,并将结果返回到readline完成代码作为可能的完成列表。如果先前应用的操作未生成任何匹配项,并且在定义compspec时提供了-o dirnames选项以完成,则目录名称完成为尝试。如果在定义compspec时提供-o plusdirs选项以完成,则尝试完成目录名称,并将任何匹配添加到另一个的结果中动作。默认情况下,如果找到compspec,它生成的任何内容都将作为完整的可能完成集返回到完成代码。默认的bash完成不是尝试,并禁用文件名完成的readline默认值。如果在定义compspec时提供了-o bashdefault选项以完成,则bash默认如果compspec不生成匹配,则尝试完成。如果在定义compspec时提供-o default选项以完成,则readline的默认选项为如果compspec(以及,如果尝试,默认的bash完成)不生成匹配,则将执行。当compspec指示需要完成目录名称时,可编程完成函数强制readline将斜杠附加到已完成的名称,这些名称是sym-bolic链接到目录,受标记目录readline变量值的限制,无论mark-symlinked-directories readline变量的设置如何。有一些动态修改完成的支持。当与使用完整-D指定的默认完成结合使用时,这非常有用。这是可能的对于作为完成处理程序执行的shell函数,表示应该通过返回124的退出状态来重试完成。如果shell函数返回124,并更改与正在尝试完成的命令相关的compspec(作为执行该函数时的第一个参数提供),可编程的pletion从头开始重新启动,尝试为该命令找到新的compspec。这允许在完成时动态构建一组完成尝试,而不是一次性加载。例如,假设有一个compspec库,每个都保存在与命令名对应的文件中,以下默认完成函数将动态加载完成:_completion_loader(){。“/etc/bash_completion.d/$1.sh”> / dev / null 2>&1 &&返回124}完成-D -F _completion_loader

历史
​ 启用set builtin的-o history选项后,shell将提供对命令历史记录的访问,该命令历史记录是先前键入的命令列表。HISTSIZE的价值
​ 变量用作要保存在历史列表中的命令数。保存最后一个HISTSIZE命令的文本(默认为500)。shell将每个命令存储在
​ 参数和变量扩展之前的历史列表(参见上面的EXPANSION)但是在执行历史扩展之后,受shell变量HISTIGNORE的值的限制
​ 和HISTCONTROL。

   在启动时,历史记录从变量HISTFILE(默认为?/ .bash_history)命名的文件中初始化。如果nec-,则截断由HISTFILE值命名的文件essary,包含不超过HISTFILESIZE值指定的行数。读取历史文件时,以历史注释字符开头的行紧接着一个数字被解释为前一个历史记录行的时间戳。可选择显示这些时间戳,具体取决于HIST的值 - TIMEFORMAT变量。当交互式shell退出时,最后的$ HISTSIZE行将从历史列表复制到$ HISTFILE。如果启用了histappend shell选项(请参阅在下面的SHELL BUILTIN COMMANDS下对shopt的描述),这些行被附加到历史文件中,否则将覆盖历史文件。如果未设置HISTFILE,或如果历史文件不可写,则不保存历史记录。如果设置了HISTTIMEFORMAT变量,则会将时间戳写入历史文件,并使用历史记录编写可以在shell会话中保留它们。这使用历史注释字符来区分时间戳与其他历史记录行。保存后历史记录,历史文件被截断为包含不超过HISTFILESIZE行。如果未设置HISTFILESIZE,则不执行截断。内置命令fc(参见下面的SHELL BUILTIN命令)可用于列出或编辑和重新执行历史列表的一部分。内置的历史可能用于dis-播放或修改历史列表并操纵历史文件。使用命令行编辑时,搜索命令在每个提供访问权限的编辑模式下可用历史清单。shell允许控制在历史列表中保存哪些命令。可以将HISTCONTROL和HISTIGNORE变量设置为使shell仅保存一部分输入的命令。cmdhist shell选项(如果启用)会导致shell尝试在同一历史记录条目中保存多行命令的每一行,并添加一个必要时冒号以保持句法正确性。lithist shell选项使shell使用嵌入的换行符而不是分号来保存命令。看到有关设置和取消设置shell选项的信息,请参阅SHELL BUILTIN COMMANDS下面内置的shopt的说明。

历史扩张
​ shell支持历史记录扩展功能,类似于csh中的历史记录扩展。本节介绍可用的语法功能。这个功能是
​ 默认情况下为交互式shell启用,并且可以使用set builtin命令的+ H选项禁用(请参阅下面的SHELL BUILTIN命令)。非交互式shell
​ 默认不执行历史记录扩展。

   历史扩展将历史列表中的单词引入输入流,使得重复命令变得容易,将前一个命令的参数插入到当前输入行,或快速修复以前命令中的错误。在读取完整行之后,在shell将其分解为单词之前立即执行历史记录扩展。它分两部分进行。首先是确定在替换期间使用历史列表中的哪一行。第二种是选择该行的部分以包含在当前行中。从中选择的行历史是事件,并且该行的部分是单词。各种修饰符可用于操纵所选单词。这条线被打破了单词与读取输入时的方式相同,因此用引号括起来的几个由元字符分隔的单词被认为是一个单词。历史扩展是介绍 - 由历史扩张人物的外观决定,这是!默认情况下。只有反斜杠(\)和单引号才能引用历史记录扩展字符。如果在历史扩展字符后立即找到,则几个字符会禁止历史扩展,即使它没有引用:空格,制表符,换行符,回车符和=。如果启用了extglob shell选项,(也将禁止扩展。可以使用内置shopt设置的几个shell选项来定制历史扩展的行为。如果启用了histverify shell选项(请参阅说明如下所示的shopt内置),并且正在使用readline,历史替换不会立即传递给shell解析器。而是将扩展的行重新加载到readline编辑缓冲区用于进一步修改。如果正在使用readline,并且启用了histreedit shell选项,则将重新加载失败的历史记录替换进入readline编辑缓冲区进行校正。history builtin命令的-p选项可用于查看历史扩展在使用之前将执行的操作。-s对内置历史记录的选项可用于将命令添加到历史列表的末尾而不实际执行它们,以便它们可用于后续调用。shell允许控制历史扩展机制使用的各种字符(参见Shell变量下面的histchars描述)。shell使用了历史记录注释字符,用于在编写历史文件时标记历史时间戳。

活动指示人
​ 事件指示符是对历史列表中命令行条目的引用。除非参考是绝对的,否则事件与历史中的当前位置相关
​ 名单。

   !启动历史记录替换,除非后跟空格,换行符,回车符,=或(当使用内置shopt启用extglob shell选项时)。!n请参阅命令行n。!-n请参阅当前命令减去n。!请参阅上一个命令。这是`!-1'的同义词。!串请参阅以字符串开头的历史列表中当前位置之前的最新命令。!?串[?]请参阅包含字符串的历史记录列表中当前邮件之前的最新命令。尾随?如果跟随字符串,则可以省略通过换行符。^ ^ STRING1 ^字符串2快速替换。重复上一个命令,将string1替换为string2。相当于``!!:s / string1 / string2 /''(参见下面的修饰符)。!#到目前为止输入的整个命令行。

Word指示符
​ Word指示符用于从事件中选择所需的单词。答:将事件规范与单词指示符分开。如果单词指示符可以省略
​ 以^,$,, - 或%开头。单词从行的开头编号,第一个单词用0(零)表示。单词被插入当前行
​ 由单个空格分隔。

   0(零)第0个字。对于shell,这是命令字。n第n个字。^第一个参数。也就是说,单词1。$最后一个论点。%这个词匹配最近的`?string?' 搜索。xy各种单词; `-y'缩写为'0-y'。*所有的话,但第0。这是“1- $”的同义词。如果事件中只有一个单词,则使用*不是错误; 返回空字符串那种情况。x *缩写x- $。x-缩写x- $喜欢x *,但省略了最后一个单词。如果提供的字指示符没有事件规范,则将上一个命令用作事件。

修饰符
​ 在可选的单词指示符之后,可能会出现一个或多个以下修饰符的序列,每个修饰符前面都有一个“:”。

   h删除尾随文件名组件,只留下头部。t删除所有前导文件名组件,留下尾部。r删除表单.xxx的尾随后缀,保留基本名称。e删除除尾随后缀之外的所有内容。p打印新命令但不执行它。引用替换的单词,逃避进一步的替换。x引用替换单词与q一样,但在空白和换行符处分成单词。S /老/新/在事件行中替换new为第一次出现的old。可以使用任何分隔符代替/。最终分隔符是可选的,如果它是最后一个字符 - 事件线之一。可以使用单个反斜杠以旧的和新的引用分隔符。如果&出现在新的,它将被旧的替换。一个反斜杠就会引用&。如果old为null,则将其设置为最后一个旧的替换,或者,如果没有发生先前的历史记录替换,则为!?string [?]搜索中的最后一个字符串。&重复之前的替换。g导致在整个事件行上应用更改。它与`:s'(例如,`:gs / old / new /')或`:&'一起使用。如果与`:s'一起使用,任何分隔符都可以用于代替/,如果它是事件行的最后一个字符,则最终分隔符是可选的。a可以用作g的同义词。G对事件行中的每个单词应用以下`s'修饰符一次。

SHELL BUILTIN命令
​ 除非另有说明,否则本节中记录的每个内置命令都是接受选项 - 接受 - 表示选项的结束。:,真的,假的,
​ 并且测试内置不接受选项而不接受 - 特别是。exit,logout,break,continue,let和shift builtins接受并处理以...开头的参数
​ - 无需 - 。其他接受参数但未指定为接受选项的内置函数解释以 - 作为无效选项和require开头的参数
​ - 防止这种解释。
​ :[arg uments]
​ 没有效果; 除扩展参数和执行任何指定的重定向之外,该命令不执行任何操作。返回零退出代码。

    。文件名[参数]源文件名[参数]在当前shell环境中从filename读取并执行命令,并返回从filename执行的最后一个命令的退出状态。如果文件名没有包含斜杠,PATH中的文件名用于查找包含filename的目录。在PATH中搜索的文件不需要是可执行的。当bash不在时posix模式,如果在PATH中找不到文件,则搜索当前目录。如果关闭shopt builtin命令的sourcepath选项,则PATH不会搜索。如果提供了任何参数,则在执行文件名时它们将成为位置参数。否则,位置参数不变。该返回状态是脚本中退出的最后一个命令的状态(如果没有执行命令,则为0),如果找不到或无法读取文件名,则返回false。别名[-p] [name [= value] ...]没有参数的别名或带-p选项的别名在标准输出上以别名name = value的形式打印别名列表。提供参数时,别名为为每个给出其值的名称定义。当别名展开时,值的尾随空格会导致检查下一个单词的别名替换。对于每一个参数列表中没有提供值的名称,将打印别名的名称和值。除非给出没有别名的名称,否则别名返回true已定义。bg [jobspec ...]在后台恢复每个暂停的作业jobspec,就好像它是以&开头的一样。如果jobspec不存在,则使用shell的当前作业概念。BGjobspec返回0,除非在禁用作业控制时运行,或者在启用作业控制的情况下运行时,未找到任何指定的jobspec或在没有作业控制的情况下启动特伦。绑定[-m keymap] [-lpsvPSV]bind [-m keymap] [-q function] [-u function] [-r keyseq]bind [-m keymap] -f filenamebind [-m keymap] -x keyseq:shell-commandbind [-m keymap] keyseq:function-name绑定readline-command显示当前读取键和函数绑定,将键序列绑定到readline函数或宏,或设置readline变量。每个非选项参数都是a命令,因为它将出现在.inputrc中,但每个绑定或命令必须作为单独的参数传递; 例如,''\ Cx \ Cr“:重新读取-init-file'。选项,如果支持合作,具有以下含义:-m keymap使用keymap作为后续绑定影响的键映射。可接受的键映射名称是emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-move,vi-command和vi-insert。vi相当于vi-command; emacs相当于emacs-standard。-l列出所有readline函数的名称。-p以可重新读取的方式显示readline函数名称和绑定。-P列出当前的readline函数名称和绑定。-s显示绑定到宏的readline键序列以及它们输出的字符串,以便可以重新读取它们。-S显示绑定到宏的readline键序列及其输出的字符串。-v以可重新读取的方式显示readline变量名称和值。-V列出当前的readline变量名称和值。-f文件名从文件名中读取键绑定。-q功能查询哪些键调用命名函数。-u功能取消绑定绑定到指定函数的所有键。-r keyseq删除keyseq的所有当前绑定。-x keyseq:shell-command导致在输入keyseq时执行shell命令。执行shell-command时,shell将READLINE_LINE变量设置为readline行缓冲区和READLINE_POINT变量到插入点的当前位置。如果执行的命令更改了READLINE_LINE的值或者READLINE_POINT,这些新值将反映在编辑状态中。除非给出无法识别的选项或发生错误,否则返回值为0。休息[n]从for,while,until或select循环中退出。如果指定了n,则中断n个级别。n必须≥1。如果n大于封闭循环的数量,则全部退出封闭循环。当n≤0时,返回值不为零; 否则,break返回0值。内置shell-builtin [参数]执行指定的shell内置,传递参数,并返回其退出状态。这在定义名称与shell相同的函数时很有用内置,保留功能内置功能。cd builtin通常以这种方式重新定义。如果是shell-builtin,则返回状态为false不是shell内置命令。来电者[expr]返回任何活动子例程调用的上下文(shell函数或使用。或source builtins执行的脚本)。如果没有expr,调用者将显示行号和当前子程序调用的源文件名。如果提供非负整数作为expr,则调用者显示行号,子例程名称和源文件对应于当前执行调用堆栈中的该位置。例如,可以使用该额外信息来打印堆栈跟踪。目前的框架是除非shell没有执行子例程调用或者expr不对应于调用堆栈中的有效位置,否则返回值为0。cd [-L | [-P [-e]]] [dir]将当前目录更改为dir。变量HOME是默认目录。变量CDPATH定义包含dir的目录的搜索路径。替代CDPATH中的目录名用冒号(:)分隔。CDPATH中的空目录名与当前目录相同,即“。”。如果dir以斜线开头(/),然后不使用CDPATH。-P选项表示使用物理目录结构而不是遵循符号链接(另请参阅set builtin的-P选项)命令); -L选项强制遵循符号链接。如果-e选项随-P提供,并且当前工作目录无法成功确定成功更改目录后,cd将返回不成功的状态。 - 的参数相当于$ OLDPWD。如果是非空目录名称使用CDPATH,或者如果 - 是第一个参数,并且目录更改成功,则新工作目录的绝对路径名将写入标准输出。如果目录已成功更改,则返回值为true; 否则是假的。命令[-pVv]命令[arg ...]使用args运行命令可以抑制正常的shell函数查找。仅执行在PATH中找到的内置命令或命令。如果给出-p选项,则使用PATH的默认值执行搜索命令,保证找到所有标准实用程序。如果提供-V或-v选项,则a打印命令的描述。-v选项会生成一个单词,指示用于调用命令的命令或文件名; -V选项pro-更详细的描述。如果提供了-V或-v选项,则在找到命令时退出状态为0,否则为1。如果没有提供任何选项和发生错误或无法找到命令,退出状态为127.否则,命令builtin的退出状态是命令的退出状态。compgen [选项] [字]根据选项生成可能的单词完成匹配,这可能是完整内置程序接受的任何选项,但-p和-r除外,并且将匹配写入标准输出。使用-F或-C选项时,可编程完成工具设置的各种shell变量虽然可用,没有有用的价值。匹配将以与可编程完成代码直接从具有相同标志的完成规范生成它们相同的方式生成。如果指定了单词,则仅显示匹配单词的那些完成。除非提供了无效选项,否则返回值为true,或者未生成任何匹配项。完成[-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command][-X filterpat] [-P prefix] [-S suffix] name [name ...]完成-pr [-DE] [name ...]指定应如何完成每个名称的参数。如果提供了-p选项,或者未提供任何选项,则会打印现有的完成规范一种允许它们作为输入重用的方法。-r选项删除每个名称的完成规范,如果没有提供名称,则删除所有完成规范 - 蒸发散。-D选项表示剩余的选项和操作应该适用于``default''命令完成; 也就是说,尝试完成命令以前没有完成任何完成。-E选项表示剩余的选项和操作应该适用于``empty''命令完成; 那是,在空行上尝试完成。上面在可编程完成时描述了在尝试完成单词时应用这些完成规范的过程。其他选项(如果指定)具有以下含义。应引用-G,-W和-X选项的参数(如果需要,还有-P和-S选项)在调用完整的内置函数之前保护它们不被扩展。-o comp-optioncomp-option控制compspec行为的几个方面,而不仅仅是简单生成完成。comp-option可能是以下之一:bashdefault如果compspec没有生成匹配项,则执行其余的默认bash完成。default如果compspec不生成匹配项,则使用readline的默认文件名完成。dirnames中如果compspec没有生成匹配项,则执行目录名称完成。文件名告诉readline compspec生成文件名,因此它可以执行任何特定于文件名的处理(比如在目录名称中添加斜杠,特殊字符,或抑制尾随空格)。旨在与shell函数一起使用。nospace告诉readline不要在行尾添加一个空格(默认值)。plusdirs在生成compspec定义的任何匹配项之后,尝试完成目录名称,并将任何匹配项添加到另一个匹配项的结果中动作。- 行动该操作可以是以下之一,以生成可能的完成列表:别名别名。也可以指定为-a。arrayvar数组变量名。绑定Readline键绑定名称。builtin shell内置命令的名称。也可以指定为-b。命令命令。也可以指定为-c。目录目录名称。也可以指定为-d。残已禁用的shell内置命令的名称。enabled已启用的shell内置命令的名称。export导出的shell变量的名称。也可以指定为-e。file文件名。也可以指定为-f。功能shell函数的名称。组名称组。也可以指定为-g。HELPTOPIC帮助内置的帮助主题。主机名主机名,取自HOSTFILE shell变量指定的文件。作业名称,如果作业控制处于活动状态。也可以指定为-j。关键字Shell保留字。也可以指定为-k。如果作业控制处于活动状态,则运行正在运行的作业的名称服务服务名称。也可以指定为-s。setopt set builtin的-o选项的有效参数。shopt内置的shopt接受的Shell选项名称。信号信号名称。如果作业控制处于活动状态,则停止已停止作业的名称。用户用户名。也可以指定为-u。变量所有shell变量的名称。也可以指定为-v。-C命令命令在子shell环境中执行,其输出用作可能的完成。-F功能shell函数函数在当前shell环境中执行。完成后,可以从COM的值中检索可能的完成PREPLY数组变量。-G globpat扩展路径名扩展模式globpat以生成可能的完成。-P前缀在应用所有其他选项后,在每个可能的完成开始时添加前缀。-S后缀在应用所有其他选项后,后缀将附加到每个可能的完成。-W wordlist使用IFS特殊变量中的字符作为分隔符将单词列表拆分,并扩展每个结果单词。可能的完成是结果列表中与完成的单词匹配的成员。-X filterpatfilterpat是用于路径名扩展的模式。它应用于前面的选项和参数生成的可能完成列表,以及从列表中删除每个完成匹配filterpat。领先!在filterpat中否定了模式; 在这种情况下,任何完成都不匹配filterpat已移除。返回值为true,除非提供了无效选项,提供了除-p或-r之外的选项而没有使用name参数,尝试删除com-对于没有规范的名称的pletion规范,或添加完成规范时发生错误。compopt [-o选项] [-DE] [+ o选项] [名称]根据选项修改每个名称的完成选项,如果没有提供名称,则修改当前执行的完成选项。如果没有给出选项,则显示每个名称或当前完成的完成选项。option的可能值是对上述完整内置函数有效的值。-D选项表示剩余的选项应该适用于``default''命令完成; 也就是说,在没有完成任务的命令上尝试完成已定义。-E选项表示其余选项应适用于“空”命令完成; 也就是说,在空白行上尝试完成。除非提供了无效选项,否则返回值为true,尝试修改不存在完成规范的名称的选项,或者发生输出错误。继续[n]继续封闭for,while,until或select循环的下一次迭代。如果指定了n,则在第n个封闭循环处继续。n必须≥1。如果n更大比封闭循环的数量,最后一个封闭循环(“顶级”循环)恢复。当在循环内执行continue时,返回值为非n小于0时为零; 否则,继续返回0值。当在循环外执行continue时,返回值为0。声明[-aAfFgilrtux] [-p] [name [= value] ...]typeset [-aAfFgilrtux] [-p] [name [= value] ...]声明变量和/或赋予它们属性。如果没有给出名称,则显示变量的值。-p选项将显示的属性和值每个名字。当-p与名称参数一起使用时,将忽略其他选项。当提供-p而没有名称参数时,它将显示属性和值具有由附加选项指定的属性的所有变量。如果-p没有提供其他选项,declare将显示属性和值所有shell变量。-f选项将显示限制为shell函数。-F选项禁止显示函数定义; 只有功能打印名称和属性。如果使用shopt启用了extdebug shell选项,则会显示定义函数的源文件名和行号同样。-F选项表示-f。-g选项强制在全局范围内创建或修改变量,即使在shell函数中执行declare也是如此。在所有其他情况下都会被忽略。以下选项可用于将输出限制为具有指定属性的变量或提供变量属性:-a每个名称都是一个索引数组变量(参见上面的数组)。-A每个名称都是一个关联数组变量(参见上面的数组)。-f仅使用函数名称。-i将变量视为整数; 当为变量赋值时,执行算术评估(参见上面的算术评估)。-l为变量赋值时,所有大写字符都将转换为小写。大写属性已禁用。-r只读名称。然后,这些名称不能通过后续赋值语句指定值或取消设置。-t为每个名称指定trace属性。跟踪函数从调用shell继承DEBUG和RETURN陷阱。trace属性没有特殊含义变量。-u为变量赋值时,所有小写字符都将转换为大写。小写属性已禁用。-x标记要通过环境导出到后续命令的名称。使用“+”而不是“ - ”会关闭属性,但+ a可能不会用于销毁数组变量,而+ r不会删除只读属性属性。在函数中使用时,除了提供-g选项外,将每个名称设置为local,与local命令一样,如果变量名后跟= value,则变量的值设置为value。除非遇到无效选项,否则返回值为0,尝试使用``-f foo = bar''定义函数,尝试将值赋给readonly变量,尝试在不使用复合赋值语法的情况下为数组变量赋值(请参阅上面的数组),其中一个名称不是有效的shell变量名,试图关闭readonly变量的readonly状态,尝试转向关闭数组变量的数组状态,或尝试使用-f显示不存在的函数。dirs [+ n] [-n] [-clpv]如果没有选项,则显示当前记住的目录列表。默认显示位于一行,目录名称以空格分隔。目录使用pushd命令添加到列表中; popd命令从列表中删除条目。+ n显示从没有选项调用时dirs显示的列表左侧开始计数的第n个条目,从零开始。-n显示从没有选项调用时dirs显示的列表右侧开始计数的第n个条目,从零开始。-c通过删除所有条目来清除目录堆栈。-l生成更长的列表; 默认列表格式使用代字号表示主目录。-p打印目录堆栈,每行一个条目。-v打印目录堆栈,每行一个条目,在每个条目前面添加其索引在堆栈中。除非提供了无效选项或超出目录堆栈末尾的n个索引,否则返回值为0。disown [-ar] [-h] [jobspec ...]如果没有选项,则会从活动作业表中删除每个jobspec。如果jobspec不存在,并且既不提供-a也不提供-r,那么shell的概念是租用工作被使用。如果给出-h选项,则不会从表中删除每个jobspec,但会对其进行标记,以便在shell收到时不会将SIGHUP发送到作业SIGHUP。如果不存在jobspec,并且既未提供-a选项也未提供-r选项,则使用当前作业。如果未提供jobspec,则-a选项表示删除或标记所有工作; 没有jobspec参数的-r选项将操作限制为正在运行的作业。除非jobspec未指定有效作业,否则返回值为0。echo [-neE] [arg ...]输出args,用空格分隔,后跟换行符。返回状态始终为0.如果指定了-n,则抑制尾随换行符。如果是-e选项给出了以下反斜杠转义字符的解释。-E选项禁用这些转义字符的解释,即使在sys-tems默认解释它们。xpg_echo shell选项可用于动态确定echo是否扩展这些转义字符默认。echo不解释 - 意味着选项的结束。echo解释以下转义序列:警报(铃声)\ b退格\ c抑制进一步的输出。\ E\ E逃脱角色\ f表格饲料\ n新行\ r \ n回车\ t水平标签\ v垂直标签\\反斜杠\ nnnnn八位字符,其值为八进制值nnn(零到三个八进制数字)\ xHH八位字符,其值为十六进制值HH(一个或两个十六进制数字)\ uHHHH Unicode(ISO / IEC 10646)字符,其值为十六进制值HHHH(一到四个十六进制数字)\ UHHHHHHHHUnicode(ISO / IEC 10646)字符,其值为十六进制值HHHHHHHH(一到八个十六进制数字)启用[-a] [-dnps] [-f filename] [name ...]启用和禁用内置shell命令。禁用内置允许执行与内置shell同名的磁盘命令,而无需指定完整路径名,即使shell通常在磁盘命令之前搜索内置命令。如果使用-n,则禁用每个名称; 否则,名称已启用。对于例如,要使用通过PATH而不是shell内置版本找到的测试二进制文件,运行``enable -n test''。-f选项表示加载新的内置命令在支持动态加载的系统上,来自共享对象文件名的名称。-d选项将删除先前使用-f加载的内置函数。如果没有名称参数给定,或者如果提供-p选项,则打印shell builtins列表。如果没有其他选项参数,则列表包含所有已启用的shell内置函数。如果-n提供,只打印禁用的内置。如果提供了-a,则打印的列表包括所有内置函数,并指示是否已启用每个内置函数。如果提供-s,输出仅限于POSIX特殊内置。除非名称不是内置shell或加载新的错误,否则返回值为0内置于共享对象。评估[arg ...]args被读取并连接成一个命令。然后shell读取并执行此命令,并将其退出状态作为值返回评价 如果没有args或只有null参数,则eval返回0。exec [-cl] [-a name] [command [arguments]]如果指定了command,则替换shell。没有创建新进程。参数成为命令的参数。如果提供了-l选项,则为shell在传递给命令的第0个参数的开头放置一个破折号。这是login(1)的作用。-c选项导致命令以空的环境执行ronment。如果提供了-a,则shell将name作为第0个参数传递给执行的命令。如果由于某种原因无法执行命令,则为非交互式shell退出,除非启用了shell选项execfail,在这种情况下它会返回失败。如果无法执行文件,则交互式shell将返回失败。如果如果未指定command,则任何重定向在当前shell中生效,返回状态为0.如果存在重定向错误,则返回状态为1。退出[n]导致shell退出状态为n。如果省略n,则退出状态是最后执行的命令的状态。在shell之前执行EXIT上的陷阱纳茨。export [-fn] [name [= word]] ...export -p提供的名称标记为自动导出到后续执行的命令的环境。如果给出-f选项,则名称引用函数。如果没有给出名称,或者如果提供了-p选项,则会打印在此shell中导出的所有名称的列表。-n选项导致export属性从每个名字中删除。如果变量名后跟= word,则变量的值设置为word。export返回退出状态为0,除非无效遇到选项,其中一个名称不是有效的shell变量名称,或者-f提供的名称不是函数。fc [-e ename] [-lnr] [first] [last]fc -s [pat = rep] [cmd]修复命令。在第一种形式中,从历史列表中选择从头到尾的一系列命令。可以将first和last指定为字符串(以找到以该字符串开头的最后一个命令)或作为数字(历史列表的索引,其中负数用作当前命令编号的偏移量)。如果未指定last,则将其设置为当前用于列出的命令(以便``fc -l -10''打印最后10个命令),否则设置为first。如果不是指定将其设置为上一个用于编辑的命令,将-16设置为列表。-n选项在列出时禁止命令编号。-r选项反转命令的顺序。如果给出-l选项,则列出命令标准输出。否则,将在包含这些命令的文件上调用ename给出的编辑器。如果未给出ename,则FCEDIT变量的值为如果未设置FCEDIT,则使用EDITOR的值。如果两个变量都未设置,则使用vi。编辑完成后,将回显并执行编辑的命令。在第二种形式中,在每个pat实例被rep替换之后重新执行命令。与此一起使用的一个有用的别名是``r =“fc -s”'',因此键入``r cc''运行以“cc”开头的最后一个命令,输入“r”重新执行最后一个命令。如果使用第一个表单,则返回值为0,除非遇到无效选项或第一个或最后一个指定历史记录行超出范围。如果-e选项是支持plied,返回值是执行的最后一个命令的值,如果命令的临时文件发生错误,则返回失败。如果使用第二种形式,则返回状态是重新执行的命令的状态,除非cmd未指定有效的历史记录行,在这种情况下fc将返回失败。fg [jobspec]在前台恢复jobspec,并使其成为当前作业。如果jobspec不存在,则使用shell的当前作业概念。返回值是命令置于前台,如果在禁用作业控制时运行,或者在启用作业控制的情况下运行,如果jobspec未指定有效作业或jobspec指定在没有作业控制的情况下启动的作业。getopts optstring name [args]shell过程使用getopts来解析位置参数。optstring包含要识别的选项字符; 如果一个字符后跟一个冒号,该选项应该有一个参数,该参数应该用空格分隔。冒号和问号字符不得用作选项字符 - TER值。每次调用它时,getopts都会将下一个选项放在shell变量名中,如果名称不存在则初始化名称,以及下一个参数的索引被处理成变量OPTIND。每次调用shell或shell脚本时,OPTIND都会初始化为1。当一个选项需要一个参数时,getopts将该参数放入变量OPTARG中。shell不会自动重置OPTIND; 它必须在多次调用getopts之间手动重置如果要使用一组新参数,则调用相同的shell。遇到选项结束时,getopts将以大于零的返回值退出。OPTIND设置为第一个非选项参数的索引,名称为调成 ?。getopts通常会解析位置参数,但如果在args中给出了更多参数,则getopts会解析这些参数。getopts可以通过两种方式报告错误。如果optstring的第一个字符是冒号,则使用静默错误报告。在正常操作中,诊断消息是遇到无效选项或缺少选项参数时打印。如果变量OPTERR设置为0,则不会显示任何错误消息,即使第一个也是如此optstring的字符不是冒号。如果看到无效选项,请使用getopts吗?进入名称,如果不是沉默,则打印错误消息并取消设置OPTARG。如果getopts是静默的,那么选项字符找到放在OPTARG中,不打印任何诊断消息。如果找不到必需的参数,并且getopts不是静默的,则会在名称中放置一个问号(?),取消设置OPTARG,并打印一条诊断消息。如果getopts是静默的,然后冒号(:)放在名称中,OPTARG设置为找到的选项字符。如果找到指定或未指定的选项,则getopts返回true。如果遇到选项结尾或发生错误,则返回false。hash [-lr] [-p filename] [-dt] [name]每次调用哈希时,命令名称的完整路径名都是通过搜索$ PATH中的目录并记住来确定的。以前记得的任何路径 - 名称被丢弃。如果提供了-p选项,则不执行路径搜索,并且filename用作命令的完整文件名。-r选项导致贝壳忘了所有记住的位置。-d选项使shell忘记每个名称的记忆位置。如果提供-t选项,则完整路径 - 打印每个名称对应的名称。如果使用-t提供了多个名称参数,则在散列完整路径名之前打印名称。-l选项导致输出以可以重用为输入的格式显示。如果没有给出参数,或者只提供了-l,则有关记忆命令的信息是打印。除非找不到名称或提供了无效选项,否则返回状态为true。帮助[-dms] [模式]显示有关内置命令的有用信息。如果指定了pattern,help会提供有关匹配模式的所有命令的详细帮助; 否则所有的帮助打印内置和外壳控制结构。-d显示每个模式的简短描述-m以类似联机帮助页的格式显示每个模式的描述-s仅显示每个模式的简短用法概要除非没有命令匹配模式,否则返回状态为0。历史[n]历史-c历史-d offset历史记录-anrw [文件名]历史-p arg [arg ...]历史-s arg [arg ...]如果没有选项,则显示带有行号的命令历史列表。用*列出的行已被修改。n的参数仅列出最后n行。如果shell变量HISTTIMEFORMAT已设置且不为null,它用作strftime(3)的格式字符串,以显示与每个显示的历史记录关联的时间戳条目。在格式化的时间戳和历史记录行之间不打印中间空白。如果提供了filename,则将其用作历史文件的名称; 如果不,使用HISTFILE的值。选项(如果提供)具有以下含义:-c通过删除所有条目来清除历史列表。-d offset删除位置偏移处的历史记录条目。-a将“新”历史记录行(自当前bash会话开始以来输入的历史记录行)附加到历史记录文件。-n将尚未从历史文件中读取的历史记录行读入当前历史记录列表。这些是从一开始就附加到历史文件的行当前的bash会话。-r读取历史文件的内容并将其用作当前历史记录。-w将当前历史记录写入历史文件,覆盖历史文件的内容。-p对以下args执行历史记录替换,并在标准输出上显示结果。不将结果存储在历史列表中。每个arg必须引用以禁用正常的历史记录扩展。-s将args作为单个条目存储在历史列表中。在添加args之前,将删除历史列表中的最后一个命令。如果设置了HISTTIMEFORMAT变量,则将与每个历史条目关联的时间戳信息写入历史记录文件,并标记历史记录字符。读取历史文件时,以历史注释字符开头,后面紧跟数字的行将被解释为时间戳以前的历史记录。除非遇到无效选项,否则返回值为0,读取或写入历史文件时发生错误,无效偏移量为作为-d的参数提供,或者作为-p参数提供的历史扩展失败。工作[-lnprs] [jobspec ...]jobs -x命令[args ...]第一个表单列出了活动作业。选项具有以下含义:-l除正常信息外,还列出进程ID。-n仅显示自上次向用户通知其状态以来状态已更改的作业的信息。-p仅列出作业进程组组长的进程ID。-r将输出限制为正在运行的作业。-s将输出限制为已停止的作业。如果给出了jobspec,则输出仅限于有关该作业的信息。返回状态为0,除非遇到无效选项或无效的jobspec支持合股。如果提供了-x选项,则作业将替换在命令或args中找到的任何jobspec以及相应的进程组ID,并执行命令传递args,返回 - 退出状态。杀[-s sigspec | -n signum | -sigspec] [pid | jobspec] ...kill -l [sigspec | EXIT_STATUS]将由sigspec或signum命名的信号发送到由pid或jobspec命名的进程。sigspec是一个不区分大小写的信号名称,如SIGKILL(有或没有SIG前缀)或信号编号; signum是一个信号编号。如果sigspec不存在,则假定为SIGTERM。-l的参数列出了信号名称。如果有的话给出-l时提供参数,列出与参数对应的信号的名称,返回状态为0. exit_status参数为-l是指定由信号终止的进程的信号编号或退出状态的编号。如果至少有一个信号成功,则kill返回true发送错误,如果发生错误或遇到无效选项,则返回false。让arg [arg ...]每个arg都是要评估的算术表达式(参见上面的算术评估)。如果最后一个arg的计算结果为0,则返回1; 否则返回0。local [option] [name [= value] ...]对于每个参数,将创建名为name的局部变量,并为其指定值。该选项可以是声明接受的任何选项。在本地使用本地时函数,它使变量名具有仅限于该函数及其子函数的可见范围。没有操作数,本地写入局部变量列表到标准输出。不在函数内时使用local是错误的。除非在函数外部使用local,否则返回状态为0,无效名称为提供,或名称是只读变量。logout退出登录shell。mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]读取标准输入到索引数组变量数组的行,或者如果提供了-u选项,则从文件描述符fd读取行。变量MAPFILE是默认值阵列。选项(如果提供)具有以下含义:-n复制大多数计数行。如果count为0,则复制所有行。-O开始分配索引源处的数组。默认索引为0。-s丢弃读取的第一个计数行。-t从每行读取中删除尾部换行符。-u从文件描述符fd而不是标准输入中读取行。-C每次读取量子线时评估回调。-c选项指定量子。-c指定每次调用回调之间读取的行数。如果在没有-c的情况下指定-C,则默认量程为5000.当评估回调时,将为其提供要分配的下一个数组元素的索引和行要作为附加参数分配给该元素。在读取行但在分配数组元素之前评估回调。如果未提供显式原点,则mapfile将在分配之前清除数组。除非提供了无效的选项或选项参数,数组无效或不可分配,或者数组不是索引数组,否则mapfile会成功返回。popd [-n] [+ n] [-n]从目录堆栈中删除条目。如果没有参数,则从堆栈中删除顶级目录,然后执行cd到新的顶级目录。争论,如果支持合作,具有以下含义:-n当从堆栈中删除目录时,禁止正常更改目录,以便仅操作堆栈。+ n删除dirs显示的列表左侧的第n个条目,从零开始。例如:``popd +0''删除第一个目录,``popd +1''第二。-n从d开头的列表右侧删除第n个条目,从零开始。例如:``popd -0''删除最后一个目录,``popd -1''倒数第二个。如果popd命令成功,也会执行dirs,返回状态为0.如果遇到无效选项,popd返回false,该目录stack为空,指定了不存在的目录堆栈条目,或者目录更改失败。printf [-v var] format [arguments]在格式的控制下将格式化的参数写入标准输出。-v选项导致将输出分配给变量var而不是被打印到标准输出。格式是一个字符串,它包含三种类型的对象:普通字符,简单地复制到标准输出,字符转义序列,其中转换并复制到标准输出和格式规范,每个规范都会导致打印下一个连续的参数。除了标准printf(1)格式规范,printf解释以下扩展:%b导致printf在相应的参数中扩展反斜杠转义序列(除了\ c终止输出,\',\“和\?中的反斜杠不是已删除,以\ 0开头的八进制转义符最多可包含四位数字。%q使printf以可以重用为shell输入的格式输出相应的参数。%(datefmt)笔导致printf输出使用datefmt作为strftime(3)的格式字符串得到的日期时间字符串。相应的参数是一个整数表示发送自纪元以来的秒数。可以使用两个特殊参数值:-1表示当前时间,-2表示shell的时间被调用。非字符串格式说明符的参数被视为C常量,但允许使用前导加号或减号,并且如果前导字符是单个或双引号,该值是以下字符的ASCII值。必要时重用该格式以使用所有参数。如果格式需要的参数多于提供的参数,则额外的格式规范表现为如果提供了适当的零值或空字符串。成功时返回值为零,失败时返回值为非零。pushd [-n] [+ n] [-n]pushd [-n] [dir]将目录添加到目录堆栈的顶部,或者旋转堆栈,使堆栈的新顶部成为当前工作目录。没有争论,交流除非目录堆栈为空,否则前两个目录并返回0。参数(如果提供)具有以下含义:-n在向堆栈添加目录时禁止正常更改目录,以便仅操作堆栈。+ n旋转堆栈,使第n个目录(从dirs显示的列表左侧开始,从零开始)位于顶部。-n旋转堆栈,使第n个目录(从dirs显示的列表右侧开始,从零开始)位于顶部。dir将dir添加到顶部的目录堆栈,使其成为新的当前工作目录。如果pushd命令成功,则也执行dirs。如果使用第一个表单,则pushd返回0,除非cd to dir失败。用第二种形式,推除非目录堆栈为空,指定了不存在的目录堆栈元素,或者目录更改为指定的新当前目录,否则返回0失败。pwd [-LP]打印当前工作目录的绝对路径名。如果提供了-P选项或-o physical选项,则打印的路径名不包含符号链接启用set builtin命令。如果使用-L选项,则打印的路径名可能包含符号链接。除非发生错误,否则返回状态为0读取当前目录的名称或提供无效选项。读[-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ... ]从标准输入读取一行,或从作为-u选项的参数提供的文件描述符fd读取,并将第一个单词分配给第一个名称,第二个单词到第二个名字,依此类推,剩下的单词和他们介入的分隔符分配给姓氏。如果从中读取的单词较少输入流比名称,其余名称分配空值。IFS中的字符用于将行拆分为单词。反斜杠字符(\)可以用于删除下一个字符读取和行继续的任何特殊含义。选项(如果提供)具有以下含义:- 一个人这些单词被分配给数组变量aname的顺序索引,从0开始。在分配任何新值之前,未设置aname。其他名称 - 这些被忽略了。-d delimdelim的第一个字符用于终止输入行,而不是换行符。-e如果标准输入来自终端,则使用readline(参见上面的READLINE)获取该行。Readline使用当前(或默认,如果行编辑 - 以前没有激活ing)编辑设置。-i文字如果使用readline读取行,则在编辑开始之前将文本放入编辑缓冲区。-n nchars读取nchars字符后读取返回,而不是等待完整的输入行,但如果读取的字符数少于nchars则遵循分隔符在分隔符之前。-N nchars读取正好nchars字符后读取返回,而不是等待完整的输入行,除非遇到EOF或读取超时。分隔符输入中遇到的字符不会被特殊处理,并且在读取nchars字符之前不会导致读取。-p提示在尝试读取任何输入之前,在没有尾随换行符的情况下显示标准错误提示。仅当输入来自ter-时,才会显示提示单宝元。-r反斜杠不作为转义字符。反斜杠被认为是该行的一部分。特别是,反斜杠 - 换行符对可能不会被用作一条线延续。-s静音模式。如果输入来自终端,则不回显字符。-t超时如果在超时秒内未读取完整的输入行,则会导致读取超时并返回失败。超时可以是带小数的十进制数小数点后面的部分。此选项仅在读取来自终端,管道或其他特殊文件的输入时有效; 它没有效果从常规文件中读取。如果timeout为0,如果输入在指定的文件描述符上可用,则read返回成功,否则失败。退出状态如果超过超时,则大于128。-u fd从文件描述符fd读取输入。如果未提供名称,则将读取的行分配给变量REPLY。返回码为零,除非遇到文件结尾,读取超时(在这种情况下)返回码大于128),或者提供无效的文件描述符作为-u的参数。readonly [-aAf] [-p] [name [= word] ...]给定的名称标记为只读; 后续分配不得更改这些名称的值。如果提供了-f选项,则对应的函数这些名字是如此明显。-a选项将变量限制为索引数组; -A选项将变量限制为关联数组。如果两个选项都是提供,-A优先。如果未给出名称参数,或者提供了-p选项,则会打印所有只读名称的列表。其他选项可能是用于将输出限制为只读名称集的子集。-p选项使输出以可以重用为输入的格式显示。如果变量能够名称后跟= word,变量的值设置为word。除非遇到无效选项,其中一个名称不是a,否则返回状态为0有效的shell变量名称,或者-f提供的名称不是函数。返回[n]使函数以n指定的返回值退出。如果省略n,则返回状态是在函数体中执行的最后一个命令的状态。如果使用在函数外部,但在执行脚本期间。(source)命令,它导致shell停止执行该脚本并返回n或退出sta脚本中执行的最后一个命令的tus作为脚本的退出状态。如果在函数外部使用而不是在执行脚本期间使用。,则返回状态为假。在函数或脚本之后执行恢复之前,将执行与RETURN陷阱关联的任何命令。设置[--abefhkmnptuvxBCEHPT] [-o选项名称] [arg ...]设置[+ abefhkmnptuvxBCEHPT] [+ o选项名称] [arg ...]如果没有选项,每个shell变量的名称和值将以一种格式显示,该格式可以重复用作设置或重置当前设置变量的输入。只读变量无法重置。在posix模式下,仅列出shell变量。输出根据当前区域设置进行排序。当选项是特定的他们设置或取消设置shell属性。选项处理后剩余的任何参数都被视为位置参数的值,并在中进行分配订单,$ 1,$ 2,... $ n。选项(如果指定)具有以下含义:-a自动标记为了导出到后续命令的环境而修改或创建的变量和函数。-b立即报告已终止后台作业的状态,而不是在下一个主要提示之前报告。仅在启用作业控制时才有效。-e如果管道(可能包含一个简单命令),括在括号中的子shell命令或其中一个执行的命令,则立即退出由大括号括起的命令列表的一部分(参见上面的SHELL GRAMMAR)以非零状态退出。如果失败的命令是shell的一部分,则shell不会退出紧跟一段时间或直到关键字的命令列表,在if或elif保留字后面的测试的一部分,在&&中执行的任何命令的一部分或|| 列表除了最后的&&或||之后的命令,管道中的任何命令但是最后一个命令,或者命令的返回值是否与!相反。ERR上的陷阱(如果已设置)将在shell退出之前执行。此选项分别适用于shell环境和每个子shell环境(请参阅COMMAND上面的执行环境),并且可能导致子shell在执行子shell中的所有命令之前退出。-f禁用路径名扩展。-h在查找执行命令时记住命令的位置。默认情况下启用此功能。-k赋值语句形式的所有参数都放在命令的环境中,而不仅仅是命令名称之前的那些参数。-m监控模式。作业控制已启用。默认情况下,对于支持它的系统上的交互式shell,此选项处于启用状态(请参阅上面的JOB CONTROL)。背景进程在单独的进程组中运行,并且在完成时打印包含其退出状态的行。-n读取命令但不执行它们。这可用于检查shell脚本是否存在语法错误。交互式shell会忽略它。-o选项名称选项名称可以是以下之一:allexport与-a相同。braceexpand与-B相同。emacs使用emacs样式的命令行编辑界面。默认情况下,当shell是交互式时启用,除非shell是以shell启动的--noediting选项。这也会影响用于读取-e的编辑界面。errexit与-e相同。errtrace与-E相同。functrace与-T相同。hashall与-h相同。histexpand与-H相同。history启用命令历史记录,如上面HISTORY中所述。默认情况下,此选项在交互式shell中处于启用状了ignoreeof效果就好像执行了shell命令``IGNOREEOF = 10''(参见上面的Shell变量)。keyword与-k相同。监视器与-m相同。noclobber选项与-C相同。noexec与-n相同。noglob与-f相同。nolog目前被忽略了。通知与-b相同。nounset与-u相同。onecmd与-t相同。物理与-P相同。pipefail如果设置,则管道的返回值是以非零状态退出的最后(最右边)命令的值,如果是,则为零。管道退出成功。默认情况下禁用此选项。posix更改bash的行为,其中默认操作与POSIX标准不同,以匹配标准(posix模式)。特权与-p相同。verbose与-v相同。vi使用vi样式的命令行编辑界面。这也会影响用于读取-e的编辑界面。xtrace与-x相同。如果-o未提供选项名称,则打印当前选项的值。如果+ o没有选项名称,则提供一系列set命令重新创建当前选项设置显示在标准输出上。-p启用特权模式。在这种模式下,$ ENV和$ BASH_ENV文件不会被处理,shell函数不会从环境中继承,而且SHEL-LOPTS,BASHOPTS,CDPATH和GLOBIGNORE变量(如果它们出现在环境中)将被忽略。如果shell以有效用户(组)ID启动不等于真实用户(组)ID,并且未提供-p选项,将采取这些操作并将有效用户ID设置为实际用户ID。如果启动时提供-p选项,不重置有效用户ID。关闭此选项会导致有效的用户和组ID设置为真实用户和组ID。-t读取并执行一个命令后退出。-u在执行参数扩展时,将特殊参数“@”和“*”以外的未设置变量和参数视为错误。如果尝试扩展在未设置的变量或参数上,shell会输出错误消息,如果不是交互式,则会以非零状态退出。-v在读取时打印shell输入行。-x扩展每个简单命令后,对于command,case命令,select命令或arithmetic for command,显示PS4的扩展值,然后是命令及其扩展参数或关联的单词列表。-B shell执行大括号扩展(参见上面的Brace Expansion)。默认情况下启用此选项。-C如果设置,bash不会使用>,>&和<>重定向运算符覆盖现有文件。使用时创建输出文件时可能会覆盖此项重定向运算符> | 而不是>。-E如果设置,则ERR上的任何陷阱都由shell函数,命令替换和子shell环境中执行的命令继承。ERR陷阱通常不是在这种情况下继承。-H启用!风格历史替代。当shell是交互式时,默认情况下此选项处于启用状态。-P如果设置,则在执行更改当前工作目录的cd等命令时,shell不会遵循符号链接。它使用物理目录结构而不是。默认情况下,bash在执行更改当前目录的命令时遵循目录的逻辑链。-T如果设置,则DEBUG和RETURN上的任何陷阱都由shell函数,命令替换和子shell环境中执行的命令继承。DEBUG和在这种情况下,RETURN陷阱通常不会被继承。- 如果此选项后面没有参数,则取消设置位置参数。否则,位置参数设置为args,即使它们中的一些也是如此以 - 开头。- 发出选项结束信号,将所有剩余的参数分配给位置参数。-x和-v选项已关闭。如果没有args,位置参数保持不变。除非另有说明,否则默认情况下关闭选项。使用+而不是 - 会导致关闭这些选项。选项也可以指定为参数一个shell的调用。当前的选项集可以在$  - 中找到。除非遇到无效选项,否则返回状态始终为true。转移[n]来自n + 1 ...的位置参数被重命名为$ 1 ....由数字$#向下表示为$# -  n + 1的参数未设置。n必须是非负数大于或等于$#。如果n为0,则不更改参数。如果没有给出n,则假定为1.如果n大于$#,则位置参数不是改变。如果n大于$#或小于零,则返回状态大于零; 否则为0。shopt [-pqsu] [-o] [optname ...]切换控制可选shell行为的变量值。如果没有选项,或者使用-p选项,则会显示所有可设置选项的列表,其中包含一个是否各自设定的阳离子。-p选项使输出以可以重用为输入的形式显示。其他选项具有以下含义:-s启用(设置)每个optname。-u禁用(取消设置)每个optname。-q禁止正常输出(安静模式); 返回状态指示是设置还是取消设置optname。如果使用-q给出多个optname参数,则如果启用了所有optnames,则返回状态为零; 否则为非零。-o将optname的值限制为为set builtin的-o选项定义的值。如果使用-s或-u且没有optname参数,则显示仅限于分别设置或取消设置的选项。除非另有说明,否则该shopt默认情况下禁用(取消设置)选项。如果启用了所有optnames,则列出选项时的返回状态为零,否则为非零。设置或取消设置选项时,返回状态为零,除非optname不是有效的shell选项。购物选项列表是:autocd如果设置,则执行作为目录名称的命令名称,就好像它是cd命令的参数一样。此选项仅供交互式使用炮弹。cdable_vars如果设置,则假定cd builtin命令不是目录的参数是变量的名称,其值是要更改的目录。cdspell如果设置,将更正cd命令中目录组件拼写中的次要错误。检查的错误是转置字符,缺少角色,一个角色太多了。如果找到更正,则打印更正的文件名,然后命令继续。此选项仅用于互动壳。checkhash如果设置,bash会在尝试执行之前检查哈希表中找到的命令是否存在。如果散列命令不再存在,则进行正常路径搜索执行。checkjobs如果设置,bash将在退出交互式shell之前列出任何已停止和正在运行的作业的状态。如果任何作业正在运行,则会导致退出在没有干预命令的情况下推迟到第二次退出(参见上面的JOB CONTROL)。如果任何作业停止,shell总是推迟退出。checkwinsize如果设置,bash会在每个命令后检查窗口大小,并在必要时更新LINES和COLUMNS的值。cmdhist如果设置,bash会尝试在同一历史记录条目中保存多行命令的所有行。这样可以轻松地重新编辑多行命令。compat31如果设置,bash将其行为更改为版本3.1的行为,相对于[[条件命令的=?运算符]的引用参数。compat32如果设置,当使用[[条件命令的<和>]时,bash将其行为更改为版本3.2的行为与特定于语言环境的字符串比较运营商。bash-4.1之前的Bash版本使用ASCII排序规则和strcmp(3); bash-4.1及更高版本使用当前语言环境的归类序列和strcoll(3)。compat40如果设置,当使用[[条件命令的<和>]时,bash将关于特定于语言环境的字符串比较的行为更改为版本4.0的行为运算符(请参阅上一项)以及中断命令列表的效果。compat41如果设置,bash,在posix模式下,将双引号参数扩展中的单引号视为特殊字符。单引号必须匹配(偶数数字)和单引号之间的字符被认为是引用的。这是posix模式到4.1版的行为。默认的bash行为仍然像以前的版本一样。direxpand如果设置,bash在执行文件名完成时将目录名称替换为单词扩展的结果。这改变了readline编辑的内容 - 缓冲区。如果未设置,bash会尝试保留用户键入的内容。dirspell如果设置,如果最初提供的目录名不存在,bash会在字完成期间尝试对目录名进行拼写更正。dotglob如果设置,bash包含以“。”开头的文件名。在路径名扩展的结果中。execfail如果设置,如果非交互式shell无法执行指定为exec builtin命令的参数的文件,则不会退出。一个交互式shell如果exec失败则不退出。expand_aliases如果设置,则如上所述在ALIASES下扩展别名。对于交互式shell,默认情况下启用此选项。extdebug如果设置,则启用供调试程序使用的行为:1. declare builtin的-F选项显示与作为参数提供的每个函数名对应的源文件名和行号。2.如果DEBUG陷阱运行的命令返回非零值,则跳过下一个命令而不执行。3.如果DEBUG陷阱运行的命令返回值2,并且shell正在子例程中执行(shell函数或shell脚本由这个。或源内置),模拟返回调用。4. BASH_ARGC和BASH_ARGV按照上面的描述进行更新。5.启用了函数跟踪:命令替换,shell函数和使用(命令)调用的子shell继承DEBUG和RETURN陷阱。6.启用了错误跟踪:命令替换,shell函数和使用(命令)调用的子shell继承ERR陷阱。extglob如果设置,则启用上面描述的路径名扩展下的扩展模式匹配功能。extquote如果设置,则$'string'和$“string”引用在双引号括起来的$ {parameter}扩展中执行。默认情况下启用此选项。failglob如果设置,则在路径名扩展期间无法匹配文件名的模式会导致扩展错误。force_fignore如果设置,由FIGNORE shell变量指定的后缀会导致在执行单词完成时忽略单词,即使忽略的单词是唯一的可能的完成。有关FIGNORE的说明,请参见上面的SHELL VARIABLES。默认情况下启用此选项。globstar如果设置,则路径名扩展上下文中使用的模式**将匹配所有文件以及零个或多个目录和子目录。如果遵循模式通过/,只有目录和子目录匹配。gnu_errfmt如果设置,则shell错误消息以标准GNU错误消息格式写入。histappend如果设置,则当shell退出时,历史列表将附加到由HISTFILE变量的值指定的文件中,而不是覆盖文件。histreedit如果设置,并且正在使用readline,则用户有机会重新编辑失败的历史记录替换。histverify如果设置,并且正在使用readline,则历史替换的结果不会立即传递给shell解析器。而是加载生成的行进入readline编辑缓冲区,允许进一步修改。hostcomplete如果设置,并且正在使用readline,当包含@的单词正在完成时,bash将尝试执行主机名完成(请参阅READ-下的完成上面的LINE)。默认情况下启用此功能。huponexit如果设置,当交互式登录shell退出时,bash将向所有作业发送SIGHUP。interactive_comments如果设置,则允许以#开头的单词使该单词和该行上的所有剩余字符在交互式shell中被忽略(请参阅上面的注释)。默认情况下启用此选项。lastpipe如果设置,并且作业控制未激活,则shell将运行当前shell环境中未在后台执行的管道的最后一个命令。lithist如果设置,并且启用了cmdhist选项,则多行命令将保存到具有嵌入换行符的历史记录中,而不是使用分号分隔符可能。login_shell如果它作为登录shell启动,shell将设置此选项(请参阅上面的INVOCATION)。该值可能不会更改。mailwarn如果设置,并且自上次检查以来已经访问了bash正在检查邮件的文件,则“已读取邮件文件中的邮件”是显示。no_empty_cmd_completion如果设置,并且正在使用readline,则当尝试在空行上完成时,bash将不会尝试搜索PATH以寻找可能的完成。nocaseglob如果设置,则bash在执行路径名扩展时以不区分大小写的方式匹配文件名(请参阅上面的路径名扩展)。nocasematch如果设置,bash在执行大小写或[[条件命令]时执行匹配时以不区分大小写的方式匹配模式。了nullglob如果设置,bash允许不匹配任何文件的模式(参见上面的Pathname Expansion)扩展为空字符串,而不是自己。progcomp如果置位,则启用可编程完成功能(参见上面的可编程完成)。默认情况下启用此选项。promptvars如果设置,则提升字符串在按照PROMPT-中所述进行扩展后进行参数扩展,命令替换,算术扩展和引用删除ING以上。默认情况下启用此选项。restricted_shell如果以限制模式启动,shell将设置此选项(请参阅下面的RESTRICTED SHELL)。该值可能不会更改。启动时不会重置执行文件,允许启动文件发现shell是否受限制。shift_verbose如果设置,当移位计数超过位置参数的数量时,移位内置打印错误消息。源路径如果设置,源(。)builtin使用PATH的值来查找包含作为参数提供的文件的目录。默认情况下启用此选项。xpg_echo如果设置,echo builtin默认会扩展反斜杠转义序列。暂停[-f]挂起此shell的执行,直到收到SIGCONT信号。当挂起的shell是后台进程时,可以通过fg命令重新启动它。对于更多信息,请阅读JOB CONTROL部分。suspend命令无法挂起登录shell。但是,如果指定了-f选项,则suspend命令可以挂起甚至登录shell。除非shell是登录shell且未提供-f,或者未启用作业控制,否则返回状态为0。测试expr[expr]根据条件表达式expr的计算,返回0或1的状态。每个运算符和操作数必须是单独的参数。表达式是在有条件的表达下提出的上述初选。test不接受任何选项,也不接受和忽略 - 作为表示的参数选项的结束。表达式可以使用以下运算符组合,按优先级的降序列出。评估取决于参数的数量; 见下文。当有五个或更多参数时,使用运算符优先级。!expr如果expr为false则为True。(expr)返回expr的值。这可以用于覆盖运算符的正常优先级。expr1 -a expr2如果expr1和expr2都为真,则为真。expr1 -o expr2如果expr1或expr2为真,则为真。测试和[根据参数的数量使用一组规则来评估条件表达式。0个参数表达式是假的。1个论点当且仅当参数不为null时,表达式才为真。2个论点如果第一个参数是!,当且仅当第二个参数为null时,表达式才为真。如果第一个参数是一元条件运算符之一在上面列出的条件表达式下,如果一元测试为真,则表达式为真。如果第一个参数不是有效的一元条件运算符,表达式是假的。3个论点以列出的顺序应用以下条件。如果第二个参数是上面在CONDITIONAL下列出的二元条件运算符之一EXPRESSIONS,表达式的结果是使用第一个和第三个参数作为操作数的二进制测试的结果。-a和-o运算符是 - 当有三个参数时,ered二元运算符。如果第一个参数是!,则该值是使用第二个和第三个参数的双参数测试的否定参数。如果第一个参数完全正确(并且第三个参数完全正确),则结果是第二个参数的单参数测试。否则,表达是错误的。4个论点如果第一个参数是!,则结果是否定由剩余参数组成的三参数表达式。否则,表达式是使用上面列出的规则根据优先级进行解析和评估。5个或更多参数使用上面列出的规则根据优先级解析和评估表达式。当与test或[,<和>运算符一起使用时,使用ASCII排序按字典顺序排序。times打印shell的累计用户和系统时间以及从shell运行的进程。返回状态为0。陷阱[-lp] [[arg] sigspec ...]当shell接收sigspec信号时,将读取并执行命令arg。如果arg不存在(并且只有一个sigspec)或 - ,则每个指定的信号都是重置为其原始处置(进入shell时的值)。如果arg是空字符串,则每个sigspec指定的信号将被忽略shell以及它调用的命令。如果arg不存在且已提供-p,则显示与每个sigspec关联的陷阱命令。如果没有争论 - 如果提供了-p,则trap将打印与每个信号关联的命令列表。-l选项使shell打印信号列表名称及其相应的数字。每个sigspec都是<signal.h>中定义的信号名称或信号编号。信号名称不区分大小写,SIG前缀是可选的。如果sigspec是EXIT(0),则命令arg在从shell退出时执行。如果sigspec是DEBUG,则在每个简单命令之前执行命令arg,mand,case命令,select命令,命令的每个算术,以及第一个命令在shell函数中执行之前(参见上面的SHELL GRAMMAR)。参考对于内置的shopt的extdebug选项的描述,详细说明了它对DEBUG陷阱的影响。如果sigspec是RETURN,则每次执行命令argshell函数或用它执行的脚本。或源内置完成执行。如果sigspec是ERR,则只要简单命令具有非零退出状态,就会执行命令arg,具体取决于以下条件。ERR陷阱不是exe-如果失败的命令是紧跟在while或until关键字之后的命令列表的一部分,则在if语句中执行部分测试,执行命令的一部分在&&或||中 列表,或者命令的返回值是否被反转!这些是errexit选项遵循的相同条件。进入shell时忽略的信号不能被捕获,重置或列出。未被忽略的被捕获信号将被重置为其原始值创建一个shell或subshell环境。如果任何sigspec无效,则返回状态为false; 否则陷阱返回true。输入[-aftpP]名称[名称...]如果没有选项,请指明在用作命令名称时如何解释每个名称。如果使用-t选项,则键入打印字符串,该字符串是别名,关键字之一,如果name是别名,shell保留字,函数,内置文件或磁盘文件,则函数,内置函数或文件。如果找不到名称,则不打印任何内容,并返回退出状态false。如果使用-p选项,则键入要么返回将名称指定为a时将执行的磁盘文件的名称命令名,如果``type -t name''不返回文件,则没有任何内容。-P选项强制对每个名称进行PATH搜索,即使``type -t name''不会返回文件。如果对命令进行哈希处理,则-p和-P将打印哈希值,而不一定是PATH中首先出现的文件。如果使用-a选项,则键入打印所有位置包含名为name的可执行文件。当且仅当不使用-p选项时,这包括别名和函数。散列命令表不是一致的使用-a时会感到沮丧 与内置命令一样,-f选项禁止shell函数查找。如果找到所有参数,则返回true,否则返回false找不到。ulimit [-HSTabcdefilmnpqrstuvx [limit]]在允许此类控制的系统上,控制shell可用资源及其启动的进程。-H和-S选项指定了为给定资源设置硬限制或软限制。一旦设置了非root用户,就无法增加硬限制; 软限制可以增加到值硬限制。如果既未指定-H也未指定-S,则设置软限制和硬限制。limit的值可以是为资源指定的单位中的数字或硬,软或无限的特殊值之一,分别代表当前硬限制,当前软限制和无限制。如果省略限制 - 除非给出-H选项,否则将打印资源软限制的当前值。指定多个资源时,限制名称和单位在值之前打印。其他选项解释如下:-a报告所有当前限制-b最大套接字缓冲区大小-c创建的核心文件的最大大小-d进程数据段的最大大小-e最大调度优先级(“nice”)-f shell及其子项写入的文件的最大大小-i待处理信号的最大数量-l可以锁定到内存的最大大小-m最大驻留集大小(许多系统不遵守此限制)-n打开文件描述符的最大数量(大多数系统不允许设置此值)-p 512字节块中的管道大小(可能未设置)-q POSIX消息队列中的最大字节数-r最大实时调度优先级-s最大堆栈大小-t以秒为单位的最大CPU时间量-u单个用户可用的最大进程数-v shell可用的最大虚拟内存量,在某些系统上可用于其子级-x文件锁的最大数量-T最大线程数如果给出limit,则它是指定资源的新值(-a选项仅显示)。如果没有给出选项,则假定为-f。值以1024字节为单位增量,除了-t,以秒为单位,-p,以512字节块为单位,-T,-b,-n和-u,它们是未缩放的值。返回状态为0除非提供了无效的选项或参数,否则在设置新限制时会发生错误。在POSIX模式下,512字节块用于`-c'和`-f'选项。umask [-p] [-S] [模式]用户文件创建掩码设置为mode。如果模式以数字开头,则将其解释为八进制数; 否则它被解释为符号模式掩码与chmod(1)接受的类似。如果省略mode,则打印掩码的当前值。-S选项使掩码以符号形式打印; 该默认输出是八进制数。如果提供了-p选项,并且省略了mode,则输出的形式可以重用为输入。如果返回状态为0模式已成功更改或未提供模式参数,否则为false。unalias [-a] [name ...]从已定义别名列表中删除每个名称。如果提供了-a,则删除所有别名定义。除非提供的名称不是a,否则返回值为true别名。未设置[-fv] [名称...]对于每个名称,删除相应的变量或函数。如果未提供任何选项,或者给出了-v选项,则每个名称都引用一个shell变量。只读变量可能不会被取消。如果指定了-f,则每个名称引用一个shell函数,并删除函数定义。每个未设置的变量或函数是从传递给后续命令的环境中删除。如果未设置COMP_WORDBREAKS,RANDOM,SECONDS,LINENO,HISTCMD,FUNCNAME,GROUPS或DIRSTACK中的任何一个,则它们失去他们的特殊属性,即使他们随后被重置。除非名称是只读的,否则退出状态为true。等[n ...]等待每个指定的进程并返回其终止状态。每个n可以是进程ID或作业规范; 如果给出了工作规范,那么所有流程都是如此工作的管道等待。如果未给出n,则等待所有当前活动的子进程,并且返回状态为零。如果n指定不存在进程或作业,返回状态为127.否则,返回状态是最后一个进程或作业等待的退出状态。

受限制的外壳
​ 如果使用名称rbash启动bash,或者在调用时提供-r选项,则shell将受到限制。受限制的shell用于更多地设置环境
​ 控制比标准外壳。它的行为与bash相同,但不允许或不执行以下操作:

   ·用cd更改目录·设置或取消设置SHELL,PATH,ENV或BASH_ENV的值·指定包含/的命令名·指定包含/作为参数的文件名。内置命令·指定包含斜杠的文件名作为hash builtin命令的-p选项的参数·在启动时从shell环境导入函数定义·在启动时从shell环境中解析SHELLOPTS的值·使用>,> |,<>,>&,&>和>>重定向运算符重定向输出·使用exec builtin命令用另一个命令替换shell·使用-bu和-d选项向enable builtin命令添加或删除内置命令·使用enable builtin命令启用禁用的shell内置命令·为命令builtin命令指定-p选项·使用设定+ r或设定+ o限制关闭限制模式。在读取任何启动文件后强制执行这些限制。当执行一个被发现是shell脚本的命令时(参见上面的命令执行),rbash会关闭生成的shell中执行脚本的任何限制。

也可以看看
​ Bash参考手册,Brian Fox和Chet Ramey
​ Gnu Readline图书馆,Brian Fox和Chet Ramey
​ Gnu历史图书馆,Brian Fox和Chet Ramey
​ 便携式操作系统接口(POSIX)第2部分:Shell和实用程序,IEEE
​ sh(1),ksh(1),csh(1)
​ emacs(1),vi(1)
​ readline的(3)

FILES
​ /斌/庆典
​ bash可执行文件
​ / etc / profile文件
​ 系统范围的初始化文件,为登录shell执行
​ /etc/bash.bash_logout
​ 系统范围的登录shell清理文件,在登录shell退出时执行
​ 在?/ .bash_profile
​ 为登录shell执行的个人初始化文件
​ 在?/ .bashrc
​ 单个per-interactive-shell启动文件
​ ?/ .bash_logout中
​ 单个登录shell清理文件,在登录shell退出时执行
​ ?/ .inputrc文件
​ 单独的readline初始化文件

作者
​ Brian Fox,自由软件基金会
​ bfox@gnu.org

   凯斯西储大学Chet Rameychet.ramey@case.edu

BUG报告
​ 如果你在bash中发现了一个bug,你应该报告它。但首先,你应该确保它确实是一个bug,它出现在最新版本的bash中。最新版本
​ sion总是可以从ftp://ftp.gnu.org/pub/gnu/bash/获得。

   一旦确定实际存在错误,请使用bashbug命令(来自源包)提交错误报告。如果您有修复,建议您发送邮件那也是!建议和“哲学”错误报告可以邮寄到bug-bash@gnu.org或发布到Usenet新闻组gnu.bash.bug。所有错误报告应包括:bash的版本号硬件和操作系统用于编译的编译器错误行为的描述一个简短的脚本或“食谱”,它可以解决这个问题有关本手册页的评论和错误报告应发送至chet.ramey@case.edu。

BUGS
​ 它太大太慢了。

   bash和传统版本的sh之间存在一些细微差别,主要是因为POSIX规范。别名在某些用途中令人困惑。Shell内置命令和函数不可停止/可重新启动。复合命令和命令序列形式`a; b; 尝试进程暂停时,不会正常处理c'。当一个进程停止时,shell立即ately执行序列中的下一个命令。将命令序列放在括号之间以将其强制转换为子shell就足够了,子shell可以作为a停止单元。可能尚未导出数组变量。一次可能只有一个活动的协处理器。

GNU Bash-4.2 2010年12月28日BASH(1)

转载于:https://blog.51cto.com/14127444/2330797

Linux中bash文档翻译相关推荐

  1. linux中bash的功能主要有,Linux系统中的Bash功能的介绍

    今天小编要跟大家分享的文章是关于Linux系统中的Bash功能的介绍.一个完整计算机的体系结构包括:硬件与软件,而软件又分为系统软件与应用软件,负责对硬件仅需管理与操作的是系统软件的内核部分,用户是无 ...

  2. Linux中bash: ls: 未找到命令… 相似命令是: ‘lz‘

    背景: 发现ls不能用了.ll.vi.vim都不能用了. 输入 ll命令 提示: bash: ls: 未找到命令-  相似命令是: 'lz' 原因: 环境变量PATH被修改了,是刚刚操作的修改影响了P ...

  3. linux中bash是什么命令,Bash简介 Bash是如何处理命令的

    什么是shell 简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具.实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了.打个比方,如果把计算机硬件比作一个人的躯 ...

  4. Linux中bash

    1 查看可以使用的shell 2 查看命令是内置还是外部 3 shell变量 3.1 变量的显示: 3.2 变量的设置 3.3 变量取消 3.4 环境变量 3.5 自定义变量转环境变量 3.6 变量从 ...

  5. Linux中bash详解

    一.什么是bash? bash是一个命令处理器, 运行在文本窗口中, 并能执行用户直接输入的命令. bash还能从文件中读取Linux命令, 称之为脚本. bash支持通配符, 管道, 命令替换, 条 ...

  6. 刨根问底:linux中bash shell中SIGHUP和SIGTERM信号的处理

    新人最容易发生的事情就是用ssh客户端(比如xshell)登录服务器之后,用&在后台执行了命令,第二天兴致勃勃去看任务,发现已经被kill了.一开始我学到的知识是,运行的后台命令都需要nohu ...

  7. linux中bash命令占用内存高,最牛B的 Linux Shell 命令 系列连载(三)

    1. 更友好的显示当前挂载的文件系统 mount | column -t 这条命令适用于任何文件系统,column 用于把输出结果进行列表格式化操作,这里最主要的目的是让大家熟悉一下 columnt ...

  8. linux中bash有错导致insmod,linux insmod error ko文件

    ko文件通常是Linux内核模块的文件. 与之相关的命令是 rmmod  内核模块名 # 卸载内核模块 insmod  内核模块名 # 加载内核模块 lsmod 查看 内核模块名,如果对应的计数为0, ...

  9. Linux中bash下三种引号的作用(双引号,单引号,反引号)

    1.``:命令替换 在输出一句话的时候,如果想中间加入命令输出结果,在反引号里面输入命令就可以做到,和$COMMAND是一样的. [root@localhost ~]# echo today is ` ...

最新文章

  1. Java反射以及应用
  2. Only call `sigmoid_cross_entropy_with_logits` with named arguments解决
  3. 美化浏览器的radio和checkbox样式
  4. Error: Could not access the Package Manager. Is the system running?
  5. 近两年火热的微服务springboot不同配置文件详细讲解
  6. 记录:JS异步解决方案的发展以及优缺点
  7. Xcode6.1 模拟器路径
  8. 读书节来当当薅羊毛!170买400/240买600
  9. leetcode459 C++ 32ms 重复子串构成的字符串
  10. 最流行的轻量级php框架,推荐20个最近很流行的优秀PHP框架
  11. 深度学习中的数据增强方法
  12. Echarts数据动态加载的实现样例
  13. 23种设计模式——最好理解的代理模式
  14. 农行网上银行交电费痛苦经历
  15. 大公司进不去,待在小公司,有前途吗?
  16. [置顶]封闭环境下的人性博弈——长文纪念诺兰的蝙蝠侠三部曲
  17. 山东理工大学ACM平台题答案 2561 九九乘法表
  18. Saber 能量激光描边光效插件
  19. 关于centos安装最新的firefox出现的问题GLib-GObject-CRITICAL **
  20. 机器学习笔记(二)矩阵和线性代数 例:用Python实现SVD分解进行图片压缩

热门文章

  1. CK3M自定义伺服算法(C语言)开发的简单流程
  2. 水库安全监测主要包含什么内容(大坝安全监测、水雨情自动测报)
  3. “System.NullReferenceException”类型的异常在 App_Web_2tjb2nqh.dll 中发生,但未在用户代码中进行处理(C#开发)
  4. 崔莺莺到宋楚瑜,张你怎么看待?
  5. PHP.ini 中文注解
  6. K8S探索之Service+Flannel本机及跨主机网络访问原理详解
  7. 冰与火之歌居然是在 DOS 系统上写出来的
  8. 耦合器 功分器 合路器
  9. CP2K入门教程分享
  10. 三周年之后 网易游戏和阴阳师都跌落神坛了?