Skip to main content

Linux - Unix命令:bash

【 Linux 】常用指令 教學 (可能 2025)

【 Linux 】常用指令 教學 (可能 2025)
Anonim

Linux命令 巴什 是一个SH兼容的命令语言解释器,执行从标准输入或文件读取的命令。巴什 还结合了Korn和C贝壳的有用功能(KSHCSH).

Bash选项

除了描述中记录的单字符shell选项内置命令,庆典 在调用时解释以下选项:

  • -C 串: 如果-C 选项存在,然后读取命令 串 。如果之后有争论 串 ,它们被分配到位置参数,从$0.
  • -一世: 如果-一世 选项存在,shell是 互动 .
  • -l: 使庆典 就好像它已被作为登录shell调用一样。
  • -r: 如果-r 选项存在,shell变为 限制。
  • -s: 如果-s 选项存在,或者如果在选项处理后没有参数,则从标准输入读取命令。此选项允许在调用交互式shell时设置位置参数。
  • -D: 所有双引号字符串的列表$ 打印在标准输出上。这些是当前语言环境不受语言翻译影响的字符串C 要么POSIX。这意味着 - ñ 选项;没有命令会被执行。
  • - + O shopt_option : shopt_option 是接受的shell选项之一禁用了javascript 内置。如果 shopt_option 存在,-O 设置该选项的值,和+ O 取消它。如果 shopt_option 未提供,接受的shell选项的名称和值禁用了javascript 打印在标准输出上。如果调用选项是 + O,输出以可重复用作输入的格式显示。
  • --: 一个-- 发出选项结束信号并禁用进一步的选项处理。之后的任何论据-- 被视为文件名和参数。一个论点- 相当于--.

巴什 还解释了许多多字符选项。在要识别的单字符选项之前,这些选项必须出现在命令行中:

  • 自卸宝串: 相当于-D,但输出是在GNU中 gettext的 PO (便携式对象)文件格式。
  • 自卸串: 相当于-D.
  • - 救命:在标准输出上显示用法消息并成功退出。
  • --init文件: 文件 和 --rcfile 文件 :执行命令 文件 而不是标准的个人初始化文件 在〜/ .bashrc 如果shell是交互式的。
  • - 登录: 相当于-l.
  • --noediting:不要使用GNU的ReadLine 库是在shell是交互式时读取命令行的。
  • --noprofile:不要读取系统范围的启动文件 / etc / profile文件 或任何个人初始化文件 在〜/ .bash_profile , 〜/ .bash_login文件 , 要么 〜/ .profile文件 。默认情况下,庆典 在将这些文件作为登录shell调用时读取这些文件。
  • --norc:不要读取和执行个人初始化文件 在〜/ .bashrc 如果shell是交互式的。如果调用shell,则默认情况下此选项处于启用状态SH.
  • --posix:改变行为庆典 默认操作与POSIX标准不同以匹配标准( posix模式 ).
  • --restricted:shell变得受限制。
  • --rpm-要求: 生成shell脚本运行所需的文件列表。这意味着'-n'并且受到与编译时错误检查检查相同的限制;不会解析反引号,测试和版本,因此可能会遗漏某些依赖项。
  • --verbose: 相当于-v.
  • - 版: 显示此实例的版本信息庆典 在标准输出上并成功退出。

参数

如果参数处理后参数仍然存在且两者都没有-C 也不是-s 提供了选项,第一个参数被假定为包含shell命令的文件的名称。如果 庆典 以这种方式调用,$0 设置为文件名,位置参数设置为其余参数。巴什 从该文件中读取并执行命令;然后退出。巴什退出状态是脚本中执行的最后一个命令的退出状态。如果没有执行任何命令,则退出状态为0.首先尝试在当前目录中打开文件,如果没有找到文件,则shell会搜索路径 对于脚本。

调用

一个 登录shell 是零的第一个字符是一个-或者一个人开始了 - 登录 选项。

一个 互动 shell是一个没有非选项参数而没有-C 标准输入和输出都连接到终端的选项,由。确定 isatty (3),或者一个人开始-一世 选项。PS1 设置和 $- 包括如果bash是交互式的,允许shell脚本或启动文件来测试这种状态。

以下段落描述了如何庆典 执行其启动文件。如果存在任何文件但无法读取,庆典 报告错误。 Tildes扩展为文件名,如Tilde Expansion中所述。

什么时候庆典 作为交互式登录shell或作为非交互式shell调用 - 登录 选项,它首先从文件中读取并执行命令 / etc / profile文件 ,如果该文件存在。在阅读该文件后,它会查找 在〜/ .bash_profile , 〜/ .bash_login文件 ,和 〜/ .profile文件 按此顺序,从第一个存在且可读的命令读取和执行命令。该--noprofile 启动shell以禁止此行为时可以使用选项。

登录shell退出时庆典 从文件中读取并执行命令 〜/ .bash_logout中 ,如果它存在。

当启动不是登录shell的交互式shell时,庆典 从中读取和执行命令 在〜/ .bashrc ,如果该文件存在。这可以通过使用来抑制--norc 选项。该--rcfile 文件 选项将强制执行庆典 从中读取和执行命令 文件 代替 在〜/ .bashrc .

什么时候庆典 以非交互方式启动 - 例如,运行shell脚本 - 它查找变量BASH_ENV 在环境中,如果它出现在那里,则展开其值,并使用展开的值作为要读取和执行的文件的名称。巴什 表现得好像执行了以下命令:

if -n“$ BASH_ENV”;然后 。 “$ BASH_ENV”;科幻

但价值路径 变量不用于搜索文件名。

