Bash中文手册

NAME
   bash - GNU Bourne-Again SHell (GNU 命令解释程序 “Bourne二世”)

概述(SYNOPSIS)
   bash [options] [file]

版权所有(COPYRIGHT)
  Bash is Copyright © 1989-2002 by the Free Software Foundation, Inc.

描述(DESCRIPTION)
   Bash 是一个与 sh 兼容的命令解释程序,可以执行从标准输入或者文件中读取的命令。 Bash也整合了 KornC Shell (ksh 和 csh) 中的优秀特性。
   Bash 的目标是成为遵循 IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2,可移植操作系统规约: shell 和工具) 的实现。

选项(OPTIONS)
除了在 set 内建命令的文档中讲述的单字符选项 (option) 之外,bash在启动时还解释下列选项。

   -c string 
   			 如果有 -c 选项,那么命令将从 string 中读取。如果 string 后面有参数 (argu‐ment),它们将用于给位置参数   	
   			 (positional parameter,以 $0 起始) 赋值。
   -i       
   			 如果有 -i 选项,shell 将交互地执行 ( interactive )。
   -l        
   			 选项使得  bash  以类似登录  shell  (login  shell)  的方式启动 (参见下面的启动(INVOCATION) 章节)。
   -r        
   			 如果有   -r   选项,shell   成为受限的   (   restricted   )   (参见下面的受限的shell(RESTRICTED SHELL) 章
   			 节)。
   -s       
   			 如果有   -s  选项,或者如果选项处理完以后,没有参数剩余,那么命令将从标准输入读取。 这个选项允许在  
   			 启动一个交互 shell 时可以设置位置参数。
   -D       
   			 向标准输出打印一个以     $     为前导的,以双引号引用的字符串列表。这是在当前语言环境不是   C    或 
   			 POSIX    时,脚本中需要翻译的字符串。这个选项隐含了 -n 选项;不会执行命令。
   [-+]O [shopt_option]
             shopt_option   是一个   shopt   内建命令可接受的选项   (参见下面的  shell内建命令(SHELL  BUILTIN   
             COMMANDS)   章节)。   如果有   shopt_option,-O将设置那个选项的取值;   +O   取消它。  如果没有给出  
             shopt_option,shopt 将在标准输出上打印设为允许的选项的名称和值。 如果启动选项是 +O,输出将以一种
             可以重用为输入的格式显示。
   --        -- 
          标志选项的结束,禁止其余的选项处理。任何  --  之后的参数将作为文件名和参数对待。参数 - 与此等价。

   Bash
   		  也解释一些多字节的选项。在命令行中,这些选项必须置于需要被识别的单字符参数之前。

   --dump-po-strings
          等价于 -D,但是输出是 GNU gettext po (可移植对象) 文件格式
   --dump-strings
          等价于 -D
   --help 
   		  在标准输出显示用法信息并成功退出
   --init-file file
   --rcfile file
          如果    shell   是交互的,执行   file   中的命令,而不是标准的个人初始化文件 ~/.bashrc (参见下面的 启动
          (INVOCATION) 章节)

   --login
          等价于 -l

   --noediting
          如果 shell 是交互的,不使用 GNU readline 库来读命令行

   --noprofile
          不读取系统范围的启动文件  /etc/profile  或者任何个人初始化文件  ~/.bash_pro‐ file,  ~/.bash_login,  或  
          ~/.profile  。默认情况下,  bash 在作为登录 shell 启动时读取这些文件 (参见下面的 启动(INVOCATION) 章节)

   --norc 
     	  如果 shell 是交互的,不读取/执行个人初始化文件 ~/.bashrc 这个选项在 shell 以 sh 命令启动时是默认启用的

   --posix
          如果默认操作与  POSIX 1003.2 标准不同的话,改变 bash 的行为来符合标准 (posix mode)

   --restricted
          shell 成为受限的 (参见下面的 受限的shell(RESTRICTED SHELL) 章节)

   --rpm-requires
          产生一个为使脚本运行,需要的文件的列表。    这个选项包含了     -n     选项。它是为了避免进行编译期错误
          检测时的限制--  Backticks, [] tests,  还有 evals 不会被解释,一些依赖关系可能丢失

   --verbose
          等价于 -v

   --version
          在标准输出显示此 bash 的版本信息并成功退出。

参数(ARGUMENTS)
   如果选项处理之后仍有参数剩余,并且没有指定 -c-s 选项,第一个参数将假定为一个包含 shell 命令的文件的名字。 如果 bash 是以这种方式启动的, $0 将设置为这个文件的名字,位置参数将设置为剩余的其他参数。 Bash 从这个文件中读取并执行命令,然后退出。 Bash 的退出状态是脚本中执行的最后一个命令的退出状态。 如果没有执行命令,退出状态是0。尝试的步骤是先试图打开在当前目录中的这个文件,接下来, 如果没有找到,shell 将搜索脚本的 PATH 环境变量中的路径。