如果庆典 用名称调用SH,它试图模仿历史版本的启动行为SH 尽可能接近,同时符合POSIX标准。当作为交互式登录shell或非交互式shell调用时 - 登录 选项,它首先尝试从中读取和执行命令 / etc / profile文件 和 〜/ .profile文件 , 以该顺序。该--noprofile 选项可用于抑制此行为。当作为具有名称的交互式shell调用时 SH, 庆典 寻找变量ENV,如果已定义,则展开其值,并使用展开的值作为要读取和执行的文件的名称。由于shell被调用为SH 不会尝试从任何其他启动文件中读取和执行命令--rcfile 选项无效。使用名称调用的非交互式shellSH 不会尝试读取任何其他启动文件。当被调用为SH, 庆典 进入 POSIX 读取启动文件后的模式。

什么时候庆典 开始了 POSIX 模式,与--posix 命令行选项,它遵循启动文件的POSIX标准。在这种模式下,交互式shell扩展了ENV 变量和命令从名称为扩展值的文件中读取和执行。没有读取其他启动文件。

巴什 通常,尝试确定远程shell守护程序何时运行它 RSHD 。如果 庆典 确定它正在运行 RSHD ,它从中读取和执行命令 在〜/ .bashrc ,如果该文件存在且可读。如果调用为,则不会执行此操作SH。该--norc 选项可用于抑制此行为,并且--rcfile 选项可用于强制读取另一个文件,但是 RSHD 通常不会使用这些选项调用shell或允许指定它们。

如果shell启动时有效用户(组)id不等于真实用户(组)id,那么-p 没有提供选项,没有读取启动文件,shell函数不是从环境继承的SHELLOPTS 变量(如果它出现在环境中)将被忽略,并且有效用户ID将设置为真实用户ID。如果-p 选项在调用时提供,启动行为相同,但不重置有效用户ID。

定义

本文档的其余部分使用以下定义:

  • 空白: 空格或制表符。
  • :shell将一系列字符视为一个单元。又称a 代币.
  • 名称: 一个 字 仅由字母数字字符和下划线组成,以字母字符或下划线开头。也称为识别码.
  • 元字符:一个字符,当不加引号时,分隔单词。以下之一:| &; ()<>空格标签
  • 控制操作员: 一个 代币 执行控制功能。它是以下符号之一: || & && ; ;; ( ) |

保留字

保留字 是对shell有特殊意义的单词。以下单词在未加引号时被识别为保留,并且是简单命令的第一个单词或a的第三个单词案件要么对于 命令:

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

Shell语法:简单命令

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

a的返回值 简单的命令 是退出状态,或128+ ñ 如果命令被信号终止 ñ .

管道

一个 管道 是由字符分隔的一个或多个命令的序列|。管道的格式是时间 -p ! 命令 | 命令2 … .

标准输出 命令 通过管道连接到标准输入 命令2 。此连接在命令指定的任何重定向之前执行。

如果是保留字! 在管道之前,该管道的退出状态是最后一个命令的退出状态的逻辑NOT。否则,管道的状态是最后一个命令的退出状态。 shell在返回值之前等待管道中的所有命令终止。

如果时间 保留字在管道之前,管道终止时会报告其执行所消耗的已用时间以及用户和系统时间。该-p 选项将输出格式更改为POSIX指定的格式。该时间格式 变量可以设置为格式字符串,该字符串指定应如何显示定时信息。

管道中的每个命令都作为单独的进程执行(例如,在子shell中)。

清单

一个 名单 是由一个运算符分隔的一个或多个管道的序列;, &, &&, 要么||,并可选择以其中一个终止;, &, 要么.

在这些列表运算符中,&&|| 具有相同的优先权,其次是;&, 具有相同的优先权。

一个或多个换行符的序列可能出现在a中 名单 而不是分号来分隔命令。

如果命令由控制操作员终止&,shell执行命令 背景 在子壳中。 shell不等待命令完成,返回状态为0.命令由a分隔; 按顺序执行; shell等待每个命令依次终止。返回状态是最后执行的命令的退出状态。

控制操作员&&|| 分别表示AND列表和OR列表。 AND列表具有表单

命令1 && 命令2

命令2 当且仅当如此, 命令1 返回退出状态为零。

OR列表具有表单

命令1 || 命令2

命令2 当且仅当 命令1 返回非零退出状态。 AND和OR列表的返回状态是列表中执行的最后一个命令的退出状态。

复合命令

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

(名单) : 名单 在子shell中执行。影响shell环境的变量赋值和内置命令在命令完成后不会保持有效。返回状态是退出状态 名单 .

{list; } : 名单 只是在当前的shell环境中执行。 名单 必须以换行符或分号结束。这被称为a 组命令 。返回状态是退出状态 名单 。请注意,与元字符不同(), {} 是 保留字 并且必须发生允许识别保留字的地方。由于它们不会导致断字,因此必须将它们分开 名单 通过空白。

((表达)) :The 表达 根据下面描述的规则进行评估 算术评估。 如果表达式的值不为零,则返回状态为0;否则返回状态为1.这完全等同于' 表达 '.

表达 :根据条件表达式的评估,返回0或1的状态 表达 。表达式由下面描述的原色组成 条件表达式。 不对单词之间的单词执行单词拆分和路径名扩展;执行波形扩展,参数和变量扩展,算术扩展,命令替换,进程替换和引用删除。

当。。。的时候==!= 使用运算符时,运算符右侧的字符串被视为模式,并根据下面描述的规则进行匹配模式匹配。如果字符串分别与模式匹配或不匹配,则返回值为0,否则返回1。可以引用模式的任何部分以强制它作为字符串匹配。