启动(INVOCATION)
  login shell 登录 shell,参数零的第一个字符是 - ,或者启动时指定了 --login 选项的shell。

   interactive    交互的    shell,是一个启动时没有指定非选项的参数,并且没有指定   -c
   选项,标准输出和标准输入都连接到了终端        (在         isatty(3)         中判定)
   的shell,或者启动时指定了    -i    选项的    shell。如果    bash   是交互的,   PS1
   环境变量将被设置,并且       $-        包含        i        ,允许一个        shell
   脚本或者一个启动文件来检测这一状态。

   下列段落描述了                                                                 bash
   如何执行它的启动文件。如果这些启动文件中的任一个存在但是不可读取,             bash
   将报告一个错误。文件名中的波浪号  (~,tilde)  将像  EXPANSION 章节中 Tilde Expansion
   段描述的那样展开。

   当 bash 是作为交互的登录 shell 启动的,或者是一个非交互的 shell 但是指定了  --login
   选项,       它首先读取并执行       /etc/profile       中的命令,只要那个文件存在。
   读取那个文件之后,它以如下的顺序查找 ~/.bash_profile, ~/.bash_login, 和 ~/.profile,
   从存在并且可读的第一个文件中读取并执行其中的命令。 --noprofile 选项可以用来在 shell
   启动时阻止它这样做。

   当一个登录 shell 退出时, bash 读取并执行文件 ~/.bash_logout 中的命令,只要它存在。

   当一个交互的   shell   但不是登录   shell   启动时,    bash    从文件    ~/.bashrc
   中读取并执行命令,只要它存在。可以用   --norc  选项来阻止它这样做。  --rcfile  file
   选项将强制 bash 读取并执行文件 file 中的命令,而不是 ~/.bashrc 中的。

   当  bash  以非交互的方式启动时,例如在运行一个   shell   脚本时,它在环境中查找变量
   BASH_ENV   ,如果它存在则将它的值展开,使用展开的值作为一个文件的名称,读取并执行。
   Bash 运作的过程就如同执行了下列命令:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   但是没有使用 PATH 变量的值来搜索那个文件名。

   如果       bash       以名称       sh       启动,它试图模仿       (mimic)       sh
   历史版本的启动过程,尽可能地相似,同时也遵循  POSIX  标准。  当作为交互式登录 shell
   启动时,或者是非交互但使用了   --login   选项    启动的时候,它首先尝试读取并执行文件
   /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 启动的.如果 bash  发现它是由
   rshd  启动的,它将读取并执行 ~/.bashrc 文件中的命令, 只要这个文件存在并且可读.如果以
   sh   命令启动,它不会这样做.    选项   --norc   可以用来阻止这种行为,选项   --rcfile
   用来强制读取另一个文件,但是通常 rshd 不会允许它们, 或者用它们来启动 shell.

   如果  shell  是以与真实用户(组)  id  不同的有效用户(组)  id  来启动的,  并且没有  -
   选项,那么它不会读取启动文件,  也不会从环境中继承  shell  函数.   环境变量中如果出现
   SHELLOPTS,   它将被忽略.有效用户   id  将设置为真实用户  id.   如果启动时给出了  -
   选项,那么启动时的行为是类似的, 但是不会重置有效用户 id.

定义(DEFINITIONS)
  下列定义在文档余下部分中通用.
  blank 空白
      一个空格或是 tab .
   word 词
      一个字符序列, shell 将它们视为一个结构单元. 也称为一个 token片段。
   name 名称
      一个只由字母,数字和下划线构成的词,并且以字符或下划线起始. 也称为一个 word identifier标识符.
   metacharacter 元字符
   一个字符, 如果不是引用的话, 将成为词的分隔符. 它是如下字符之一:
      | & ; ( ) < > space tab
   control operator 控制操作符
   一个 token(标识), 拥有控制功能. 它是如下符号之一:
      || & && ; ;; ( ) | <newline>

保留字(“RESERVED WORDS”)
   Reserved words(保留字) 是对 shell 有特殊意义的词. 下列词被识别为保留的,
如果不是引用, 并且不是一个简单命令的起始词 (参见下面的 shell语法(“SHELL GRAMMAR”)
), 也不是 case 或者 for 命令的第三个词:

   !  case   do  done elif else esac fi for function if in select then until while { } time [[ ]]

**

shell语法(“SHELL GRAMMAR”)

**
Simple Commands 简单命令
  simple command(简单命令) 是(可选的)一系列变量赋值, 紧接着是 blank(空格)分隔的词和重定向, 然后以一个 control operator 结束. 第一个词指明了要执行的命令, 它被作为第 0 个参数. 其余词被作为这个命令的参数.
   simple command 简单命令的返回值是它的退出状态, 或是 128+n, 如果命令被signal(信号)n 结束的话.