可以使用以下运算符组合表达式,按优先级递减顺序列出:

  • (表达式):返回值 表达 。这可以用于覆盖运算符的正常优先级。
  • ! expressio N: 如果是真的 表达 是假的。
  • 表达式 && 表达式2 : 两者都是真的 表达式 和 表达式2 是真的。
  • 表达式 || 表达式2 :如果是,则为真 表达式 要么 表达式2 是真的。

&&|| 运营商不评估 表达式2 如果是的价值 表达式 足以确定整个条件表达式的返回值。

  • 对于 名称 字 ; 名单 ; DONE:以下单词列表 扩展,生成项目列表。变量 名称 依次设置到此列表的每个元素,和 名单 每次执行。如果 字 被省略了对于 命令执行 名单 对于设置的每个位置参数一次。返回状态是执行的最后一个命令的退出状态。如果扩展项目如下 结果为空列表,不执行任何命令,返回状态为0。
  • 对于 (( 表达式1 ; 表达式2 ; 表达式3 )) ; 名单 ; DONE: 一,算术表达式 表达式1 根据下面描述的规则进行评估算术评估。 算术表达式 表达式2 然后重复评估,直到评估为零。每一次 表达式2 评估为非零值, 名单 执行和算术表达式 表达式3 被评估。如果省略任何表达式,则其行为就像计算结果为1.返回值是最后一个命令的退出状态 名单 执行时,如果任何表达式无效,则为false。
  • 选择 名称 字 ; 名单 ; DONE: 下面的单词列表 扩展,生成项目列表。扩展单词集打印在标准错误上,每个单词前面都有一个数字。如果 字 省略,打印位置参数。该 PS3 然后显示提示并从标准输入读取一行。如果该行包含一个对应于其中一个显示单词的数字,则其值为 名称 设置为该单词。如果该行为空,则再次显示单词和提示。如果读取EOF,则命令完成。任何其他值读取原因 名称 被设置为null。读取的行保存在变量中答复。该 名单 在每次选择之后执行,直到a打破 命令执行。退出状态选择 是执行的最后一个命令的退出状态 名单 ,如果没有执行任何命令,则为零。
  • 案件 ( 图案 | 图案 : 一个案件 命令首先扩展 字 ,并尝试将它与每个匹配 图案 反过来,使用与路径名扩展相同的匹配规则。找到匹配后,对应 名单 被执行。在第一场比赛之后,没有尝试后续比赛。如果没有模式匹配,则退出状态为零。否则,它是执行的最后一个命令的退出状态 名单 .
  • 如果 名单 ; 然后 列表; 和 ELIF 名单 ; 然后 名单 ; … 其他 名单 ; 科幻: 如果 名单 被执行。如果退出状态为零,则为然后 名单 被执行。否则,每个 ELIF 名单 依次执行,如果其退出状态为零,则对应然后 名单 执行并命令完成。否则,其他 名单 如果存在,则执行。退出状态是执行的最后一个命令的退出状态,如果没有条件测试为真则为零。
  • 名单 ; 名单 ; DONE 直到 名单 ; 名单 ; DONE:The 命令连续执行 名单 只要最后一个命令进入 名单 返回退出状态为零。该直到 命令与。相同 命令,但测试被否定;该 名单 只要最后一个命令执行就执行 名单 返回非零退出状态。退出状态直到 命令是最后一个的退出状态 名单 执行命令,如果没有执行则返回零。
  • 功能 名称 () { 名单 ; }:这定义了一个名为的函数 名称 。该 身体 功能是 名单 {和}之间的命令。无论何时执行此列表 名称 被指定为简单命令的名称。函数的退出状态是正文中执行的最后一个命令的退出状态。

评论

在非交互式shell或交互式shell中 interactive_comments 选项禁用了javascript 内置启用,一个词开头# 导致该单词和该行上的所有剩余字符被忽略。没有的交互式shellinteractive_comments 选项已启用不允许注释。该 interactive_comments 默认情况下,在交互式shell中打开选项。

引用

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

每一个 元字符 上面列出的定义 对shell有特殊意义,如果要表示自己,必须引用它。

当使用命令历史扩展设施时, 历史扩张 性格,通常!,必须引用以防止历史扩张。

有三种引用机制: 逃避性格 ,单引号和双引号。

没有引用的反斜杠() 是个 逃避性格 。除了之外,它保留了下一个字符的字面值 。如果一个 对出现,反斜杠本身不引用, 被视为行继续(即,它从输入流中删除并被有效忽略)。

用单引号括起字符可以保留引号中每个字符的字面值。单引号之间可能不会出现单引号,即使前面有反斜杠也是如此。

用双引号括起字符会保留引号内所有字符的字面值,但$, ',和。那些角色$' 在双引号中保留其特殊含义。只有在后跟下列其中一个字符时,反斜杠才会保留其特殊含义:$, ', ', , 要么。双引号可以在双引号内引用,前面加一个反斜杠。

特殊参数*@ 在双引号中有特殊含义。

形式的话$' 串 '特别对待。这个词扩展到了 串 ,使用ANSI C标准指定的反斜杠转义字符替换。反斜杠转义序列(如果存在)按如下方式解码:

  • 一个:警报(铃)
  • b:退格
  • 。 E:逃脱角色
  • F:换页
  • n: 新队
  • r:回车
  • t:水平标签
  • 符 v:垂直标签
  • \:反斜杠
  • ':单引号
  • NNN :八位字符,其值为八进制值 NNN (一到三位数)
  • X HH :八位字符,其值为十六进制值 HH (一个或两个十六进制数字)
  • C X :控制 - X 字符

扩展结果是单引号,好像美元符号不存在一样。

带有美元符号的双引号字符串($)将导致根据当前语言环境翻译字符串。如果当前的语言环境是C 要么POSIX,美元符号被忽略。如果翻译并替换字符串,则替换为双引号。

参数

一个 参数 是一个存储价值的实体。它可以是一个 名称 ,一个数字,或下面列出的一个特殊字符特殊参数。出于shell的目的,a 变量 是由a表示的参数 名称 。变量有一个 值 和零或更多 属性 。属性使用。分配宣布 内置命令。

如果已为其分配了值,则会设置该参数。空字符串是有效值。设置变量后,可以仅使用未设置 内置命令。

一个 变量 可以通过表格声明分配: 名称 = 值

如果 值 如果没有给出,则为变量赋予空字符串。所有 值 进行波浪扩展,参数和变量扩展,命令替换,算术扩展和报价删除。如果变量有它的话整数 属性集,然后 值 即使不使用$((…))扩展,也会进行算术扩展。除了以外,不执行单词拆分'$@' 如下所述特殊参数。不执行路径名扩展。赋值语句也可能作为参数出现宣布, 排字, 出口, 只读,和 本地 内置命令。

位置参数

一个 位置参数 是一个或多个数字表示的参数,而不是单个数字0.位置参数是在调用shell时从shell的参数赋值的,并且可以使用 内置命令。可能无法使用赋值语句将位置参数分配给它们。执行shell函数时,临时替换位置参数。

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

特殊参数

shell专门处理几个参数。这些参数只能被引用;不允许分配给他们。

  • *:从一个开始扩展到位置参数。当扩展发生在双引号内时,它会扩展为单个单词,每个参数的值由第一个字符分隔IFS 特殊变量。那是, ”$*“相当于”$1 C $2 C “,哪里 C 是价值的第一个字符IFS 变量。如果IFS 未设置,参数由空格分隔。如果IFS 为null,参数在没有插入分隔符的情况下连接。
  • @:从一个开始扩展到位置参数。当扩展发生在双引号内时,每个参数都会扩展为单独的单词。那是, ”$@“相当于”$1' '$2“……当没有位置参数时,”$@“和$@扩展为空(他们被删除)。
  • #:扩展为十进制的位置参数数。
  • ?:扩展到最近执行的前台管道的状态。
  • -:扩展为调用时指定的当前选项标志 内置命令或由shell本身设置的命令,如-一世 选项。
  • $:扩展为shell的进程ID。在()子shell中,它扩展为当前shell的进程ID,而不是子shell。
  • !:扩展为最近执行的后台(异步)命令的进程ID。
  • 0:扩展为shell或shell脚本的名称。这是在shell初始化时设置的。如果庆典 使用命令文件调用,$0 设置为该文件的名称。如果庆典 是从…开始的-C 选项,然后$0 如果存在,则将字符串设置为要执行的字符串之后的第一个参数。否则,将其设置为用于调用的文件名庆典,由参数零给出。
  • _:在shell启动时,设置为在参数列表中传递的正在执行的shell或shell脚本的绝对文件名。随后,在扩展后扩展到上一个命令的最后一个参数。还设置为执行并放置在导出到该命令的环境中的每个命令的完整文件名。检查邮件时,此参数保存当前正在检查的邮件文件的名称。

壳变量

以下变量由shell设置:

BASH:扩展为用于调用此实例的完整文件名庆典.

BASH_VERSINFO:一个只读数组变量,其成员包含此实例的版本信息 庆典。分配给数组成员的值如下:

  • BASH_VERSINFO 0:主要版本号( 发布 )
  • BASH_VERSINFO 1:次要版本号( 版 )
  • BASH_VERSINFO 2:补丁级别
  • BASH_VERSINFO 3:构建版本
  • BASH_VERSINFO 4:发布状态( β1, 例如)
  • BASH_VERSINFO 5:的价值MACHTYPE

BASH_VERSION:扩展为描述此实例的版本的字符串庆典.

COMP_CWORD:一个索引$ {} COMP_WORDS 包含当前光标位置的单词。此变量仅在可编程完成工具调用的shell函数中可用。

COMP_LINE:当前命令行。此变量仅在可编程完成工具调用的shell函数和外部命令中可用。

COMP_POINT:当前光标位置相对于当前命令开头的索引。如果当前光标位置在当前命令的末尾,则此变量的值等于$ {#COMP_LINE}。此变量仅在可编程完成工具调用的shell函数和外部命令中可用。

COMP_WORDS:由当前命令行中的各个单词组成的数组变量。此变量仅在可编程完成工具调用的shell函数中可用。

DIRSTACK:包含目录堆栈的当前内容的数组变量。目录按照它们显示的顺序出现在堆栈中迪尔斯 内置。分配给此数组变量的成员可用于修改堆栈中已有的目录,但是PUSHDPOPD 必须使用builtins来添加和删除目录。对此变量的赋值不会更改当前目录。如果DIRSTACK 没有设置,它失去了它的特殊属性,即使它随后被重置。

EUID:扩展为当前用户的有效用户ID,在shell启动时初始化。这个变量是只读的。

FUNCNAME:任何当前正在执行的shell函数的名称。此变量仅在执行shell函数时存在。分配给FUNCNAME 没有效果并返回错误状态。如果FUNCNAME 没有设置,它失去了它的特殊属性,即使它随后被重置。

:一个数组变量,包含当前用户所属的组列表。分配给 没有效果并返回错误状态。如果 没有设置,它失去了它的特殊属性,即使它随后被重置。

HISTCMD:当前命令的历史列表中的历史编号或索引。如果HISTCMD 没有设置,它失去了它的特殊属性,即使它随后被重置。

主机名:自动设置为当前主机的名称。

HOSTTYPE:自动设置为唯一描述其上的计算机类型的字符串庆典 正在执行。默认值取决于系统。

LINENO:每次引用此参数时,shell都会在脚本或函数中替换表示当前顺序行号(以1开头)的十进制数。当不在脚本或函数中时,替换值不保证有意义。如果LINENO 没有设置,它失去了它的特殊属性,即使它随后被重置。

MACHTYPE:自动设置为完全描述其上的系统类型的字符串庆典 正在标准GNU中执行 CPU-公司系统 格式。默认值取决于系统。

OLDPWD:由之前设置的上一个工作目录光盘 命令。

OPTARG:由。处理的最后一个选项参数的值getopts的 内置命令。

OPTIND:要处理的下一个参数的索引getopts的 内置命令。

OSTYPE:自动设置为描述操作系统的字符串庆典 正在执行。默认值取决于系统。

PIPESTATUS:一个数组变量,包含最近执行的前台管道中进程的退出状态值列表,该列表可能只包含一个命令。

PPID:shell父级的进程ID。这个变量是只读的。

PWD:由当前设置的当前工作目录光盘 命令。

随机:每次引用此参数时,都会生成0到32767之间的随机整数。可以通过赋值来初始化随机数序​​列 随机。如果随机 没有设置,它失去了它的特殊属性,即使它随后被重置。

答复:设置为读取的输入行 没有提供参数时的builtin命令。

SECONDS:每次引用此参数时,返回自从shell调用以来的秒数。如果分配了值SECONDS,后续引用时返回的值是自分配后的秒数加上分配的值。如果 SECONDS 没有设置,它失去了它的特殊属性,即使它随后被重置。

SHELLOPTS:以冒号分隔的已启用shell选项列表。列表中的每个单词都是有效的参数-o 选项 内置命令。出现的选项SHELLOPTS 那些被报道为 上 通过设置-o。如果此变量在环境中庆典 启动后,列表中的每个shell选项将在读取任何启动文件之前启用。这个变量是只读的。

SHLVL:每次实例增加一庆典 开始了。

UID:扩展为当前用户的用户标识,在shell启动时初始化。这个变量是只读的。

shell使用以下变量。在某些情况下,庆典 为变量分配默认值;注意到这些情况。

BASH_ENV:如果设置此参数庆典 正在执行shell脚本,其值被解释为包含初始化shell的命令的文件名,如 在〜/ .bashrc 。的价值 BASH_ENV 在被解释为文件名之前,它会受到参数扩展,命令替换和算术扩展的影响。路径 不用于搜索生成的文件名。

CDPATH:搜索路径光盘 命令。这是一个以冒号分隔的目录列表,其中shell查找由。指定的目标目录光盘 命令。示例值为“。:〜:/ usr”。

:由…使用选择 builtin命令用于在打印选择列表时确定终端宽度。收到SIGWINCH后自动设置。

COMPREPLY:一个数组变量庆典 读取由可编程完成工具调用的shell函数生成的可能的完成。

FCEDIT:默认编辑器FC 内置命令。

FIGNORE:执行文件名完成时要忽略的以冒号分隔的后缀列表。后缀与其中一个条目匹配的文件名FIGNORE 从匹配的文件名列表中排除。示例值为“.o:〜”。

GLOBIGNORE:以冒号分隔的模式列表,用于定义要由路径名扩展忽略的文件名集。如果路径名扩展模式匹配的文件名也匹配其中一个模式GLOBIGNORE,它将从匹配列表中删除。

HISTCONTROL:如果设置为值 ignorespace ,以a开头的行空间 字符未在历史列表中输入。如果设置为值 ignoredups ,不输入与上一个历史记录行匹配的行。价值 ignoreboth 结合了两个选项。如果未设置或设置为除上述值之外的任何其他值,则解​​析器读取的所有行都将保存在历史列表中,具体取决于HISTIGNORE。该变量的功能被取代 HISTIGNORE。不测试多行复合命令的第二行和后续行,并将其添加到历史记录中,而不管其值如何HISTCONTROL.

HISTFILE:保存命令历史记录的文件的名称。默认值为 〜/ .bash_history的 。如果未设置,则在交互式shell退出时不会保存命令历史记录。

HISTFILESIZE:历史记录文件中包含的最大行数。为此变量分配值时,如有必要,将截断历史文件以包含不超过该行数。默认值为500.在交互式shell退出时,在写入历史文件后,历史文件也会被截断为此大小。

HISTIGNORE:以冒号分隔的模式列表,用于确定应在历史列表中保存哪些命令行。每个模式都锚定在行的开头,并且必须匹配整行(没有隐含的'*'附后)。在指定的检查之后,对每个模式进行测试HISTCONTROL 适用。除了普通的shell模式匹配字符外,'&'匹配以前的历史记录行。 “&'可以使用反斜杠进行转义;在尝试匹配之前删除反斜杠。多行复合命令的第二行和后续行未经过测试,无论其值如何,都会添加到历史记录中HISTIGNORE.

HISTSIZE:命令历史记录中要记住的命令数。默认值为500。

:当前用户的主目录;的默认参数光盘 内置命令。执行波浪扩展时也使用此变量的值。

HOSTFILE:包含与其格式相同的文件名 / etc / hosts文件 当shell需要完成主机名时应该读取。 shell运行时可能会更改可能的主机名完成列表;更改值后,下次尝试完成主机名时,庆典 将新文件的内容添加到现有列表中。如果 HOSTFILE 设置,但没有价值,庆典 试图阅读 / etc / hosts文件 获取可能的主机名完成列表。什么时候HOSTFILE 如果未设置,则清除主机名列表。

IFS:The 内部字段分隔符 用于扩展后的单词拆分,并将行拆分为单词 内置命令。默认值为“''.

IGNOREEOF:控制交互式shell在收到时的操作EOF 字符作为唯一输入。如果设置,则该值为连续数EOF 必须在输入行之前键入的第一个字符的字符庆典 退出。如果变量存在但没有数值或没有值,则默认值为10.如果该变量不存在,EOF 表示shell输入的结束。

INPUTRC:文件名的ReadLine 启动文件,覆盖默认值 〜/ .inputrc文件 .

LANG:用于确定未使用以变量开头的具体选择的任何类别的区域设置类别LC_.

LC_ALL:此变量覆盖的值LANG 和任何其他LC_ 指定区域设置类别的变量。

LC_COLLATE:此变量确定排序路径名扩展结果时使用的归类顺序,并确定路径名扩展和模式匹配中范围表达式,等价类和整理顺序的行为。

LC_CTYPE:此变量确定字符的解释以及路径名扩展和模式匹配中字符类的行为。

LC_MESSAGES:此变量确定用于转换前缀为a的双引号字符串的语言环境$.

LC_NUMERIC:此变量确定用于数字格式的区域设置类别。

LINES:由…使用选择 builtin命令用于确定打印选择列表的列长度。收到SIGWINCH后自动设置。

邮件:如果此参数设置为文件名和MAILPATH 变量未设置,庆典通知用户邮件到达指定文件。

MAILCHECK:指定频率(以秒为单位)庆典 检查邮件。默认值为60秒。当需要检查邮件时,shell会在显示主要提示之前执行此操作。如果未设置此变量或将其设置为不是大于或等于零的数字的值,则shell将禁用邮件检查。

MAILPATH:要检查邮件的以冒号分隔的文件名列表。当邮件到达特定文件时要打印的消息可以通过用“?”分隔文件名和消息来指定。在消息文本中使用时,$_ 扩展为当前邮件文件的名称。例:

MAILPATH ='/ var / mail / bfox?“你有邮件”:〜/ shell-mail?“$ _有邮件!”'

巴什 为此变量提供默认值,但它使用的用户邮件文件的位置取决于系统(/ var / mail /$ USER).

OPTERR:如果设置为值1,庆典 显示由…生成的错误消息getopts的 内置命令。OPTERR 每次调用shell或执行shell脚本时,都会初始化为1。

路径:命令的搜索路径。它是以冒号分隔的目录列表,其中shell查找命令。默认路径取决于系统,由安装的管理员设置庆典。常见的值是“/ usr / gnu / bin:/ usr / local / bin:/ usr / ucb:/ bin:/ usr / bin:。”。

POSIXLY_CORRECT:如果此变量在环境中时庆典 开始,贝壳进入 posix模式 在读取启动文件之前,好像是--posix 已提供调用选项。如果在shell运行时设置,庆典 使 posix模式 好像是命令 设置-o posix 已被执行。

PROMPT_COMMAND:如果设置,则在发出每个主要提示之前将该值作为命令执行。

PS1:此参数的值已展开并用作主要提示字符串。默认值为“ S-符 v $''.

PS2:此参数的值扩展为PS1 并用作辅助提示字符串。默认为“> ''.

PS3:此参数的值用作提示选择 命令。

PS4:此参数的值扩展为PS1, 并在每个命令之前打印该值庆典 在执行跟踪期间显示。第一个字符PS4 必要时多次复制以指示多个间接级别。默认为“+ ''.

时间格式:此参数的值用作格式字符串,指定管道前缀的时序信息时间 应显示保留字。该 % character引入了一个转义为时间值或其他信息的转义序列。逃逸序列及其含义如下。大括号表示可选部分。

  • %%:字面意思%
  • % p l R:以秒为单位的经过时间
  • % p l U:在用户模式下花费的CPU秒数
  • % p l S:在系统模式下花费的CPU秒数
  • %P:CPU百分比,计算为(%U +%S)/%R

可选的 p 是指定数字的数字 精确 ,小数点后的小数位数。值0表示不输出小数点或小数。最多可以指定小数点后的三个位置;价值观 p 大于3会改为3.如果 p 未指定,使用值3。

可选的 指定表单的更长格式,包括分钟 MM 米 SS . FF 秒。的价值 p 确定是否包括该分数。

如果未设置此变量,庆典 就好像它有价值一样 $' nreal t%3lR nuser t%3lU nsys%3lS'。如果该值为null,则不显示任何计时信息。显示格式字符串时,将添加尾随换行符。

TMOUT:如果设置为大于零的值,TMOUT 被视为的默认超时内置。该选择 如果输入没有到达,则命令终止TMOUT 输入来自终端的秒数。在交互式shell中,该值被解释为在发出主提示后等待输入的秒数。巴什 如果输入未到达,则在等待该秒数后终止。

auto_resume:此变量控制shell如何与用户和作业控件交互。如果设置了此变量,则将没有重定向的单字简单命令视为恢复现有已停止作业的候选命令。没有歧义。如果以键入的字符串开头有多个作业,则选择最近访问的作业。该 名称 在这种情况下,停止的作业是用于启动它的命令行。如果设置为该值 精确 ,提供的字符串必须与已停止的作业的名称完全匹配;如果设置为 子 ,提供的字符串需要匹配已停止作业名称的子字符串。该 子 value提供类似于的功能%? 工作标识符。如果设置为任何其他值,则提供的字符串必须是已停止作业名称的前缀;这提供了类似的功能% 工作标识符。

histchars:控制历史记录扩展和标记化的两个或三个字符。第一个字是 历史扩张 字符,表示历史扩展开始的字符,通常是'!”。第二个角色是 快速替代 character,用作重新运行上一个命令的简写,在命令中用一个字符串替换另一个字符串。默认为'^”。可选的第三个字符是指示当作为单词的第一个字符找到时该行的其余部分是注释的字符,通常是'#”。历史注释字符导致跳过该行上剩余单词的历史替换。它不一定会导致shell解析器将该行的其余部分视为注释。

数组

巴什 提供一维数组变量。任何变量都可以用作数组;该 宣布 builtin将显式声明一个数组。数组的大小没有最大限制,也没有要求成员被连续索引或分配的要求。数组使用整数编制索引,并且从零开始。

如果使用语法分配任何变量,则会自动创建数组 名称 标 = 值 。该 标 被视为必须求值为大于或等于零的数字的算术表达式。要显式声明一个数组,请使用声明-a 名称 . 声明-a 名称 标 也被接受;该 标 被忽略了。可以使用。为数组变量指定属性宣布只读 内建命令。每个属性都适用于数组的所有成员。

分配数组以使用表单的复合赋值 名称 =(值 1 ……价值 ñ ),每个 值 是形式 标 = 串 。只要 串 是必须的。如果提供了可选的括号和下标,则将该索引分配给;否则,分配的元素的索引是语句分配给的最后一个索引加一。索引从零开始。这个语法也被接受了宣布 内置。可以将各个数组元素分配给使用 名称 标 = 值 句法。

可以使用$ {引用数组的任何元素 名称 标 }。需要大括号以避免与路径名扩展冲突。如果 标 是@ 要么*,这个词扩展到了所有成员 名称 。这些下标仅在单词出现在双引号内时有所不同。如果单词是双引号,$ { 名称 *}扩展为单个单词,每个数组成员的值由第一个字符分隔IFS 特殊变量,$ { 名称 @}扩展了每个元素 名称 一个单独的词。如果没有数组成员,$ { 名称 @}扩展为空。这类似于特殊参数的扩展*@. ${# 名称 标 }扩展到$ {的长度 名称 标 }。如果 标 是* 要么@,扩展是数组中元素的数量。引用不带下标的数组变量等同于引用元素零。

未设置 builtin用于销毁数组。取消设置 名称 标 销毁索引处的数组元素 标 . 取消设置 名称 ,哪里 名称 是一个数组,或未设置 名称 标 ,哪里 标 是* 要么@,删除整个数组。

宣布, 本地,和只读 内建人每人都接受一个-一个 用于指定数组的选项。该内置接受一个-一个 选项,用于将从标准输入读取的单词列表分配给数组。该宣布 builtins以允许将它们作为赋值重用的方式显示数组值。

扩张

在将命令行拆分为单词后,将在命令行上执行扩展。执行了七种扩展:大括号扩展,波浪扩展,参数和变量扩展,命令替换,算术扩展,单词拆分和路径名扩展。

扩展的顺序是:大括号扩展,波浪扩展,参数和变量扩展,算术扩展和命令替换(以从左到右的方式完成),单词拆分和路径名扩展。

在可以支持它的系统上,还有一个额外的扩展可用: 过程替代 .

只有大括号扩展,分词和路径名扩展才能改变扩展的单词数;其他扩展将单个单词扩展为单个单词。对此的唯一例外是“扩展”$@“和”${ 名称 @}'.

支持扩张

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

Brace扩展可以嵌套。每个展开的字符串的结果都没有排序;保持从左到右的顺序。例如,a{d,C,B}e扩展为“ade ace abe”。

在任何其他扩展之前执行大括号扩展,并且在结果中保留对其他扩展特殊的任何字符。这是严格的文字。巴什 不会对扩展的上下文或大括号之间的文本应用任何语法解释。

正确形成的支撑扩展必须包含不带引号的开括号和右括号以及至少一个不带引号的逗号。任何不正确形成的支撑扩展都保持不变。一个{ 要么, 可以用反斜杠引用,以防止它被视为括号表达式的一部分。为避免与参数扩展冲突,请使用字符串${ 不被视为有资格进行大括号扩展。

当要生成的字符串的公共前缀比上例中的更长时,此构造通常用作速记:

mkdir / usr / local / src / bash / {old,new,dist,bugs}

要么

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Brace扩展引入了与历史版本的轻微不兼容SH, 当它们作为单词的一部分出现并将它们保存在输出中时,它不会特别处理打开或关闭括号。巴什 从大括号扩展的结果中删除大括号。例如,输入的单词SH 如 文件{1,2} 在输出中看起来相同。输出相同的单词 file1 file2 经过扩张后庆典。如果严格兼容SH 希望,开始庆典 随着+ B选项或禁用大括号扩展+ B 选项命令。

Tilde扩张

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

如果tilde-prefix是'〜+',那么shell变量的值PWD 替换波浪号前缀。如果tilde-prefix是'〜 - ',那么shell变量的值OLDPWD,如果设置,则替换。如果波浪号前缀中波浪号后面的字符由数字组成 ñ ,可选地以'+'或' - '为前缀,tilde-prefix替换为目录堆栈中的相应元素,因为它将由迪尔斯 使用tilde-prefix作为参数调用builtin。如果波浪号前缀中波浪号后面的字符由不带前导'+'或' - '的数字组成,则假定为'+'。

如果登录名无效,或者代字号扩展失败,则该字不变。

在a之后立即检查每个变量赋值的未加引号的波浪号前缀: 要么=。在这些情况下,还执行波浪扩展。因此,可以在赋值中使用具有波浪号的文件名路径, MAILPATH,和CDPATH,shell分配扩展值。

参数扩展

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

使用大括号时,匹配的结束括号是第一个 } 没有用反斜杠或带引号的字符串转义,也不在嵌入式算术扩展,命令替换或参数扩展中转义。

$ {}参数 : 的价值 参数 被取代。大括号是必需的 参数 是一个具有多个数字的位置参数,或者何时 参数 后跟一个不被解释为其名称一部分的字符。

如果是第一个字符 参数 是一个惊叹号,引入了一个变量间接的层次。巴什 使用从其余部分形成的变量的值 参数 作为变量的名称;然后展开此变量,并将该值用于替换的其余部分,而不是值的值 参数 本身。这被称为 间接扩张 。这个例外就是扩展$ {! 字首 *} 如下面所描述的。

在下面的每个案例中, 字 受波形扩展,参数扩展,命令替换和算术扩展的影响。不执行子串扩展时 庆典 测试未设置或为null的参数;省略冒号导致仅针对未设置的参数进行测试。

  • $ {参数:-word} :使用默认值。如果 参数 未设置或无效,扩展 字 被取代。否则,值 参数 被取代。
  • $ {参数:=词} :分配默认值。如果 参数 未设置或无效,扩展 字 分配给 参数 。的价值 参数 然后被替换。不能以这种方式分配位置参数和特殊参数。
  • $ {参数:?单词} :如果为null或未设置,则显示错误。如果 参数 是null或未设置,扩展 字 (或者如果是这样的消息) 字 不存在)写入标准错误和shell,如果它不是交互式,则退出。否则,值 参数 被取代。
  • $ {参数:+单词} :使用备用值。如果 参数 是null或未设置,没有替代,否则扩展 字 被取代。
  • $ {参数:偏移} $ {参数:偏移量:长度} :子串扩展。扩展到最多 长度 的人物 参数 从指定的字符开始 抵消 。如果 长度 省略,扩展为子串 参数 从指定的字符开始 抵消 . 长度 和 抵消 是算术表达式。 长度 必须评估大于或等于零的数字。如果 抵消 求值为小于零的数字,该值用作值的末尾的偏移量 参数 。如果 参数 是@结果是 长度 位置参数从…开始 抵消 。如果 参数 是由@或*索引的数组名称,结果是 长度 以$ {开头的数组成员 参数 抵消 }。除非使用位置参数,否则子串索引是从零开始的,在这种情况下,索引从1开始。
  • $ {!前缀*} :扩展为名称以变量开头的变量的名称 字首 ,由第一个字符分隔IFS 特殊变量。
  • $ {#参数} :值的字符长度 参数 被取代。如果 参数 是* 要么@,替换值是位置参数的数量。如果 参数 是一个下载的数组名称* 要么@,替换值是数组中元素的数量。
  • $ {参数#字} $ {参数##字} :The 字 扩展为生成一个模式,就像路径名扩展一样。如果模式匹配值的开头 参数 ,那么扩张的结果就是扩大的价值 参数 用最短的匹配模式( #'案例)或最长的匹配模式( ##'案例)删除。如果 参数 是@ 要么*,模式去除操作依次应用于每个位置参数,并且扩展是结果列表。如果 参数 是一个下标的数组变量@ 要么 *,模式删除操作依次应用于数组的每个成员,扩展是结果列表。
  • $ {参数%字} $ {参数%%词} :The 字 扩展为生成一个模式,就像路径名扩展一样。如果模式匹配扩展值的尾部 参数 ,那么扩张的结果就是扩大的价值 参数 用最短的匹配模式( %'案例)或最长的匹配模式( %% 案例)删除。如果 参数 是@ 要么*,模式去除操作依次应用于每个位置参数,并且扩展是结果列表。如果 参数 是一个下标的数组变量@ 要么*,模式删除操作依次应用于数组的每个成员,扩展是结果列表。
  • $ {参数/模式/字符串} $ {参数//图案/串} :The 图案 扩展为生成一个模式,就像路径名扩展一样。 参数 是扩大和最长的匹配 图案 反对其价值被取代 串 。在第一种形式中,仅替换第一个匹配。第二种形式导致所有匹配 图案 被替换为 串 。如果 图案 开始于#,它必须在扩展值的开头匹配 参数 。如果 图案 开始于%,它必须在扩展值的末尾匹配 参数 。如果 串 是null,匹配 图案 被删除了/ 以下 图案 可以省略。如果 参数 是@ 要么*,替换操作依次应用于每个位置参数,并且扩展是结果列表。如果 参数 是一个下标的数组变量@ 要么*,替换操作依次应用于数组的每个成员,扩展是结果列表。

命令替换

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

$( 命令 ) 命令

巴什 通过执行来执行扩展 命令 并使用命令的标准输出替换命令替换,并删除任何尾随换行符。嵌入的换行不会被删除,但在分词时可能会被删除。命令替换$(猫 文件 )可以用等效但更快的代替$(< 文件 ).

当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后面跟着$, ', 要么。第一个不带反斜杠的反引号终止命令替换。使用$( 命令 )形式,括号之间的所有字符组成命令;没有人特别对待。

命令替换可以嵌套。要在使用反引号形式时进行嵌套,请使用反斜杠转义内部反引号。

如果替换出现在双引号内,则不会对结果执行单词拆分和路径名扩展。

算术扩展

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

$(( 表达 ))

该 表达 被视为在双引号内,但括号内的双引号未被特别处理。表达式中的所有标记都经历参数扩展,字符串扩展,命令替换和引用删除。算术替换可以嵌套。

评估是根据下面列出的规则进行的 算术评估。 如果 表达 是无效的,庆典 打印一条指示失败的消息,不会发生替换。

流程替代

流程替代 在支持命名管道的系统上受支持( 的FIFO ) 或者的/ dev / FD 命名打开文件的方法。它采取的形式<( 名单 ) 要么>( 名单 )。这个过程 名单 运行时其输入或输出连接到a FIFO 或者某个文件的/ dev / FD。作为扩展的结