Pipelines 管道
  pipeline(管道) 是一个或多个命令的序列,用字符 | 分隔。管道的格式是这样:

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

   命令            command            的标准输出通过管道连接到命令            command2
   的标准输入。连接是在命令指定的任何重定向之前进行的(参见下面的 REDIRECTION 重定向)。

   如果保留字  !    作为管道前缀,管道的退出状态将是最后一个命令的退出状态的逻辑非值。
   否则,管道的退出状态就是最后一个命令的。                                      shell
   在返回退出状态值之前,等待管道中的所有命令返回。

   如果保留字 time  作为管道前缀,管道中止后将给出执行管道耗费的用户和系统时间。  选项
   -p       将使输出符合       POSIX       指定的格式。       环境变量      TIMEFORMAT
   可以设置为一个格式字符串,指定时间信息应当如何显示;参见下面的   Shell    Variables
   环境变量 中 TIMEFORMAT 的讲述。

   管道中的每个命令都作为单独的进程来执行(即,在一个子 shell 中启动)。

Lists 序列
   list(序列)是一个或多个管道,用操作符 ;, &, &&, 或 ⎪⎪ 分隔的序列, 并且可以选择用 ;, &, 或 <newline>新行符结束.

   这些序列操作符中, && 和 ⎪⎪ 优先级相同,其次是 ; 和 &, 它们的优先级是相同的。

   序列中可以有一个或多个新行符来分隔命令,而不是使用分号分隔。

   如果一个命令是由控制操作符 &  结束的,  shell  将在后台的子  shell  中执行这个命令。
   shell  不会等待命令执行结束,返回状态总是 0。以分号 ; 分隔的命令会被顺序执行;shell
   会等待每个命令依次结束。返回状态是最后执行的命令的返回状态。

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

          command1 && command2

   command2 只有在 command1 返回 0 时才被执行。

   一个 OR 序列的形式是

          command1 ⎪⎪ command2

   command2    只有在    command1    返回非    0     状态时才被执行。AND     和     OR
   序列的返回状态是序列中最后执行的命令的返回状态。

Compound Commands 复合命令
   compound command(复合命令) 是如下情况之一:

   (list) list       序列将在一个子       shell      中执行。变量赋值和影响      shell
          环境变量的内建命令在命令结束后不会再起作用。 返回值是序列的返回值。

   { list; }
          list   序列将在当前    shell    环境中执行。序列必须以一个新行符或分号结束。
          这种做法也称为  group  command(命令组)。返回值是序列的返回值。注意与元字符 (
          和              不同,        {        和        }        是        reserved
          words(保留字),必须出现在能够识别保留字的场合。 由于它们不会产生断词(cause a
          word break),它们和序列之间必须用空格分开。

   ((expression))
          表达式 expression 将被求值。求值规则在下面的  算术求值  (ARITHMETIC  EVALUA‐
          TION)       章节中描述。如果表达式的值非零,返回值就是       0;否则返回值是
          1。这种做法和 let "expression" 等价。

   [[ expression ]]
          返回 0 或 1,取决于条件表达式 expression 求值的情况。 表达式是由下面  CONDI‐
          TIONAL  EXPRESSIONS  条件表达式  章节中描述的原语(primaries) 组成。 [[ 和 ]]
          中的词不会进行词的拆分和路径的扩展处理;                             而tilde
          扩展,参数和变量扩展,算术扩展,命令替换,函数替换和引用的去除则都将进行。

          当使用  == 和 != 操作符时,操作符右边的字符串被认为是一个模式,根据下面 Pat‐
          tern    Matching(模式匹配)     章节中的规则进行匹配。     如果匹配则返回值是
          0,否则返回 1。模式的任何部分可以被引用,强制使它作为一个字符串而被匹配。

          表达式可以用下列操作符结合起来。根据优先级的降序列出如下:

          ( expression )
                 返回表达式 expression 的值。括号可以用来提升操作符的优先级。
          ! expression
                 返回真,如果表达式 expression 返回假。
          expression1 && expression2
                 返回真,如果表达式 expression1 和 expression2 都返回真。
          expression1 || expression2
                 返回真,如果表达式 expression1 或者 expression2 二者之一返回真。

          &&(与)   和   ||   操作符不会对表达式   expression2  求值,如果  expression1
          可以决定整个条件表达式的返回值的话。

   for name [ in word ] ; do list ; done
          in            之后的一系列词会被扩展,产生一个项目列表。变量            name
          被依次赋以这个列表中的每个元素,   序列   list  每次都被执行。如果  in  word
          被忽略,那么 for 命令遍历 已设置的位置参数(positional  parameter,参见下面的
          PARAMETERS           参数),           为每一个执行一次序列           list。
          返回值是最后一个命令的返回值。如果                                        in
          之后的词扩展的结果是空列表,就不会执行任何命令,返回值是 0。

   for (( expr1 ; expr2 ; expr3 )) ; do list ; done
          首先,算术表达式   expr1   被根据下面   算术求值   (ARITHMETIC   EVALUATION)
          中的规则进行求值。 然后算术表达式 expr2 被循环求值,直到它等于 0。每次 expr2
          结果非零时,序列        list        都被执行,        算术表达式       expr3
          被求值。如果任何表达式被忽略,将被视为执行结果是   1。   返回值是序列   list
          中被执行的最后一个命令的返回值;或者是 false,如果任何表达式非法的话。

   select name [ in word ] ; do list ; done
          in
          之后的一系列词会被扩展,产生一个项目列表。这个扩展后的词集合被输出到标准错误上
          ,每个前面
          加上一个数字。如果  in  word  被忽略,将输出位置参数  (参见下面的 PARAMETERS
          参数   章节)。   PS3    提示符将被显示出来,等待从标准输入得到一行输入。如果
          输入是一个数字且显示中有对应的词,那么变量  name 的值将设置为这个词。如果输
          入一个空行,那么词和提示符将再次显示出来。如果读入了 一个 EOF,命令就结束。
          任何其他值将设置变量 name 为空。读入的行保存为变量 REPLY. 序列  list  在每次
          选择之后都会执行,直到执行了一个   break   命令。   select 的退出状态是序列  list  
          中执行的最后一个命令的退出状态,如果没有执行命令就是 0。

   case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
          case    命令首先扩展    word,    然后依次试着用每个    pattern    来匹配它,
          使用与路径扩展相同的匹配规则(参见下面的    Pathname    Expansion    路径扩展
          章节)。如果找到一个匹配,相应的序列将被执行。找到一个匹配之后,不会再尝试其后的
          匹配。 如果没有模式可以匹配,返回值是 0。否则,返回序列中最后执行的命令的返回值。

   if list; then list; [ elif list; then list; ] ... [ else list; ] fi
          序列  if  list 被执行。如果退出状态是 0,then list 将被执行。否则,每个 elif
          将被一次执行,如果退出状态是  0,相应的   then   list   将被执行,命令结束。
          否则,else                   list                   将被执行,如果存在的话。
          退出状态是最后执行的命令的退出状态,或者是 0,如果所有条件都不满足。

   while list; do list; done
   until list; do list; done
          while  命令不断地执行序列  do  list,直到序列中最后一个命令返回  0。   until
          命令和     while     命令等价,除了对条件的测试恰好相反;序列     do    list
          执行直到序列中最后一个命令返回非零状态值。       while       和        until
          命令的退出状态是序列     do     list    中最后一个命令的退出状态,    或者是
          0,如果没有执行任何命令。

   [ function ] name () { list; }
          这样可以定义一个名为 name 的函数。函数体 body 是包含在 { 和 } 之间的命令序列
          list。      在指定将     name     作为一个命令运行的场合,这个序列将被执行。
          函数的退出状态是函数体最后执行的命令的退出状态(参见下面的   FUNCTIONS   函数
          章节)。

注释(COMMENTS)
   在非交互的 shell 中或者使用内建命令 shopt 启用了 interactive_comments 选项的交互的 shell 中,以 # 起始的词使得这个词和所有同一行上所有剩余的字符都被忽略。没有启用 interactive_comments 选项的交互式 shell 不允许出现注释。这个选项在交互式 shell 中是默认启用的 (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节)。

引用(QUOTING)
   引用 Quoting 用来去掉特定字符或词的特殊意义。引用可以用来禁止对特殊字符的处理, 阻止保留字被识别,还用来阻止参数的扩展。
  上面在 DEFINITIONS 定义 中列出的每个元字符 metacharacters 对于 shell 都有特殊意义。如果要表达它的本义,必须引用它。
  在使用命令行历史扩展功能时,history expansion 字符,通常是 !,必须被引用,才不会进行历史扩展。
  有三种引用机制:转义字符 (escape character), 单引号和双引号。
  一个未被引用的反斜杠 (\) 是转义字符 escape character。它保留其后下一个字符的字面意义,除非那是一个新行符。 如果 \ 和新行符成对出现,并且反斜杠自身没有被引用,那么 \<newline> 被视为续行标志 (意思是,它被从输入流中删除并忽略了)。
  将字符放在单引号之中,将保留引用中所有字符的字面意义。单引号不能包含在单引号引用之中,即使前面加上了反斜杠。
   将字符放在双引号中,同样保留所有字符的字面意义,例外的情况是 $, `, 和 \。 字符 $ 和 ` 在双引号中仍然具有特殊意义。反斜杠只有后面是下列字符时才有特殊意义: $, `, ", \,或 <newline>. 双引号可以包含在双引号引用中,但要在前面加上一个反斜杠。
   特殊的参数 * 和 @ 在双引号中有特殊意义(参见下面的 PARAMETERS 参数 章节)。
   形式为 $‘string’ 的词会被特殊处理。它被扩展为 string,其中的反斜杠转义字符 被替换为 ANSI C 标准中规定的字符。反斜杠转义序列,如果存在的话,将做如下转换:

          \a     alert (bell) 响铃
          \b     backspace 回退
          \e     an escape character 字符 Esc
          \f     form feed 进纸
          \n     new line 新行符
          \r     carriage return 回车
          \t     horizontal tab 水平跳格
          \v     vertical tab 竖直跳格
          \\     backslash 反斜杠
          \'     single quote 单引号
          \nnn   一个八比特字符,它的值是八进制值 nnn (一到三个数字)。
          \xHH   一个八比特字符,它的值是十六进制值 HH (一到两个十六进制数字)。
          \cx    一个 ctrl-x 字符

   扩展结果是单引号引用的,就好像 $ 符号不存在一样。

   双引号引用字符串前面加上一个  $   符号将使得这个字符串被根据当前语言环境   (locale)
   来翻译。       如果当前语言环境是       C       或者      POSIX,这个符号将被忽略。
   如果这个字符串被翻译并替换了,那么替换结果是双引号引用的。

参数(PARAMETERS)
  一个参数 parameter 是一个储存值的实体。它可以是一个名称 name, 一个数字或者是下面 Special Parameters 特殊参数 章节中列出的特殊字符之一。从 shell 的角度来看,一个变量variable 是一个由名称 name 代表的参数。一个变量有一个值 value 以及零个或多个属性attibutes。属性可以使用内建命令 declare 来设置(参见下面 shell 内建命令(SHELL BUILTIN COMMANDS) 章节中对 declare 的描述)。
   如果给一个参数赋值,那么它就被定义了。空字符串是有效的值。一旦一个变量被定义了,它只能用内建命令 unset 来取消(参见下面 shell 内建命令(SHELL BUILTIN COMMANDS) 章节).
   一个变量 variable 可以用这样的语句形式来赋值:

          name=[value]

   如果没有给出值 value, 变量就被赋为空字符串。所有值 values 都经过了波浪线扩展,参数和变量扩展,命令替换,算术扩展和引用的删除(参见下面的 EXPANSION 扩展 章节)。如果变量设置了 integer 整数 属性,那么值 value 将进行算术扩展,即使没有应用 $((…)) 扩展 (参见下面的 Arithmetic Expansion 算术扩展 章节)。 不会进行词的拆分,除非是下面 Special Parameters 特殊参数 中提到的 “$@”。 不会进行路径的扩展。赋值语句也出现在下列内建命令中,作为它们的参数: declare, typeset, export, readonly, 和 local

Positional Parameters 位置参数
  位置参数 positional parameter 是以一或多个数字代表的参数,除了 0。位置参数是在 shell 启动时,根据它的参数来赋值的, 也可以用内建命令 set 来重新赋值。位置参数不能用赋值语句来赋值。在一个 shell 函数被执行的时候,位置参数会被暂时地替换掉 (参见下面的 FUNCTIONS 函数 章节)。
   当位置参数由两个以上的数字构成时,它必须放在括号内 (参见下面的 EXPANSION 扩展 章节)。

Special Parameters 特殊参数
  aA.shell 对一些参数做特殊处理。这些参数只能被引用而不能被赋值。

   *      扩展为位置参数,从     1   开始。如果扩展发生在双引号中,它扩展为一个词,
    	  值是各个参数,以特殊变量   IFS 的第一个字符分隔。也就是说,"$*"   等价于 
    	   "$1c$2c...",这里  c  是变量  IFS   的第一个字符。如果没有设置 IFS, 那么
    	   参数将用空格分隔。 IFS
    	   
   @      扩展为位置参数,从                                                         1
          开始。如果扩展发生在双引号中,每个参数都将扩展为一个词。也就是说,      "$@"
          等价于   "$1"   "$2"   ...    如果位置参数不存在,"$@"   和   $@    扩展为空
          (即,它们被删除了)。
          
   #      扩展为位置参数的个数,以十进制表示。
   
   ?      扩展为最近执行的前台管道的状态。
   
   -      扩展为当前选项标志。标志是在启动时或以内建命令   set   指定的,或者是  shell
          自身设置的 (例如选项 -i )。
          
   $      扩展为 shell 的进程 ID。在一个 () 子 shell 中,它扩展为当前 shell 的 进程 ID
          而不是子 shell 的。
          
   !      扩展为最近一次执行的后台 (异步) 命令的进程号。
   
   0      扩展为  shell 或者 shell 脚本的名称。这个变量是在 shell 初始化时设置的。如果
          bash   是执行脚本文件时启动的,   $0    将设置为那个文件的名称。如果    bash
          启动时的参数包含    -c,  那么     $0 被设置为启动命令行被执行后的第一个参数,
          如果有的话。否则,它被设置为用来启动  bash 的文件名,就是参数 0。
          
   _      shell   启动时,设置为   shell   或参数中被执行的  shell  脚本的绝对路径名。
          然后,在扩展时扩展为上一个命令的最后一个参数。它也被设置为被执行的每个命令的文
          件全名并且被设置到这个命令执行的环境当中。当检查邮件时,这个参数保存着正在检查
          的邮件文件 的名称。

Shell Variables 变量

   shell 定义了下列变量:

   BASH   扩展为用来启动当前 bash 实例的文件全名。
   BASH_VERSINFO
          一个只读数组变量,成员保存着当前   bash 实例的版本信息。赋予数组元素的值是如下这些:
          BASH_VERSINFO[0]        主版本号 (release).
          BASH_VERSINFO[1]        次版本号 (version).
          BASH_VERSINFO[2]        补丁版本
          BASH_VERSINFO[3]        编译信息
          BASH_VERSINFO[4]        发布时的状态 (例如, beta1).
          BASH_VERSINFO[5]        MACHTYPE 平台类型

   BASH_VERSION
          扩展为一个字符串,描述了这个 bash.  实例的版本。

   COMP_CWORD
          ${COMP_WORDS}  的索引,指向当前光标位置所在的词。 这个变量只有在被可编程补全
          功能  (参见下面的  Programmable  Completion  章节)  调用的 shell 函数中才可用。

   COMP_LINE
          当前命令行。这个变量只有在被命令补全功能调用的                         shell
          函数和外部命令中才可用。

   COMP_POINT
          相对于当前命令起始处的当前光标位置。如果当前光标位置是当前命令的末端,
          它的值就和  ${#COMP_LINE}  相等。  这个变量只有在被命令补全功能调用的  shell
          函数和外部命令中才可用。

   COMP_WORDS
          一个数组变量   (参见下面的   Arrays(数组)一节),由当前命令行的各个单词构成。
          这个变量只有在被命令补全功能调用的 shell 函数中才可用。

   DIRSTACK
          一个数组变量,包含当前目录栈的内容。栈中的目录排列的顺序就是用内建命令  dirs
          显示时的顺序。对这个数组变量的成员赋值可以用来修改栈中已有的目录,但是要添加和
          删除目录就必须使用 内建命令   pushd  和  popd。  对它赋值不会改变当前目录。
          如果取消了  DIRSTACK 的定义,它就失去了它的特殊意义,即使后来重新定义它。

   EUID   扩展为当前用户的有效用户 ID。它在 shell 启动时设置。它是只读的。

   FUNCNAME
          当前执行的 shell 函数名。这个变量只有在执行一个 shell  函数时存在。向  FUNC‐
          NAME            赋值没有效果并且返回一个错误。如果取消了            FUNCNAME
          的定义,它就失去了特殊的意义,即使后来重新定义它。

   GROUPS 一个数组变量,包含当前用户所属的组的列表。向                          GROUPS
          赋值没有效果并且返回一个错误。如果取消了                              GROUPS
          的定义,它就失去了特殊的意义,即使后来重新定义它。

   HISTCMD
          当前命令的历史编号,或者历史列表中的索引。如果取消了                 HISTCMD
          的定义,它就失去了特殊的意义,即使后来重新定义它。

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

   HOSTTYPE
          自动设置为一个字符串,唯一地标识着正在运行                              bash
          的机器类型。默认值是系统相关的。

   LINENO 每次引用这个参数时,shell
          将它替换为一个指示在脚本或函数中当前行号的十进制数字(从       1      开始)。
          如果不是在脚本或函数中,替换得到的值不一定有意义。如果取消了          LINENO
          的定义,它就失去了特殊的意义,即使后来重新定义它。

   MACHTYPE
          自动设置为一个字符串,完整的描述了正在运行 bash 的系统类型,格式是标准的 GNU
          cpu-company-system 格式。默认值是系统相关的。

   OLDPWD 上一次命令 cd 设置的工作目录。

   OPTARG 内建命令 getopts 处理的最后一个选项参数值 (参见下面的  shell  内建命令(SHELL
          BUILTIN COMMANDS) 章节)。

   OPTIND 内建命令  getopts  将处理的下一个参数的索引 (参见下面的 shell 内建命令(SHELL
          BUILTIN COMMANDS) 章节)。

   OSTYPE 自动设置的一个字符串,描述了正在运行 bash 的操作系统。默认值是系统相关的。

   PIPESTATUS
          一个数组变量              (参见下面的              Arrays               数组
          章节),包含最近执行的前台管道中的进程(可能只包含一个命令)的退出状态。

   PPID   shell 的父进程的进程号。这个变量是只读的。

   PWD    由 cd 命令设置的当前工作目录。

   RANDOM 每次引用这个参数时,都会产生一个  0 到 32767 之间的随机整数。可以通过向 RAN‐
          DOM                赋值来初始化随机数序列。如果取消了                 RANDOM
          的定义,它就失去了特殊的意义,即使后来重新定义它。

   REPLY  变量的值将作为内建命令 read 的输入,如果命令没有参数的话。

   SECONDS
          每次引用这个参数时,返回      shell     自运行以来的秒数。如果向     SECONDS
          赋值,此后对它的引用将返回自赋值时起的秒数加上所赋予的值。如果取消   SECONDS
          的定义,它就失去了特殊的意义,即使后来重新定义它。

   SHELLOPTS
          一个冒号分隔的被允许的  shell  选项列表。列表中每个词都是内置命令  set 的 -o
          选项的有效参数。 SHELLOPTS 中出现的选项也是 set -o  显示为  on  的选项。如果
          bash
          启动时从环境中找到这个变量,那么在读取任何配置文件之前,列表中的每个选项都将被
          设置。这个变量是只读的。

   SHLVL  每次启动一个 bash 的实例时都会增加。

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

   下列变量被 shell 使用。有时 bash 会为变量赋默认值;这些情况在下面会标出。

   BASH_ENV
          如果                  bash                  在执行一个                 shell
          脚本时设定了这个变量,它的值将被解释为一个文件名,    包含着初始化     shell
          用到的命令,就像            ~/.bashrc            中一样。           BASH_ENV
          的值在被解释为一个文件名之前要经过参数扩展,命令替换和算术扩展。不会使用
          PATH 来查找结果文件名。
   CDPATH 命令    cd    的搜索路径。这是一个冒号分隔的目录列表,shell    从中查找   cd
          命令的目标目录。可以是这样: ".:~:/usr".
   COLUMNS
          用在内建命令 select 当中,用来判断输出选择列表时的终端宽度。  自动根据  SIG‐
          WINCH 信号来设置。
   COMPREPLY
          一个数组变量,bash  从中读取可能的命令补全。  它是由命令补全功能调用的 shell
          函数产生的。
   FCEDIT 内建命令 fc 默认的编辑器。
   FIGNORE
          一个冒号分隔的后缀名列表,在进行文件名补全时被忽略   (参见下面的    READLINE
          章节)。一个后缀满足其中之一的文件名被排除在匹配的文件名之外。可以是这样:
          ".o:~".
   GLOBIGNORE
          一个冒号分隔的模式列表,定义了路径名扩展时要忽略的文件名集合。
          如果一个文件名与路径扩展模式匹配,同时匹配                        GLOBIGNORE
          中的一个模式时,它被从匹配列表中删除。
   HISTCONTROL
          如果设置为 ignorespace, 以 space  开头的行将不会插入到历史列表中。如果设置为
          ignoredups,        匹配上一次历史记录的行将不会插入。设置为       ignoreboth
          会结合这两种选项。如果没有定义,或者设置为其他值,所有解释器读取的行都将存入历史列表,
          但还要经过       HISTIGNORE       处理。这个变量的作用可以被      HISTIGNORE
          替代。多行的组合命令的第二和其余行都不会被检测,不管             HISTCONTROL
          是什么,都会加入到历史中。
   HISTFILE
          保存命令历史的文件名  (参见下面的  HISTORY 历史 章节)。默认值是 ~/.bash_his‐
          tory。如果取消定义,在交互式 shell 退出时 命令历史将不会保存。
   HISTFILESIZE
          历史文件中包含的最大行数。当为这个变量赋值时,如果需要的话,历史文件将被截断
          来容纳不超过这个值的行。默认值是    500。历史文件在交互式    shell    退出时
          也会被截断到这个值。
   HISTIGNORE
          一个冒号分隔的模式列表,用来判断那个命令行应当保存在历史列表中。每个模式
          都定位于行首,必须匹配整行      (没有假定添加      `*')。在      HISTCONTROL
          指定的测试结束后,这里的每个模式都要被测试。除了平常的 shell  模式匹配字符,
          `&'           匹配上一个历史行。`&'           可以使用反斜杠来转义;反斜杠在
          尝试匹配之前将被删除。多行的组合命令的第二行以及后续行都不会被测试,不管
          HISTIGNORE 是什么,都将加入到历史中。
   HISTSIZE
          命令历史中保存的历史数量 (参见下面的 HISTORY 历史 章节)。默认值是 500。
   HOME   当前用户的个人目录;内建命令                                              cd
          的默认参数。在执行波浪线扩展时也用到这个变量。
   HOSTFILE
          包含一个格式和          /etc/hosts          相同的文件名,当           shell
          需要补全主机名时要读取它。shell                                   运行过程中
          可以改变可能的主机名补全列表;改变之后下一次需要主机名补全时            bash
          会将新文件的内容添加到旧列表中。如果定义了    HOSTFILE    但是没有赋值,bash
          将尝试读取   /etc/hosts   文件来获得可能的主机名补全列表。当取消    HOSTFILE
          的定义时,主机名列表将清空。
   IFS    内部字段分隔符 Internal Field Separator 用来在扩展之后进行分词,使用内部命令
          read 将行划分成词。默认值是 ``<space><tab><newline>''。
   IGNOREEOF
          控制交互式              shell               接受到唯一一个               EOF
          字符时的行为。如果有定义,值是需要在一行的开始连续输入  EOF 字符,直到可以使
          bash
          退出的字符个数。如果这个变量存在,但是值不是一个数字或者没有赋值,默认值是
          10。 如果变量没有定义, EOF 标志着输入的结束。
   INPUTRC
          readline  的启动配置文件,而不是默认的   ~/.inputrc   (参见下面的   READLINE
          章节)。
   LANG   用来决定没有特地用 LC_ 变量指定的语言环境项。
   LC_ALL 这个变量超越了 LANG 和所有其他指定语言环境项的 LC_ 变量。
   LC_COLLATE
          这个变量决定了为路径扩展的结果排序时的字母顺序,决定了范围表达式的行为,
          等价类,和路径扩展中的归并顺序以及模式匹配。
   LC_CTYPE
          这个变量决定了字符的解释和路径扩展以及模式匹配中字符类的行为。
   LC_MESSAGES
          这个变量决定了翻译以 $ 前导的双引号字符串时的语言环境。
   LC_NUMERIC
          这个变量决定了格式化数字时的语言环境分类。
   LINES  内建命令    select     用它来判断输出选择列表时的列宽度。在收到     SIGWINCH
          信号时自动设置。
   MAIL   如果这个参数设置为一个文件名,并且没有设置环境变量   MAILPATH   的话,  bash
          将在这个文件中通知用户有邮件到达。
   MAILCHECK
          指定        bash        检查邮件的频率是多少,以秒为单位。默认值是        60
          秒。需要检查邮件的时候,shell                   在显示提示符之前将进行检查。
          如果取消它的定义,或者设置为并非大于等于零的数值,shell 将禁止邮件检查。
   MAILPATH
          一个冒号分隔的文件名列表,从中检查邮件。当邮件到达某个特殊文件中时,输出的特定消息可以
          通过将文件名与消息以        `?'        分隔来指定。       在消息的文本中,$_
          扩展为当前邮件文件的文件名。例如:
          MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'
          Bash        为这个变量提供默认值,但是它使用的用户邮件文件的位置是系统相关的
          (例如,/var/mail/$USER)。
   OPTERR 如果设置为  1,  bash  显示内建命令 getopts 产生的错误消息 (参见下面的 shell
          内建命令(SHELL BUILTIN  COMMANDS)  章节)。每次  shell  启动时或者一个  shell
          脚本被执行时 OPTERR 被初始化为 1。
   PATH   搜索命令的路径。它是一个冒号分割的目录列表,shell  从中搜索命令  (参见下面的
          命令执行(COMMAND  EXECUTION)  段落)。默认的路径是系统相关的,是由安装   bash
          的系统管理员设置的。通常它的值是
          ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''。
   POSIXLY_CORRECT
          如果   bash    启动环境中有这个变量,它将在读取启动配置文件之前进入    posix
          mode,就好像提供了 --posix 启动参数一样。如果 shell 运行过程中设置了它,bash
          就启用 posix mode,就好像执行了 set -o posix 命令一样。
   PROMPT_COMMAND
          如果有定义,它的值将作为一个命令,每次显示主提示符之前都会执行。
   PS1    这个参数的值被扩展          (参见下面的           PROMPTING           提示符
          段落),用作主提示符字符串。默认值是 ``\s-\v\$ ''。
   PS2    这个参数的值同 PS1 一起被扩展,用作次提示符字符串。默认值是 ``> ''。
   PS3    这个参数的值被用作内建命令  select  的提示符  (参见上面的 SHELL GRAMMAR 语法
          章节)。
   PS4    这个参数的值同         PS1          一起被扩展,在执行跟踪中在          bash
          显示每个命令之前显示。需要的话,  PS4 的第一个字符会被复制多次,来指示 indi‐
          rection 的层数。默认值是 ``+ ''。
   TIMEFORMAT
          在前缀           time           保留字的管道中,这个参数的值用作格式字符串,
          指定计时信息如何显示。字符          %         引入的转义序列,被扩展为时间值
          或其他信息。转义序列和它们的含义如下所示;括号中是可选的成分。
          %%        一个字面上的 %。
          %[p][l]R  经历的时间,以秒计算。
          %[p][l]U  CPU 在用户模式下执行的秒数。
          %[p][l]S  CPU 在系统模式下执行的秒数。
          %P        CPU 使用率,算法是 (%U &#
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
译者序<br><br>毫无疑问,UNIX/Linux最重要的软件之一就是shell,目前最流行的shell被称为Bash(Bourne Again Shell),几乎所有的Linux和绝大部分的UNIX都可以使用Bash。作为系统与用户之间的交互接口,shell几乎是你在UNIX工作平台上最亲密的朋友,因此,学好shell,是学习Linux/UNIX的的开始,并且它会始终伴随你的工作学习。<br><br>shell是如此地重要,但令人惊奇的是,介绍shell的书没有真正令人满意的。所幸的是,我看到了这本被人称为abs的书,这本书介绍了bash大量的细节和广阔的范围,我遇到的绝大部分的技术问题--无论是我忘记的或是以前没有发现的--都可以在这本书里找到答案。这本使用大量的例子详细地介绍了Bash的语法,各种技巧,调试等等的技术,以循序渐进的学习方式,让你了解Bash的所有特性,在书中还有许多练习可以引导你思考,以得到更深入的知识。无论你是新手还是老手,或是使用其他语言的程序员,我能肯定你能在此书用受益。而本书除了介绍BASH的知识之外,也有许多有用的关于Linux/UNIX的知识和其他shell的介绍。<br><br>在看到本书的英文版后,我决定把它翻译出来,在Linuxsir论坛上结识了译者之一杨春敏共同翻译这本书,600多页的书是本大部头的书,我们花了6个月的业余时间才翻译完了。<br><br>关于版权的问题,英文版的作者Mendel Cooper对英文版的版权做了详细的约定,请参考:Appendix Q. Copyright。中文版版权由译者杨春敏和黄毅共同所有,在遵守英文版版权相应条款的条件下,欢迎在保留本书译者名字和版权说明以非盈利的方式自由发布此中文版,以盈利目的的所有行为必须联系英文作者和两位中文译者以获得许可。<br><br>本书得以成稿,我(黄毅)要多谢我的女朋友,本该给予她的时间我用来了翻译,多谢你的理解,你是一个很棒的女朋友!<br><br> 译者 杨春敏 黄毅<br> 2006.5.15<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值