components/ksh93/files/ksh.1.zh_CN.UTF-8
changeset 789 5f074ca23733
child 953 a0fb7976f6c7
equal deleted inserted replaced
788:ab1a623335b6 789:5f074ca23733
       
     1 '\" te
       
     2 .\" Copyright (c) 1982-2007 AT&T Knowledge Ventures
       
     3 .\" To view license terms, see http://www.opensource.org/licenses/cpl1.0.txt
       
     4 .\" Portions Copyright (c) 2009, 2011, Oracle and/or its affiliates. 保留所有权利。
       
     5 .TH ksh 1 "2011 年 7 月 9 日" "SunOS 5.11" "用户命令"
       
     6 .SH 名称
       
     7 ksh, ksh93, rksh \- Korn Shell,一种标准和受限的命令与编程语言
       
     8 .SH 用法概要
       
     9 .LP
       
    10 .nf
       
    11 \fBksh\fR [\fB\(+-abcefhikmnoprstuvxBCD\fR] [\fB-R\fR \fIfile\fR] [ \fB\(+-o\fR \fIoption\fR] ...
       
    12        [-] [\fIarg\fR ...]
       
    13 .fi
       
    14 
       
    15 .LP
       
    16 .nf
       
    17 \fBrksh\fR [\fB\(+-abcefhikmnoprstuvxBCD\fR] [\fB-R\fR \fIfile\fR] [\fB\(+-o\fR \fIoption\fR] ...
       
    18        [-] [\fIarg\fR ...]
       
    19 .fi
       
    20 
       
    21 .SH 描述
       
    22 .sp
       
    23 .LP
       
    24 \fBksh\fR 是一种执行从终端或文件读取的命令的命令与编程语言。\fBrksh\fR 是命令解释程序 \fBksh\fR 的受限版本。\fBrksh\fR 用于设置登录名和执行环境,其功能比标准 shell 的功能更受约束。
       
    25 .sp
       
    26 .LP
       
    27 有关此 shell 的参数的含义,请参见\fB调用\fR。
       
    28 .SS "定义"
       
    29 .sp
       
    30 .LP
       
    31 \fI元字符\fR定义为下列字符之一:
       
    32 .sp
       
    33 .in +2
       
    34 .nf
       
    35 ; & ( ) | < > NEWLINE SPACE TAB
       
    36 .fi
       
    37 .in -2
       
    38 .sp
       
    39 
       
    40 .sp
       
    41 .LP
       
    42 \fI空白\fR为\fB制表符\fR或\fB空格\fR。 
       
    43 .sp
       
    44 .LP
       
    45 \fI标识符\fR是以字母或下划线开头的字母、数字或下划线的序列。标识符用作\fI变量名称\fR的组成部分。 
       
    46 .sp
       
    47 .LP
       
    48 \fIvname\fR 是由句点 (\fB\&.\fR) 分隔的一个或多个标识符的序列,并且可选择性地在此序列前面添加一个句点 (\fB\&.\fR)。\fIvname\fR 用作函数和变量名称。 
       
    49 .sp
       
    50 .LP
       
    51 \fI单词\fR是当前语言环境定义的字符集合中的\fI字符\fR的序列(不包括不带引号的\fI元字符\fR)。
       
    52 .sp
       
    53 .LP
       
    54 \fI命令\fR是 shell 语言的语法中的字符序列。shell 读取各个命令,并直接执行或通过调用单独的实用程序执行所需操作。内置命令是由 shell 自身执行且未创建单独的进程的命令。某些命令用作内置命令的原因仅仅是出于方便,这些命令不在本手册页的论述范围内。本手册页记录了对 shell 环境造成负面影响的内置命令以及在执行路径搜索前发现的内置命令(请参见\fB执行\fR)。出于历史原因,其中的某些内置命令的行为不同于其他内置命令的行为,这些命令称为特殊内置命令。
       
    55 .SS "Commands(命令)"
       
    56 .sp
       
    57 .LP
       
    58 \fI简单命令\fR是一个变量赋值的列表(请参见\fB变量赋值\fR),或是一个可在其前面添加变量赋值列表的以\fI空白\fR分隔的单词序列。请参见本手册页的\fB环境\fR部分。
       
    59 .sp
       
    60 .LP
       
    61 第一个单词指定要执行的命令的名称。除非在此节中指定,否则其余单词将作为参数传递到调用的命令。命令名称作为参数 0 传递。请参见 \fBexec\fR(2)。简单命令的\fI值\fR即为其退出状态。如果简单命令正常终止,其值为 \fB0\fR-\fB255\fR。如果简单命令异常终止,其值为 \fB256+\fR\fIsignum\fR。与退出状态对应的信号的名称可通过 kill 内置实用程序的 \fB-l\fR 选项获取。 
       
    62 .sp
       
    63 .LP
       
    64 \fI管道\fR是由 \fB|\fR 分隔的一个或多个命令的序列。 每个命令(最后一个命令除外)的标准输出都通过 \fBpipe\fR(2) 连接到下一命令的标准输入。每个命令(可能除最后一个命令以外)都作为单独的进程运行。shell 等待最后一个命令终止。除非启用了 \fBpipefail\fR 选项,否则管道的退出状态即为最后一个命令的退出状态。每个管道前面都可以添加保留字 \fB!\fR。如果最后一个命令的退出状态为\fB非零\fR,此操作会导致管道的退出状态变为 \fB0\fR;如果最后一个命令的退出状态为 \fB0\fR,则会导致管道的退出状态变为 \fB1\fR。
       
    65 .sp
       
    66 .LP
       
    67 \fI列表\fR是由 \fB;、&、|&、&& 或 |\fR 分隔的一个或多个管道的序列,并且该序列可以选择性地以 \fB;、&\fR 或 \fB|&\fR 结束。在这五个符号中,\fB;、&\fR 和 \fB|& \fR的优先级相同,这些符号的优先级低于 \fB&&\fR 和 \fB||\fR 的优先级。同时,符号 \fB&&\fR 和 \fB||\fR 也具有相同的优先级。 
       
    68 .sp
       
    69 .LP
       
    70 分号 (\fB;\fR) 导致按顺序执行前面的管道。和符号 (\fB&\fR) 导致异步执行前面的管道,也即,shell \fI不\fR会等待该管道完成。符号 \fB |&\fR 导致异步执行前面的管道,并建立一个到父 shell 的双向管道。通过向命令应用重定向运算符 \fB<&\fR 和 \fB >&\fR 以及 \fBarg p\fR,并通过使用内置命令 \fBread\fR 和 \fBprint\fR 的 \fB-p\fR 选项,父 shell 可以写入和读取派生的管道的标准输入和输出。符号 \fB&&\fR (\fB||\fR) 导致仅当前面的管道返回零(\fB非零\fR)值时才会执行该符号后面的\fI列表\fR。\fI列表\fR中可显示一个或多个换行符(而非分号)来分隔命令。如果\fI列表\fR的第一个\fI管道\fR的第一个\fI项\fR是一个并非以重定向开头且未出现在 \fBwhile\fR、\fBuntil\fR 或 \fBif\fR \fI列表\fR中的简单命令,则可以在此项前面添加一个分号。除非使用 \fBset\fR 内置命令按照说明启用 \fBshowme\fR 选项,否则将忽略此分号。
       
    71 .sp
       
    72 .LP
       
    73 \fI命令\fR要么是一个简单命令,要么是以下列表中的命令之一。除非另行说明,否则命令返回的值即为该命令中执行的最后一个简单命令的值。
       
    74 .sp
       
    75 .ne 2
       
    76 .mk
       
    77 .na
       
    78 \fB\fBfor\fR \fIvname\fR \fB[ in\fR \fIword\fR \fB\&... ] ;do\fR \fIlist\fR \fB;done\fR\fR
       
    79 .ad
       
    80 .sp .6
       
    81 .RS 4n
       
    82 每次执行 \fBfor\fR 命令时,\fIvname\fR 都会设置为从 \fBin\fR \fIword\fR 列表获取的下一个 \fIword\fR。如果省略了 \fBin\fR \fIword ...\fR,\fBfor\fR 命令针对每个位置参数执行一次 \fBdo\fR \fIlist\fR,这些位置参数从 1 开始设置。当此列表中没有任何其他单词时,执行随即结束。请参见\fB参数扩展\fR。 
       
    83 .RE
       
    84 
       
    85 .sp
       
    86 .ne 2
       
    87 .mk
       
    88 .na
       
    89 \fB\fB(( [\fR\fIexpr1\fR\fB] ; [\fR\fIexpr2\fR] ; [\fIexpr3\fR\fB] )) ;do\fR \fIlist\fR \fB;done\fR\fR
       
    90 .ad
       
    91 .sp .6
       
    92 .RS 4n
       
    93 首先计算算术表达式 \fIexpr1\fR。反复计算算术表达式 \fIexpr2\fR,直到其计算结果为\fB零\fR为止;如果计算结果为\fB非零\fR,则会执行 \fIlist\fR,并计算算术表达式 \fIexpr3\fR。如果省略了任何表达式,该表达式按照计算结果为 \fB1\fR 的方式运行。请参见\fB算术计算\fR。
       
    94 .RE
       
    95 
       
    96 .sp
       
    97 .ne 2
       
    98 .mk
       
    99 .na
       
   100 \fB\fBselect\fR \fIvname\fR [ in \fIword\fR \fB\&... ] ;do\fR \fIlist\fR \fB;done\fR\fR
       
   101 .ad
       
   102 .sp .6
       
   103 .RS 4n
       
   104 \fBselect\fR 命令在标准错误(文件描述符 2)中输出一组 \fIword\fR,每个 word 前面均带有一个数字。如果省略了 \fBin\fR \fIword...\fR,则改用从 \fB1\fR 开始的位置参数。请参见\fB参数扩展\fR。输出 \fBPS3\fR 提示,并从标准输入中读取一个行。如果此行包含列出的某个 \fIword\fR 的数字,那么变量 \fIvname\fR 的值设置为与该数字对应的 \fIword\fR。如果此行为空,则会重新输出选择列表。否则,变量 \fIvname\fR 的值设置为 \fBnull\fR。从标准输入读取的行的内容保存在变量 \fBREPLY\fR 中。在遇到中断符或 \fBEOF\fR 之前,系统会针对每个选择执行 \fIlist\fR。如果通过执行 \fIlist\fR 将 \fBREPLY\fR 变量设置为 \fBnull\fR,则会输出选择列表,然后为下一选择显示 \fBPS3\fR 提示。
       
   105 .RE
       
   106 
       
   107 .sp
       
   108 .ne 2
       
   109 .mk
       
   110 .na
       
   111 \fB\fBcase\fR \fIword\fR \fBin [ [(]\fR \fIpattern\fR \fB[ |\fR \fIpattern\fR \fB] ... )\fR \fIlist\fR \fB;; ] ... esac\fR\fR
       
   112 .ad
       
   113 .sp .6
       
   114 .RS 4n
       
   115 \fBcase\fR 命令执行与 \fIword\fR 匹配的第一个 \fIpattern\fR 的关联 \fIlist\fR。模式的格式与用于生成文件名的格式相同。请参见\fB文件名生成\fR。 
       
   116 .sp
       
   117 \fB;;\fR 运算符导致终止执行 \fBcase\fR。如果使用 \fB;&\fR 取代 \fB;;\fR,则会执行下一个后续列表(如果有)。
       
   118 .RE
       
   119 
       
   120 .sp
       
   121 .ne 2
       
   122 .mk
       
   123 .na
       
   124 \fB\fBif\fR \fIlist\fR \fB;then\fR \fIlist\fR \fB[ ;elif\fR \fIlist\fR \fB;then\fR \fIlist\fR ] \fB\&... [ ;else\fR \fIlist\fR \fB ]\fR \fB;fi\fR\fR
       
   125 .ad
       
   126 .sp .6
       
   127 .RS 4n
       
   128 执行 \fBif\fR 后面的 \fIlist\fR,并且如果返回\fB零\fR退出状态,则执行第一个 \fBthen\fR 后面的 \fIlist\fR。否则执行 \fBelif\fR 后面的 \fIlist\fR,如果其值为\fB零\fR,则执行下一个 \fBthen\fR 后面的 \fIlist\fR。如果执行每个连续的 \fBelif\fR \fIlist\fR 失败,则会执行 \fBelse\fR \fIlist\fR。如果 \fBif\fR \fIlist\fR 具有\fB非零\fR退出状态,并且没有 \fBelse\fR \fIlist\fR,\fBif\fR 命令会返回\fB零\fR退出状态。
       
   129 .RE
       
   130 
       
   131 .sp
       
   132 .ne 2
       
   133 .mk
       
   134 .na
       
   135 \fB\fBwhile\fR \fIlist\fR \fB;do\fR \fIlist\fR \fB;done\fR\fR
       
   136 .ad
       
   137 .br
       
   138 .na
       
   139 \fBuntil \fIlist\fR \fB;do\fR \fIlist\fR \fB;done\fR\fR
       
   140 .ad
       
   141 .sp .6
       
   142 .RS 4n
       
   143 \fBwhile\fR 命令反复执行 while \fIlist\fR,并且如果此列表中的最后一个命令的退出状态为零,则会执行\fBdo\fR \fIlist\fR,否则循环将终止。如果未执行 \fBdo\fR \fIlist\fR 中的命令,\fBwhile\fR 命令将返回\fB零\fR退出状态,并且可使用 \fBuntil\fR 替换 \fBwhile\fR,以便对循环终止测试求反。
       
   144 .RE
       
   145 
       
   146 .sp
       
   147 .ne 2
       
   148 .mk
       
   149 .na
       
   150 \fB\fB((\fR\fI表达式\fR\fB))\fR\fR
       
   151 .ad
       
   152 .sp .6
       
   153 .RS 4n
       
   154 使用本手册页中介绍的算术计算规则计算 \fIexpression\fR。如果算术表达式的值为\fB非零\fR,退出状态为 \fB0\fR。否则,退出状态为 \fB1\fR。 
       
   155 .RE
       
   156 
       
   157 .sp
       
   158 .ne 2
       
   159 .mk
       
   160 .na
       
   161 \fB\fB(\fR\fIlist\fR\fB;)\fR\fR
       
   162 .ad
       
   163 .sp .6
       
   164 .RS 4n
       
   165 在单独的环境中执行 list。如果需要两个相邻的左括号以便进行嵌套,必须插入一个空格以免作为算术命令计算(如本部分所属)。
       
   166 .sp
       
   167 完全执行 \fIlist\fR。与元字符不同的是,\fB(\fR 和 \fB)\fR 以及 \fB{\fR 和 \fB}\fR 是\fI保留字\fR,它们必须出现在行开头或 \fB;\fR 之后才能识别。 
       
   168 .RE
       
   169 
       
   170 .sp
       
   171 .ne 2
       
   172 .mk
       
   173 .na
       
   174 \fB\fB[[\fR \fI表达式\fR \fB]]\fR\fR
       
   175 .ad
       
   176 .sp .6
       
   177 .RS 4n
       
   178 计算 \fIexpression\fR 并在 \fIexpression\fR 为 True 时返回\fB零\fR退出状态。有关 \fIexpression\fR 的说明,请参见\fB条件表达式\fR。
       
   179 .RE
       
   180 
       
   181 .sp
       
   182 .ne 2
       
   183 .mk
       
   184 .na
       
   185 \fB\fBfunction\fR \fIvarname\fR \fB{\fR \fIlist\fR \fB;}\fR\fR
       
   186 .ad
       
   187 .br
       
   188 .na
       
   189 \fB\fIvarname\fR \fB() {\fR \fIlist\fR \fB;}\fR\fR
       
   190 .ad
       
   191 .sp .6
       
   192 .RS 4n
       
   193 定义 \fIvarname\fR 引用的函数。其 \fIvarname\fR 包含 \fB\&.\fR 的函数称为规程函数,并且最后一个 \fB\&.\fR 前面的 \fIvarname\fR 部分必须引用现有变量。 
       
   194 .sp
       
   195 函数主体是 \fB{\fR 和 \fB}\fR 之间的命令的 \fIlist\fR。此外,使用函数 \fIvarname\fR 语法定义的函数还可用作 \fB\&.\fR 特殊内置命令的参数,以便获取使用 \fIvarname\fR\fB()\fR 语法定义它的等效行为。请参见\fB函数\fR。
       
   196 .RE
       
   197 
       
   198 .sp
       
   199 .ne 2
       
   200 .mk
       
   201 .na
       
   202 \fB\fBtime [\fR \fIpipeline\fR \fB]\fR\fR
       
   203 .ad
       
   204 .sp .6
       
   205 .RS 4n
       
   206 如果省略了 \fIpipeline\fR,则会在标准错误中输出当前 shell 和已完成的子进程的用户和系统时间。否则执行 \fIpipeline\fR,并在标准错误中输出已用时间以及用户和系统时间。\fBTIMEFORMAT\fR 变量可设置为格式字符串,用于指定时间信息的显示方式。有关 \fBTIMEFORMAT\fR 变量的说明,请参见 \fBShell 变量\fR。 
       
   207 .RE
       
   208 
       
   209 .sp
       
   210 .LP
       
   211 下列保留字仅作为命令的第一个字且未带引号时才能识别为保留字: 
       
   212 .br
       
   213 .in +2
       
   214 \fBcase\fR
       
   215 .in -2
       
   216 .br
       
   217 .in +2
       
   218 \fBdo\fR
       
   219 .in -2
       
   220 .br
       
   221 .in +2
       
   222 \fBdone\fR
       
   223 .in -2
       
   224 .br
       
   225 .in +2
       
   226 \fBelse\fR
       
   227 .in -2
       
   228 .br
       
   229 .in +2
       
   230 \fBelif\fR
       
   231 .in -2
       
   232 .br
       
   233 .in +2
       
   234 \fBesac\fR
       
   235 .in -2
       
   236 .br
       
   237 .in +2
       
   238 \fBfor\fR
       
   239 .in -2
       
   240 .br
       
   241 .in +2
       
   242 \fBfi\fR
       
   243 .in -2
       
   244 .br
       
   245 .in +2
       
   246 \fBfunction\fR
       
   247 .in -2
       
   248 .br
       
   249 .in +2
       
   250 \fBif\fR
       
   251 .in -2
       
   252 .br
       
   253 .in +2
       
   254 \fBselect\fR
       
   255 .in -2
       
   256 .br
       
   257 .in +2
       
   258 \fBthen\fR
       
   259 .in -2
       
   260 .br
       
   261 .in +2
       
   262 \fBtime\fR
       
   263 .in -2
       
   264 .br
       
   265 .in +2
       
   266 \fBuntil\fR
       
   267 .in -2
       
   268 .br
       
   269 .in +2
       
   270 \fBwhile\fR
       
   271 .in -2
       
   272 .br
       
   273 .in +2
       
   274 \fB{ }\fR
       
   275 .in -2
       
   276 .br
       
   277 .in +2
       
   278 \fB[[ ]]\fR
       
   279 .in -2
       
   280 .br
       
   281 .in +2
       
   282 \fB!\fR
       
   283 .in -2
       
   284 .SS "变量赋值"
       
   285 .sp
       
   286 .LP
       
   287 一个或多个变量赋值可启动简单命令,也可用作 \fBtypeset\fR、\fBexport\fR 或 \fBreadonly\fR 特殊内置命令的参数。\fI赋值\fR语法格式如下所示:
       
   288 .sp
       
   289 .ne 2
       
   290 .mk
       
   291 .na
       
   292 \fB\fIvarname\fR\fB=\fR\fIword\fR\fR
       
   293 .ad
       
   294 .br
       
   295 .na
       
   296 \fB\fIvarname\fR\fB[\fR\fIword\fR\fB]=\fR\fIword\fR\fR
       
   297 .ad
       
   298 .sp .6
       
   299 .RS 4n
       
   300 禁止在 \fIvarname\fR 和 \fB=\fR 之间或者 \fB=\fR 和 \fIword\fR 之间使用空格。 
       
   301 .RE
       
   302 
       
   303 .sp
       
   304 .ne 2
       
   305 .mk
       
   306 .na
       
   307 \fB\fIvarname\fR\fB=(\fR\fIassignlist\fR\fB)\fR\fR
       
   308 .ad
       
   309 .sp .6
       
   310 .RS 4n
       
   311 禁止在 \fIvarname\fR 和 \fB=\fR 之间使用空格。\fIassignlist\fR 可以为下列值之一:
       
   312 .sp
       
   313 .ne 2
       
   314 .mk
       
   315 .na
       
   316 \fB\fIword ...\fR\fR
       
   317 .ad
       
   318 .sp .6
       
   319 .RS 4n
       
   320 索引数组赋值。
       
   321 .RE
       
   322 
       
   323 .sp
       
   324 .ne 2
       
   325 .mk
       
   326 .na
       
   327 \fB\fB[\fR\fIword\fR\fB]=\fR\fIword ...\fR\fR
       
   328 .ad
       
   329 .sp .6
       
   330 .RS 4n
       
   331 关联数组赋值。如果带有 \fBtypeset\fR \fB-a\fR 前缀,则改为创建索引数组。
       
   332 .RE
       
   333 
       
   334 .sp
       
   335 .ne 2
       
   336 .mk
       
   337 .na
       
   338 \fB\fI赋值 ...\fR\fR
       
   339 .ad
       
   340 .sp .6
       
   341 .RS 4n
       
   342 复合变量赋值。这会创建一个带有子变量的复合变量 \fIvarname\fR,子变量的格式为 \fIvarname.name\fR,其中 \fIname\fR 是赋值的名称部分。\fIvarname\fR 的值包含所有赋值元素。同时,对 \fIvarname\fR 的子变量进行的其他赋值也会显示为 \fIvarname\fR 的值的一部分。如果未指定 \fIassignment\fR,\fIvarname\fR 则为允许定义后续子元素的复合变量。
       
   343 .RE
       
   344 
       
   345 .sp
       
   346 .ne 2
       
   347 .mk
       
   348 .na
       
   349 \fB\fBtypeset [\fR\fIoptions\fR] \fIassignment\fR \fB\&...\fR\fR
       
   350 .ad
       
   351 .sp .6
       
   352 .RS 4n
       
   353 嵌套变量赋值。通过用 \fB;\fR 分隔每个赋值,可以指定多个赋值。前一个值将在赋值之前取消设置。
       
   354 .RE
       
   355 
       
   356 此外,可以使用 \fB+=\fR 替换 \fB=\fR 以表示添加或附加到前一个值。如果将 \fB+=\fR 应用到算术类型,\fIword\fR 将作为算术表达式计算,并添加到当前值。如果应用到字符串变量,则会将 \fIword\fR 定义的值附加到当前值。对于复合赋值,不会取消设置前一个值,并且只要类型兼容,新值便会附加到当前值。 
       
   357 .RE
       
   358 
       
   359 .SS "Comments(注释)"
       
   360 .sp
       
   361 .LP
       
   362 以 \fB#\fR 开头的单词将导致注释掉或忽略该单词以及换行符之前的所有后续字符。
       
   363 .SS "别名设置"
       
   364 .sp
       
   365 .LP
       
   366 如果为各个命令的第一个单词定义了别名,则会使用别名文本替换此单词。别名由任意数目的字符组成,其中不包括元字符、引号字符、文件扩展字符、参数扩展字符、命令替换字符以及 \fB=\fR。替换字符串可包含任何有效的 shell 脚本,其中包括在\fB命令\fR部分中列出的元字符。除正在替换的所有文本以外,将对被替换文本中的各个命令的第一个单词的别名进行测试。如果别名值的最后一个字符为空白,还会检查此别名后的单词以便进行别名替换。 
       
   367 .sp
       
   368 .LP
       
   369 别名可用于重新定义内置命令,但不能用于重新定义在\fB命令\fR部分中列出的保留字。使用 alias 命令可以创建并列出别名,使用 \fBunalias\fR 命令可以删除别名。
       
   370 .sp
       
   371 .LP
       
   372 别名设置在读取脚本时执行,而不是在执行脚本时执行。为使别名生效,必须在读取引用该别名的命令之前执行 \fBalias\fR 定义命令。下列别名已编译到 shell 中,但是可以取消设置或重新定义这些别名:
       
   373 .sp
       
   374 .in +2
       
   375 .nf
       
   376 autoload='typeset -fu'
       
   377 command='command '
       
   378 fc=hist
       
   379 float='typeset -lE'
       
   380 functions='typeset -f'
       
   381 hash='alias -t --'
       
   382 history='hist -l'
       
   383 integer='typeset -li'
       
   384 nameref='typeset -n'
       
   385 nohup='nohup '
       
   386 r='hist -s'
       
   387 redirect='command exec'
       
   388 source='command .'
       
   389 stop='kill -s STOP'
       
   390 suspend='kill -s STOP $$'
       
   391 times='{ { time;} 2>&1;}'
       
   392 type='whence -v'
       
   393 .fi
       
   394 .in -2
       
   395 .sp
       
   396 
       
   397 .SS "波浪号替换"
       
   398 .sp
       
   399 .LP
       
   400 执行别名替换之后,系统将检查每个单词,查看此单词是否以不带引号的波浪号 (\fB~\fR) 开头。要进行波浪号替换,\fIword\fR 还会引用参数扩展的 \fIword\fR 部分。请参见\fB参数扩展\fR。 
       
   401 .sp
       
   402 .LP
       
   403 如果满足此条件,则会检查 \fB/\fR 前的单词,确定它是否与口令数据库中的用户名相匹配。如果找到匹配项,\fB~\fR 及匹配的登录名将替换为匹配用户的登录目录。如果未找到匹配项,原始文本将保留不变。单独的 \fB~\fR 或位于 \fB/\fR 之前的 ~ 替换为 \fB$HOME\fR。后跟有 \fB+\fR 或 \fB-\fR 的 \fB~\fR 分别替换为 \fB$PWD\fR 和 \fB$OLDPWD\fR 的值。
       
   404 .sp
       
   405 .LP
       
   406 此外,当赋值的值以 \fB~\fR 开头以及当 \fB~\fR 显示在冒号 (\fB:\fR) 之后时,扩展\fI变量赋值\fR时会尝试替换波浪号。同时,\fB~\fR 登录名还会以 \fB:\fR 结束。
       
   407 .SS "命令替换"
       
   408 .sp
       
   409 .LP
       
   410 前面带有美元符号 (\fB$\fR) 或一对重音符 (\fB``\fR) 的括号所包含的命令的标准输出可用作单词的一部分或整个单词。尾随的换行符将被删除。在第二种格式(已过时)中,在执行命令之前将处理引号中的字符串,以便替换为特殊引号字符。请参见\fB引用\fR。 
       
   411 .sp
       
   412 .LP
       
   413 命令替换 \fB$(cat file)\fR 可替换为速度更快的等效 \fB$(<file)\fR。命令替换 \fB$(\fR\fIn\fR\fB<#)\fR 扩展至文件描述符 \fIn\fR 的当前字节偏移。
       
   414 .SS "算术替换"
       
   415 .sp
       
   416 .LP
       
   417 前面带有美元符号的双括号所包含的算术表达式 (\fB$((\fR\fIarithmetic_expression\fR\fB))\fR) 替换为双括号中的算术表达式的值。
       
   418 .SS "进程替换"
       
   419 .sp
       
   420 .LP
       
   421 仅在支持使用 \fB/dev/fd\fR 目录命名打开文件的 UNIX 操作系统版本上提供进程替换。 
       
   422 .sp
       
   423 .LP
       
   424 \fB<(\fR\fIlist\fR\fB)\fR 或 \fB>(\fR\fIlist\fR\fB)\fR 格式的每个命令参数都会运行异步连接到 \fB/dev/fd\fR 中的某个文件的进程 \fIlist\fR。此文件的名称即为该命令的参数。如果选择采用 \fB>\fR 的格式,在此文件中写入会为 \fIlist\fR 提供输入。如果采用 \fB<\fR,作为参数传递的文件则包含 \fIlist\fR 进程的输出。 
       
   425 .sp
       
   426 .LP
       
   427 例如,
       
   428 .sp
       
   429 .in +2
       
   430 .nf
       
   431 paste <(cut -f1 \fIfile1\fR) <(cut -f3 \fIfile2\fR) | tee \e
       
   432      >(\fIprocess1\fR) >(\fIprocess2\fR)
       
   433 .fi
       
   434 .in -2
       
   435 .sp
       
   436 
       
   437 .sp
       
   438 .LP
       
   439 分别对文件 \fIfile1\fR 和 \fIfile2\fR 中的字段 1 和 3 执行 \fBcut\fR 操作,将结果 \fBpaste\fR 在一起,并将其发送到进程 \fIprocess1\fR 和 \fIprocess2\fR。该命令还会向标准输出显示此结果。作为参数传递给命令的文件为 UNIX \fBpipe\fR(2)。需要对此文件执行 \fBlseek\fR(2) 的程序无法运行。 
       
   440 .SS "参数扩展"
       
   441 .sp
       
   442 .LP
       
   443 参数是一个变量、一个或多个数字或 \fB*\fR、\fB@\fR、\fB#\fR、\fB?\fR、\fB-\fR、\fB$\fR 和 \fB!\fR 中的任意字符。变量通过 \fIvname\fR 表示。要创建其 \fIvname\fR 包含 \fB\&.\fR 的变量,必须已存在一个如下变量:其 \fBvname\fR 在最后一个 . 之前包括所有内容。变量具有一个值以及零个或多个属性。通过使用 \fBtypeset\fR 特殊内置命令,可以为变量分配值和属性。后文介绍了 shell 支持的属性以及 \fBtypeset\fR 特殊内置命令。导出的变量向环境传递值和属性。 
       
   444 .sp
       
   445 .LP
       
   446 此 shell 支持索引数组和关联数组。数组变量的元素由下标引用。索引数组的下标通过 \fB[\fR 和 \fB]\fR 之间的算术表达式表示(请参见\fB算术计算\fR)。使用 \fBset -A\fR \fIvname value ...\fR 为索引数组分配值。所有下标的值必须介于范围 \fB0\fR 至 \fB1,048,575\fR 之间。索引数组不需要声明。对带有有效下标的变量的任何引用都是合法的,并且会根据需要创建数组。 
       
   447 .sp
       
   448 .LP
       
   449 关联数组使用 \fBtypeset\fR 的 \fB-A\fR 选项创建。关联数组的下标通过包含在 \fB[\fR 和 \fB]\fR 之间的字符串表示。 
       
   450 .sp
       
   451 .LP
       
   452 引用不带下标的任何数组与引用带有下标 \fB0\fR 的数组等效。
       
   453 .sp
       
   454 .LP
       
   455 变量的值可通过以下命令分配:
       
   456 .sp
       
   457 .in +2
       
   458 .nf
       
   459 \fIvname\fR=\fIvalue\fR [\fIvname\fR=\fIvalue\fR] ...
       
   460 .fi
       
   461 .in -2
       
   462 .sp
       
   463 
       
   464 .sp
       
   465 .LP
       
   466
       
   467 .sp
       
   468 .in +2
       
   469 .nf
       
   470 \fIvname\fR[\fIsubscript\fR]=\fIvalue\fR [\fIvname\fR[\fIsubscript\fR]=\fIvalue\fR] ...
       
   471 .fi
       
   472 .in -2
       
   473 .sp
       
   474 
       
   475 .sp
       
   476 .LP
       
   477 禁止在 \fB=\fR 前后使用空格。\fInameref\fR 是一个引用其他变量的变量。\fInameref\fR 使用 \fBtypeset\fR 的 \fB-n\fR 属性创建。执行 \fBtypeset\fR 命令时的变量值成为使用 \fInameref\fR 变量时引用的变量。\fInameref\fR 的名称不能包含点 (\fI\&.\fR)。如果变量或函数名称包含 \fB\&.\fR,并且第一个 \fB\&.\fR 前的名称部分与 \fInameref\fR 的名称匹配,通过将 \fInameref\fR 部分替换为 \fInameref\fR 引用的变量名称可以获取引用的变量。如果将 \fInameref\fR 用作 \fBfor\fR 循环的索引,则会为列表中的每一项建立一个名称引用。\fInameref\fR 提供了一种在函数中引用变量的方便方法,该变量的名称作为参数传递给函数。例如,如果变量名称作为第一个参数传递给函数,该函数中的命令
       
   478 .sp
       
   479 .in +2
       
   480 .nf
       
   481  typeset -n var=$1
       
   482 .fi
       
   483 .in -2
       
   484 .sp
       
   485 
       
   486 .sp
       
   487 .LP
       
   488 导致将 \fIvar\fR 的引用和赋值作为其名称已传递给函数的变量的引用和赋值。如果为 \fIvname\fR 设置了浮点值属性 \fB-E\fR 或 \fB-F\fR 或者整数属性 \fB-i\fR,该 \fIvalue\fR 则受算术计算的约束,如本手册页所述。位置参数是通过数字表示的参数,可使用 \fBset\fR 特殊内置命令向这些参数分配值。当调用 shell 时,参数 \fB$0\fR 从参数零开始设置。字符 \fB$\fR 用于引入可替换的参数。
       
   489 .sp
       
   490 .ne 2
       
   491 .mk
       
   492 .na
       
   493 \fB\fB${\fR\fIparameter\fR\fB}\fR\fR
       
   494 .ad
       
   495 .sp .6
       
   496 .RS 4n
       
   497 此 shell 读取从 \fB${\fR 到匹配的 \fB}\fR 之间的所有字符,并将其作为同一个单词的一部分,即使此部分包含花括号或元字符。该参数的值(如果有)将被替换。当 \fIparameter\fR 后跟有不会作为其名称的一部分解释的字母、数字或下划线时,当变量名称包含 \fB\&.\fR 时或者当变量带有下标时,都需要使用花括号。如果 \fIparameter\fR 是一个或多个数字,该参数则为位置参数。包含多个数字的位置参数必须包含在花括号中。如果 \fIparameter\fR 是 \fB*\fR 或 \fB@\fR,则会替换从 \fB$1\fR 开始的所有位置参数,并使用字段分隔符分隔这些参数。如果使用带有下标 \fB*\fR 或 \fB@\fR 的数组 \fIvname\fR,则会替换每个元素的值,并使用 \fBIFS\fR 的值的第一个字符分隔这些值。
       
   498 .RE
       
   499 
       
   500 .sp
       
   501 .ne 2
       
   502 .mk
       
   503 .na
       
   504 \fB\fB${#\fR\fIparameter\fR\fB}\fR\fR
       
   505 .ad
       
   506 .sp .6
       
   507 .RS 4n
       
   508 如果 \fIparameter\fR 为 \fB*\fR 或 \fB@\fR,则会替换位置参数的数字。否则替换 \fIparameter\fR 的值的长度。
       
   509 .RE
       
   510 
       
   511 .sp
       
   512 .ne 2
       
   513 .mk
       
   514 .na
       
   515 \fB\fB${#\fR\fIvname\fR\fB[*]}\fR\fR
       
   516 .ad
       
   517 .br
       
   518 .na
       
   519 \fB\fB${#\fR\fIvname\fR\fB[@]}\fR\fR
       
   520 .ad
       
   521 .sp .6
       
   522 .RS 4n
       
   523 替换数组 \fIvname\fR 中的元素数目。
       
   524 .RE
       
   525 
       
   526 .sp
       
   527 .ne 2
       
   528 .mk
       
   529 .na
       
   530 \fB\fB${!\fR\fIvname\fR\fB}\fR\fR
       
   531 .ad
       
   532 .sp .6
       
   533 .RS 4n
       
   534 扩展至 \fIvname\fR 引用的变量的名称。除非 \fIvname\fR 为名称引用,否则为 \fIvname\fR。
       
   535 .RE
       
   536 
       
   537 .sp
       
   538 .ne 2
       
   539 .mk
       
   540 .na
       
   541 \fB\fB${!\fR\fIvname\fR\fB[\fR\fIsubscript\fR\fB]}\fR\fR
       
   542 .ad
       
   543 .sp .6
       
   544 .RS 4n
       
   545 除非 \fIsubscript\fR 为 \fB*\fR 或 \fB@\fR,否则扩展至下标的名称。当 \fIsubscript\fR 为 \fB*\fR 时,生成 \fIvname\fR 的数组下标的列表。对于不是数组的变量,如果设置了该变量,则值为 \fB0\fR。否则为 \fBnull\fR。当 \fIsubscript\fR 为 \fB@\fR 时,该命令与 \fB$ {\fR\fIvname\fR\fB[\fR\fI *\fR\fB]}\fR 相同,除非用于双引号中,此时,每个数组下标将生成一个单独的参数。
       
   546 .RE
       
   547 
       
   548 .sp
       
   549 .ne 2
       
   550 .mk
       
   551 .na
       
   552 \fB\fB${!\fR\fIprefix\fR\fB*}\fR\fR
       
   553 .ad
       
   554 .sp .6
       
   555 .RS 4n
       
   556 扩展至其名称以 \fIprefix\fR 开头的变量的名称。
       
   557 .RE
       
   558 
       
   559 .sp
       
   560 .ne 2
       
   561 .mk
       
   562 .na
       
   563 \fB\fB${\fR\fIparameter\fR\fB:-\fR\fIword\fR\fB}\fR\fR
       
   564 .ad
       
   565 .sp .6
       
   566 .RS 4n
       
   567 如果 \fIparameter\fR 已设置且不为 Null,则替换其值。否则替换 \fIword\fR。
       
   568 .sp
       
   569 除非将 \fIword\fR 用作被替换的字符串,否则不会计算它的值。 
       
   570 .sp
       
   571 在下面的示例中,仅当 \fBd\fR 未设置或者为 NULL 时,才会执行 \fBpwd\fR:
       
   572 .sp
       
   573 .in +2
       
   574 .nf
       
   575 print ${d:-$(pwd)}
       
   576 .fi
       
   577 .in -2
       
   578 .sp
       
   579 
       
   580 如果表达式中省略了冒号 (\fB:\fR),此 shell 仅检查是否设置了 \fIparameter\fR。 
       
   581 .RE
       
   582 
       
   583 .sp
       
   584 .ne 2
       
   585 .mk
       
   586 .na
       
   587 \fB\fB${\fR\fIparameter\fR\fB:\fR\fIoffset\fR:\fIlength\fR}\fR
       
   588 .ad
       
   589 .br
       
   590 .na
       
   591 \fB\fB${\fR\fIparameter\fR\fB:\fR\fIoffset\fR\fB}\fR\fR
       
   592 .ad
       
   593 .sp .6
       
   594 .RS 4n
       
   595 扩展至 \fIparameter\fR 的值的以下部分:从作为算术表达式扩展偏移量所确定的字符开始(从 \fB0\fR 开始算起),并且该部分包含的字符数由 \fIlength\fR 定义的算术表达式确定。 
       
   596 .sp
       
   597 在第二种格式中,使用相应值的剩余部分。负偏移量从 \fIparameter\fR 末尾开始往后计数。
       
   598 .sp
       
   599 减号前需要一个或多个空白,以免此 shell 将此运算符解释为 \fB:-\fR。如果 parameter 为 \fB*\fR 或 \fB@\fR,或者为 \fB*\fR 或 \fB@\fR 索引的数组名称,\fIoffset\fR 和 \fIlength\fR 分别表示数组索引和元素数目。相对于索引数组的最高下标而言,采用的负 \fIoffset\fR 比此最高下标大 1。未指定关联数组的顺序。
       
   600 .RE
       
   601 
       
   602 .sp
       
   603 .ne 2
       
   604 .mk
       
   605 .na
       
   606 \fB\fB${\fR\fIparameter\fR\fB#\fR\fIpattern\fR\fB}\fR\fR
       
   607 .ad
       
   608 .br
       
   609 .na
       
   610 \fB\fB${\fR\fIparameter\fR\fB##\fR\fIpattern\fR\fB}\fR\fR
       
   611 .ad
       
   612 .sp .6
       
   613 .RS 4n
       
   614 如果 shell \fIpattern\fR 与 \fIparameter\fR 的值的开头匹配,此扩展的值即为删除了匹配部分的 \fIparameter\fR 的值。否则会替换此 \fIparameter\fR 的值。在第一种格式中,删除了最小匹配 \fIpattern\fR,在第二种格式中,删除了最大匹配 \fIpattern\fR。如果 \fIparameter\fR 为 \fB@\fR、\fB*\fR,或者为带有下标 \fB@\fR 或 \fB*\fR 的数组变量,则会依次对每个元素应用求子串操作。 
       
   615 .RE
       
   616 
       
   617 .sp
       
   618 .ne 2
       
   619 .mk
       
   620 .na
       
   621 \fB\fB${\fR\fIparameter\fR\fB%\fR\fIpattern\fR\fB}\fR\fR
       
   622 .ad
       
   623 .br
       
   624 .na
       
   625 \fB\fB${\fR\fIparameter\fR\fB%%\fR\fIpattern\fR\fB}\fR\fR
       
   626 .ad
       
   627 .sp .6
       
   628 .RS 4n
       
   629 如果 shell \fIpattern\fR 与 \fIparameter\fR 的值的末尾匹配,此扩展的值即为删除了匹配部分的 parameter 的值。否则会替换 \fIparameter\fR 值。在第一种格式中,删除了最小匹配 pattern,在第二种格式中,删除了最大匹配 pattern。如果 parameter 为 \fB@\fR、\fB*\fR,或者为带有下标 \fB@\fR 或 \fB*\fR 的数组变量,则会依次对每个元素应用求子串操作。 
       
   630 .RE
       
   631 
       
   632 .sp
       
   633 .ne 2
       
   634 .mk
       
   635 .na
       
   636 \fB\fB${\fR\fIparameter\fR\fB/\fR\fIpattern\fR\fB/\fR\fIstring\fR\fB}\fR\fR
       
   637 .ad
       
   638 .br
       
   639 .na
       
   640 \fB\fB${\fR\fIparameter\fR\fB//\fR\fI pattern\fR\fB/\fR\fIstring\fR\fB}\fR\fR
       
   641 .ad
       
   642 .br
       
   643 .na
       
   644 \fB\fB${\fR\fIparameter\fR\fB/#\fR\fIpattern\fR\fB/\fR\fIstring\fR\fB}\fR\fR
       
   645 .ad
       
   646 .br
       
   647 .na
       
   648 \fB\fB${\fR\fIparameter\fR\fB/%\fR\fIpattern\fR\fB/\fR\fIstring\fR\fB}\fR\fR
       
   649 .ad
       
   650 .sp .6
       
   651 .RS 4n
       
   652 扩展 \fIparameter\fR,并使用指定 \fIstring\fR 替换 \fIpattern\fR 的最长匹配项。\fIstring\fR 中的 \fB\e\fR\fIn\fR 的每个匹配项都替换为与第 \fIn\fR\fB\fR 个子模式匹配的 \fIparameter\fR 部分。 
       
   653 .sp
       
   654 如果 \fIstring\fR 为 null,则会删除 \fIpattern\fR,并且可省略 string 前面的 \fB/\fR。如果 \fIparameter\fR 为 \fB@\fR、\fB*\fR,或者为带有下标 \fB@\fR 或 \fB*\fR 的数组变量,则会依次对每个元素应用替换操作。此种情况下,将针对每个元素重新计算 \fIword\fR 的 \fIstring\fR 部分。
       
   655 .sp
       
   656 在第一种格式中,仅替换 \fIpattern\fR 的第一个匹配项。 
       
   657 .sp
       
   658 在第二种格式中,\fIpattern\fR 的每个匹配项都将替换为指定 \fIstring\fR。 
       
   659 .sp
       
   660 第三种格式将模式匹配限制为 \fIstring\fR 的开头。 
       
   661 .sp
       
   662 第四种格式将模式匹配限制为 \fIstring\fR 的末尾。 
       
   663 .RE
       
   664 
       
   665 .sp
       
   666 .LP
       
   667 shell 自动设置下列参数:
       
   668 .sp
       
   669 .ne 2
       
   670 .mk
       
   671 .na
       
   672 \fB\fB#\fR\fR
       
   673 .ad
       
   674 .RS 19n
       
   675 .rt  
       
   676 位置参数的数目(以十进制表示)。
       
   677 .RE
       
   678 
       
   679 .sp
       
   680 .ne 2
       
   681 .mk
       
   682 .na
       
   683 \fB\fB-\fR\fR
       
   684 .ad
       
   685 .RS 19n
       
   686 .rt  
       
   687 在调用时或通过 \fBset\fR 命令向 shell 提供的选项。
       
   688 .RE
       
   689 
       
   690 .sp
       
   691 .ne 2
       
   692 .mk
       
   693 .na
       
   694 \fB\fB?\fR\fR
       
   695 .ad
       
   696 .RS 19n
       
   697 .rt  
       
   698 执行的最后一个命令所返回的十进制值。
       
   699 .RE
       
   700 
       
   701 .sp
       
   702 .ne 2
       
   703 .mk
       
   704 .na
       
   705 \fB\fB$\fR\fR
       
   706 .ad
       
   707 .RS 19n
       
   708 .rt  
       
   709 此 shell 的进程数。
       
   710 .RE
       
   711 
       
   712 .sp
       
   713 .ne 2
       
   714 .mk
       
   715 .na
       
   716 \fB\fB_\fR\fR
       
   717 .ad
       
   718 .RS 19n
       
   719 .rt  
       
   720 一开始时,\fB_\fR 的值是在环境中传递时所执行的 shell 或脚本的绝对路径名。然后会为该值分配上一命令的最后一个参数。 
       
   721 .sp
       
   722 对于异步命令,未设置此参数。此参数还可用于保存查看邮件时的匹配 \fBMAIL\fR 文件的名称。
       
   723 .RE
       
   724 
       
   725 .sp
       
   726 .ne 2
       
   727 .mk
       
   728 .na
       
   729 \fB\fB!\fR\fR
       
   730 .ad
       
   731 .RS 19n
       
   732 .rt  
       
   733 调用的最后一个后台命令的进程数或使用 \fBbg\fR 内置命令放置到后台的最新作业。
       
   734 .RE
       
   735 
       
   736 .sp
       
   737 .ne 2
       
   738 .mk
       
   739 .na
       
   740 \fB\fB\&.sh.command\fR\fR
       
   741 .ad
       
   742 .RS 19n
       
   743 .rt  
       
   744 当处理 \fBDEBUG\fR 陷阱时,此变量包含即将运行的最新命令行。
       
   745 .RE
       
   746 
       
   747 .sp
       
   748 .ne 2
       
   749 .mk
       
   750 .na
       
   751 \fB\fB\&.sh.edchar\fR\fR
       
   752 .ad
       
   753 .RS 19n
       
   754 .rt  
       
   755 此变量包含处理 \fBKEYBD\fR 陷阱时已输入的键盘字符(如果第一个字符为 ESC、\fBASCII 033\fR,则为字符序列)的值。如果在陷阱操作中更改了此值,则会使用新值替换导致此陷阱的键(或键序)。请参见本手册页的\fB键绑定\fR部分。
       
   756 .RE
       
   757 
       
   758 .sp
       
   759 .ne 2
       
   760 .mk
       
   761 .na
       
   762 \fB\fB\&.sh.edcol\fR\fR
       
   763 .ad
       
   764 .RS 19n
       
   765 .rt  
       
   766 执行最新的 \fBKEYBD\fR 陷阱时光标所在的字符位置。
       
   767 .RE
       
   768 
       
   769 .sp
       
   770 .ne 2
       
   771 .mk
       
   772 .na
       
   773 \fB\fB\&.sh.edmode\fR\fR
       
   774 .ad
       
   775 .RS 19n
       
   776 .rt  
       
   777 当在 \fBvi\fR 插入模式下处理 \fBKEYBD\fR 陷阱时,该值设置为 ESC。否则,当处理 \fBKEYBD\fR 陷阱时,\fB\&.sh.edmode\fR 为 null。请参见本手册页的 \fBvi 编辑模式\fR部分。
       
   778 .RE
       
   779 
       
   780 .sp
       
   781 .ne 2
       
   782 .mk
       
   783 .na
       
   784 \fB\fB\&.sh.edtext\fR\fR
       
   785 .ad
       
   786 .RS 19n
       
   787 .rt  
       
   788 执行最新的 \fBKEYBD\fR 陷阱时输入缓冲区中的字符。如果未在处理 \fBKEYBD\fR 陷阱,该值则为 null。
       
   789 .RE
       
   790 
       
   791 .sp
       
   792 .ne 2
       
   793 .mk
       
   794 .na
       
   795 \fB\fB\&.sh.file\fR\fR
       
   796 .ad
       
   797 .RS 19n
       
   798 .rt  
       
   799 包含当前命令的文件的路径名。
       
   800 .RE
       
   801 
       
   802 .sp
       
   803 .ne 2
       
   804 .mk
       
   805 .na
       
   806 \fB\fB\&.sh.fun\fR\fR
       
   807 .ad
       
   808 .RS 19n
       
   809 .rt  
       
   810 正在执行的当前函数的名称。
       
   811 .RE
       
   812 
       
   813 .sp
       
   814 .ne 2
       
   815 .mk
       
   816 .na
       
   817 \fB\fB\&.sh.match\fR\fR
       
   818 .ad
       
   819 .RS 19n
       
   820 .rt  
       
   821 将最新匹配项及子模式匹配项存储在匹配的条件模式匹配项以及使用运算符 \fB#\fR、\fB%\fR 或 \fB/\fR 的变量扩展之后的索引数组。第 \fB0\fR 个元素存储完整匹配项,第 \fIi\fR 个元素存储第 \fIi\fR 个子匹配项。当为扩展的变量分配了新值时,\fB\&.sh.match\fR 变量将取消设置。
       
   822 .RE
       
   823 
       
   824 .sp
       
   825 .ne 2
       
   826 .mk
       
   827 .na
       
   828 \fB\fB\&.sh.name\fR\fR
       
   829 .ad
       
   830 .RS 19n
       
   831 .rt  
       
   832 设置为调用规程函数时的变量的名称。
       
   833 .RE
       
   834 
       
   835 .sp
       
   836 .ne 2
       
   837 .mk
       
   838 .na
       
   839 \fB\fB\&.sh.subscript\fR\fR
       
   840 .ad
       
   841 .RS 19n
       
   842 .rt  
       
   843 设置为调用规程函数时的变量的名称下标。
       
   844 .RE
       
   845 
       
   846 .sp
       
   847 .ne 2
       
   848 .mk
       
   849 .na
       
   850 \fB\fB\&.sh.subshell\fR\fR
       
   851 .ad
       
   852 .RS 19n
       
   853 .rt  
       
   854 子 shell 和命令替换的当前深度。
       
   855 .RE
       
   856 
       
   857 .sp
       
   858 .ne 2
       
   859 .mk
       
   860 .na
       
   861 \fB\fB\&.sh.value\fR\fR
       
   862 .ad
       
   863 .RS 19n
       
   864 .rt  
       
   865 设置为调用 set 或 append 规程函数时的变量的值。
       
   866 .RE
       
   867 
       
   868 .sp
       
   869 .ne 2
       
   870 .mk
       
   871 .na
       
   872 \fB\fB\&.sh.version\fR\fR
       
   873 .ad
       
   874 .RS 19n
       
   875 .rt  
       
   876 设置为标识此 shell 的版本的值。
       
   877 .RE
       
   878 
       
   879 .sp
       
   880 .ne 2
       
   881 .mk
       
   882 .na
       
   883 \fB\fBLINENO\fR\fR
       
   884 .ad
       
   885 .RS 19n
       
   886 .rt  
       
   887 正在执行的脚本或函数中的当前行号。
       
   888 .RE
       
   889 
       
   890 .sp
       
   891 .ne 2
       
   892 .mk
       
   893 .na
       
   894 \fB\fBOLDPWD\fR\fR
       
   895 .ad
       
   896 .RS 19n
       
   897 .rt  
       
   898 \fBcd\fR 命令设置的早期工作目录。
       
   899 .RE
       
   900 
       
   901 .sp
       
   902 .ne 2
       
   903 .mk
       
   904 .na
       
   905 \fB\fBOPTARG\fR\fR
       
   906 .ad
       
   907 .RS 19n
       
   908 .rt  
       
   909 \fBgetopts\fR 内置命令处理的最后一个选项参数的值。
       
   910 .RE
       
   911 
       
   912 .sp
       
   913 .ne 2
       
   914 .mk
       
   915 .na
       
   916 \fB\fBOPTIND\fR\fR
       
   917 .ad
       
   918 .RS 19n
       
   919 .rt  
       
   920 \fBgetopts\fR 内置命令处理的最后一个选项参数的索引。
       
   921 .RE
       
   922 
       
   923 .sp
       
   924 .ne 2
       
   925 .mk
       
   926 .na
       
   927 \fB\fBPPID\fR\fR
       
   928 .ad
       
   929 .RS 19n
       
   930 .rt  
       
   931 shell 的父级的进程数。
       
   932 .RE
       
   933 
       
   934 .sp
       
   935 .ne 2
       
   936 .mk
       
   937 .na
       
   938 \fB\fBPWD\fR\fR
       
   939 .ad
       
   940 .RS 19n
       
   941 .rt  
       
   942 \fBcd\fR 命令设置的当前工作目录。
       
   943 .RE
       
   944 
       
   945 .sp
       
   946 .ne 2
       
   947 .mk
       
   948 .na
       
   949 \fB\fBRANDOM\fR\fR
       
   950 .ad
       
   951 .RS 19n
       
   952 .rt  
       
   953 每次引用此变量时,将生成一个在 \fB0\fR 和 \fB32767\fR 之间统一分布的随机整数。通过为 \fBRANDOM\fR 分配一个数值,可以初始化随机数字的序列。
       
   954 .RE
       
   955 
       
   956 .sp
       
   957 .ne 2
       
   958 .mk
       
   959 .na
       
   960 \fB\fBREPLY\fR\fR
       
   961 .ad
       
   962 .RS 19n
       
   963 .rt  
       
   964 如果未提供参数,此变量则由 \fBselect\fR 语句和 \fBread\fR 内置命令设置。
       
   965 .RE
       
   966 
       
   967 .sp
       
   968 .ne 2
       
   969 .mk
       
   970 .na
       
   971 \fB\fBSECONDS\fR\fR
       
   972 .ad
       
   973 .RS 19n
       
   974 .rt  
       
   975 每次引用此变量时,将返回自调用 shell 以来所经过的秒数。如果为此变量分配了一个值,引用时返回的值即为此分配的值以及自分配以来所经过的秒数。
       
   976 .RE
       
   977 
       
   978 .sp
       
   979 .LP
       
   980 shell 使用下列变量:
       
   981 .sp
       
   982 .ne 2
       
   983 .mk
       
   984 .na
       
   985 \fB\fBCDPATH\fR\fR
       
   986 .ad
       
   987 .RS 14n
       
   988 .rt  
       
   989 定义 \fBcd\fR 命令的搜索路径。
       
   990 .RE
       
   991 
       
   992 .sp
       
   993 .ne 2
       
   994 .mk
       
   995 .na
       
   996 \fB\fBCOLUMNS\fR\fR
       
   997 .ad
       
   998 .RS 14n
       
   999 .rt  
       
  1000 定义 shell 编辑模式的编辑窗口以及用于输出选择列表的编辑窗口的宽度。
       
  1001 .RE
       
  1002 
       
  1003 .sp
       
  1004 .ne 2
       
  1005 .mk
       
  1006 .na
       
  1007 \fB\fBEDITOR\fR\fR
       
  1008 .ad
       
  1009 .RS 14n
       
  1010 .rt  
       
  1011 如果未设置 \fBVISUAL\fR 变量,则会按照 \fBVISUAL\fR 的说明针对模式检查此变量的值,并启用相应的编辑选项。 
       
  1012 .sp
       
  1013 请参见本手册页\fB特殊命令\fR部分中的 \fBset\fR 命令。 
       
  1014 .RE
       
  1015 
       
  1016 .sp
       
  1017 .ne 2
       
  1018 .mk
       
  1019 .na
       
  1020 \fB\fBENV\fR\fR
       
  1021 .ad
       
  1022 .RS 14n
       
  1023 .rt  
       
  1024 对相应值执行参数扩展、命令替换和算术替换,以便生成调用 shell 时所执行的脚本的路径名。此文件通常用于别名和函数定义。缺省值为 \fB$HOME/.kshrc\fR。 
       
  1025 .sp
       
  1026 请参见本手册页的\fB调用\fR部分。
       
  1027 .sp
       
  1028 shell 不会设置 \fBENV\fR。 
       
  1029 .RE
       
  1030 
       
  1031 .sp
       
  1032 .ne 2
       
  1033 .mk
       
  1034 .na
       
  1035 \fB\fBFCEDIT\fR\fR
       
  1036 .ad
       
  1037 .RS 14n
       
  1038 .rt  
       
  1039 \fBhist\fR 命令的缺省编辑器名称的已过时名称。如果设置了 \fBHISTEDIT\fR,则不会使用 \fBFCEDIT\fR。
       
  1040 .sp
       
  1041 shell 指定 \fBFCEDIT\fR 的缺省值。
       
  1042 .RE
       
  1043 
       
  1044 .sp
       
  1045 .ne 2
       
  1046 .mk
       
  1047 .na
       
  1048 \fB\fBFIGNORE\fR\fR
       
  1049 .ad
       
  1050 .RS 14n
       
  1051 .rt  
       
  1052 定义执行文件名匹配时忽略的文件名集的模式。
       
  1053 .RE
       
  1054 
       
  1055 .sp
       
  1056 .ne 2
       
  1057 .mk
       
  1058 .na
       
  1059 \fB\fBFPATH\fR\fR
       
  1060 .ad
       
  1061 .RS 14n
       
  1062 .rt  
       
  1063 函数定义的搜索路径。当引用具有 \fB-u\fR 属性的函数时,以及当未找到命令时,系统会在此路径中的目录内搜索其名称与此函数或命令相同的文件。 如果找到名称与此命令对应的可执行文件,则会在当前环境中读取和执行此文件。与 \fBPATH\fR 不同的是,必须明确使用句点 (\fB\&.\fR)(而非相邻冒号 (\fB:\fR) 字符,或者起始或结束冒号 (\fB:\fR))表示当前目录。
       
  1064 .RE
       
  1065 
       
  1066 .sp
       
  1067 .ne 2
       
  1068 .mk
       
  1069 .na
       
  1070 \fB\fBHISTCMD\fR\fR
       
  1071 .ad
       
  1072 .RS 14n
       
  1073 .rt  
       
  1074 历史文件中的当前命令的数目。
       
  1075 .RE
       
  1076 
       
  1077 .sp
       
  1078 .ne 2
       
  1079 .mk
       
  1080 .na
       
  1081 \fB\fBHISTEDIT\fR\fR
       
  1082 .ad
       
  1083 .RS 14n
       
  1084 .rt  
       
  1085 \fBhist\fR 命令的缺省编辑器的名称。
       
  1086 .RE
       
  1087 
       
  1088 .sp
       
  1089 .ne 2
       
  1090 .mk
       
  1091 .na
       
  1092 \fB\fBHISTFILE\fR\fR
       
  1093 .ad
       
  1094 .RS 14n
       
  1095 .rt  
       
  1096 如果在调用 shell 时设置了此变量,此变量的值即为存储命令历史所使用的文件的路径名。请参见本手册页的\fB重新输入命令\fR部分。 
       
  1097 .RE
       
  1098 
       
  1099 .sp
       
  1100 .ne 2
       
  1101 .mk
       
  1102 .na
       
  1103 \fB\fBHISTSIZE\fR\fR
       
  1104 .ad
       
  1105 .RS 14n
       
  1106 .rt  
       
  1107 如果在调用 shell 时设置了此变量,此 shell 可访问的以前输入的命令的数目则大于或等于此数目。缺省值为 \fB512\fR。
       
  1108 .RE
       
  1109 
       
  1110 .sp
       
  1111 .ne 2
       
  1112 .mk
       
  1113 .na
       
  1114 \fB\fBHOME\fR\fR
       
  1115 .ad
       
  1116 .RS 14n
       
  1117 .rt  
       
  1118 \fBcd\fR 命令的缺省参数(起始目录)。
       
  1119 .sp
       
  1120 shell 不会设置 \fBHOME\fR。\fBHOME\fR 由 \fBlogin\fR(1) 设置。
       
  1121 .RE
       
  1122 
       
  1123 .sp
       
  1124 .ne 2
       
  1125 .mk
       
  1126 .na
       
  1127 \fB\fBIFS\fR\fR
       
  1128 .ad
       
  1129 .RS 14n
       
  1130 .rt  
       
  1131 内部字段分隔符,通常为空格、制表符和换行符,这些分隔符用于分隔命令替换或参数扩展的结果,还可用于通过内置命令 read 分隔字段。\fBIFS\fR 变量的第一个字符用于分隔参数以便进行 \fB"$*"\fR 替换。请参见本手册页的\fB引用\fR部分。 
       
  1132 .sp
       
  1133 要分隔的字符串中出现的、未包含在 \fBissspace\fR 字符类中的每个 \fBIFS\fR 字符以及包含在 \fBissspace\fR 字符类中的 \fBIFS\fR 中的任何相邻字符均可用于分隔字段。IFS 中包含在 \fBissspace\fR 字符类中的一个或多个字符可用于分隔字段。此外,如果 \fBIFS\fR 中连续显示同一 \fBissspace\fR 字符,则会按照此字符不包含在 \fBissspace\fR 类中的方式来处理此字符,因此,如果 \fBIFS\fR 包含两个制表符,两个相邻制表符可分隔一个 null 字段。
       
  1134 .sp
       
  1135 shell 指定 \fBIFS\fR 的缺省值。
       
  1136 .RE
       
  1137 
       
  1138 .sp
       
  1139 .ne 2
       
  1140 .mk
       
  1141 .na
       
  1142 \fB\fBLANG\fR\fR
       
  1143 .ad
       
  1144 .RS 14n
       
  1145 .rt  
       
  1146 对于并非使用以 \fBLC_\fR 或 \fBLANG\fR 开头的变量专门选择的任何类别,此变量确定这些类别的语言环境类别。
       
  1147 .RE
       
  1148 
       
  1149 .sp
       
  1150 .ne 2
       
  1151 .mk
       
  1152 .na
       
  1153 \fB\fBLC_ALL\fR\fR
       
  1154 .ad
       
  1155 .RS 14n
       
  1156 .rt  
       
  1157 此变量覆盖 \fBLANG\fR 变量以及任何其他 \fBLC_\fR 变量的值。
       
  1158 .RE
       
  1159 
       
  1160 .sp
       
  1161 .ne 2
       
  1162 .mk
       
  1163 .na
       
  1164 \fB\fBLC_COLLATE\fR\fR
       
  1165 .ad
       
  1166 .RS 14n
       
  1167 .rt  
       
  1168 此变量确定字符整理信息的语言环境类别。
       
  1169 .RE
       
  1170 
       
  1171 .sp
       
  1172 .ne 2
       
  1173 .mk
       
  1174 .na
       
  1175 \fB\fBLC_CTYPE\fR\fR
       
  1176 .ad
       
  1177 .RS 14n
       
  1178 .rt  
       
  1179 此变量确定字符处理函数的语言环境类别。它确定用于模式匹配的字符类。请参见本手册页的\fB文件名生成\fR部分。
       
  1180 .RE
       
  1181 
       
  1182 .sp
       
  1183 .ne 2
       
  1184 .mk
       
  1185 .na
       
  1186 \fB\fBLC_NUMERIC\fR\fR
       
  1187 .ad
       
  1188 .RS 14n
       
  1189 .rt  
       
  1190 此变量确定小数点字符的语言环境类别。
       
  1191 .RE
       
  1192 
       
  1193 .sp
       
  1194 .ne 2
       
  1195 .mk
       
  1196 .na
       
  1197 \fB\fBLINES\fR\fR
       
  1198 .ad
       
  1199 .RS 14n
       
  1200 .rt  
       
  1201 如果设置了此变量,则使用此变量的值确定列长度以便输出选择列表。选择列表纵向输出,直到填充了大约 2/3 的 \fBLINES\fR 行为止。
       
  1202 .RE
       
  1203 
       
  1204 .sp
       
  1205 .ne 2
       
  1206 .mk
       
  1207 .na
       
  1208 \fB\fBMAIL\fR\fR
       
  1209 .ad
       
  1210 .RS 14n
       
  1211 .rt  
       
  1212 如果此变量设置为邮件文件的名称,\fB并且\fR未设置 \fBMAILPATH\fR 变量,shell 则会在指定文件中通知用户已收到邮件。
       
  1213 .sp
       
  1214 shell 不会设置 \fBMAIL\fR。在某些系统中,\fBMAIL\fR 由 \fBlogin\fR(1) 设置。
       
  1215 .RE
       
  1216 
       
  1217 .sp
       
  1218 .ne 2
       
  1219 .mk
       
  1220 .na
       
  1221 \fB\fBMAILCHECK\fR\fR
       
  1222 .ad
       
  1223 .RS 14n
       
  1224 .rt  
       
  1225 指定 shell 检查 \fBMAILPATH\fR 或 \fBMAIL\fR 变量指定的所有文件的修改时间更改的频率(秒)。缺省值为 \fB600\fR 秒。经过此时间后,shell 会在发出下一提示前进行检查。
       
  1226 .sp
       
  1227 shell 指定 \fBMAILCHECK\fR 的缺省值。
       
  1228 .RE
       
  1229 
       
  1230 .sp
       
  1231 .ne 2
       
  1232 .mk
       
  1233 .na
       
  1234 \fB\fBMAILPATH\fR\fR
       
  1235 .ad
       
  1236 .RS 14n
       
  1237 .rt  
       
  1238 以冒号 (\fB:\fR) 分隔的文件名列表。如果设置了此变量,shell 会通知用户在最后 \fBMAILCHECK\fR 秒内对指定文件所做的任何修改。每个文件名后面都可以带有 \fB?\fR 以及输出的消息。此消息会进行参数扩展、命令替换和算术替换,并将变量 \fB$_\fR 定义为已发生更改的文件的名称。缺省消息为\fB在 $_ 中您有一个邮件\fR。
       
  1239 .RE
       
  1240 
       
  1241 .sp
       
  1242 .ne 2
       
  1243 .mk
       
  1244 .na
       
  1245 \fB\fBPATH\fR\fR
       
  1246 .ad
       
  1247 .RS 14n
       
  1248 .rt  
       
  1249 命令的搜索路径。除非在 \fB\&.profile\fR 中,否则用户无法在 \fBrksh\fR 下执行时更改 \fBPATH\fR。请参见本手册页的\fB执行\fR部分。
       
  1250 .sp
       
  1251 shell 指定 \fBPATH\fR 的缺省值。
       
  1252 .RE
       
  1253 
       
  1254 .sp
       
  1255 .ne 2
       
  1256 .mk
       
  1257 .na
       
  1258 \fB\fBPS1\fR\fR
       
  1259 .ad
       
  1260 .RS 14n
       
  1261 .rt  
       
  1262 扩展此变量的值,以便进行参数扩展、命令替换和算术替换,从而定义主提示字符串,缺省情况下,主提示字符串为 \fB$\fR。主提示字符串中的字符 \fB!\fR 替换为命令编号。当输出提示字符串时,出现的两个连续 \fB!\fR 可生成一个 \fB!\fR。请参见本手册页的\fB重新输入命令\fR部分。
       
  1263 .sp
       
  1264 shell 指定 \fBPS1\fR 的缺省值。
       
  1265 .RE
       
  1266 
       
  1267 .sp
       
  1268 .ne 2
       
  1269 .mk
       
  1270 .na
       
  1271 \fB\fBPS2\fR\fR
       
  1272 .ad
       
  1273 .RS 14n
       
  1274 .rt  
       
  1275 辅助提示字符串,缺省情况下为 \fB>\fR。
       
  1276 .sp
       
  1277 shell 指定 \fBPS2\fR 的缺省值。
       
  1278 .RE
       
  1279 
       
  1280 .sp
       
  1281 .ne 2
       
  1282 .mk
       
  1283 .na
       
  1284 \fB\fBPS3\fR\fR
       
  1285 .ad
       
  1286 .RS 14n
       
  1287 .rt  
       
  1288 在选择循环中使用的选择提示字符串,缺省情况下为 \fB#?\fR。
       
  1289 .sp
       
  1290 shell 指定 \fBPS3\fR 的缺省值。
       
  1291 .RE
       
  1292 
       
  1293 .sp
       
  1294 .ne 2
       
  1295 .mk
       
  1296 .na
       
  1297 \fB\fBPS4\fR\fR
       
  1298 .ad
       
  1299 .RS 14n
       
  1300 .rt  
       
  1301 扩展此变量的值,以便进行参数计算、命令替换和算术替换,并且此变量的值会在每一行前面放置一个执行跟踪。缺省情况下,\fBPS4\fR 为 \fB+\fR。如果取消设置 \fBPS4\fR,执行跟踪提示同样为 \fB+\fR。
       
  1302 .sp
       
  1303 shell 指定 \fBPS4\fR 的缺省值。
       
  1304 .RE
       
  1305 
       
  1306 .sp
       
  1307 .ne 2
       
  1308 .mk
       
  1309 .na
       
  1310 \fB\fBSHELL\fR\fR
       
  1311 .ad
       
  1312 .RS 14n
       
  1313 .rt  
       
  1314 在环境中保存 shell 的路径名。如果此变量的根基名称在调用时为 \fBrsh\fR、\fBrksh\fR、\fBrksh\fR 或 \fBkrsh\fR,此 shell 即受限制。
       
  1315 .sp
       
  1316 shell 不会设置 \fBSHELL\fR。在某些系统中,\fBSHELL\fR 由 \fBlogin\fR(1) 设置。
       
  1317 .RE
       
  1318 
       
  1319 .sp
       
  1320 .ne 2
       
  1321 .mk
       
  1322 .na
       
  1323 \fB\fBTIMEFORMAT\fR\fR
       
  1324 .ad
       
  1325 .RS 14n
       
  1326 .rt  
       
  1327 此参数的值用作格式字符串,指定带有 \fBtime\fR 保留字前缀的管道的时间信息的显示方式。\fB%\fR 字符引入扩展为时间值或其他信息的格式序列。 
       
  1328 .sp
       
  1329 格式序列及其含义如下所示。
       
  1330 .sp
       
  1331 .ne 2
       
  1332 .mk
       
  1333 .na
       
  1334 \fB\fB%%\fR\fR
       
  1335 .ad
       
  1336 .sp .6
       
  1337 .RS 4n
       
  1338 字符 \fB%\fR。
       
  1339 .RE
       
  1340 
       
  1341 .sp
       
  1342 .ne 2
       
  1343 .mk
       
  1344 .na
       
  1345 \fB\fB%[\fIp\fR][l]R\fR\fR
       
  1346 .ad
       
  1347 .sp .6
       
  1348 .RS 4n
       
  1349 已用时间(秒)。
       
  1350 .RE
       
  1351 
       
  1352 .sp
       
  1353 .ne 2
       
  1354 .mk
       
  1355 .na
       
  1356 \fB\fB%[\fIp\fR][l]U\fR\fR
       
  1357 .ad
       
  1358 .sp .6
       
  1359 .RS 4n
       
  1360 在用户模式下所用的 CPU 秒数。
       
  1361 .RE
       
  1362 
       
  1363 .sp
       
  1364 .ne 2
       
  1365 .mk
       
  1366 .na
       
  1367 \fB\fB%[\fIp\fR][l]S\fR\fR
       
  1368 .ad
       
  1369 .sp .6
       
  1370 .RS 4n
       
  1371 在系统模式下所用的 CPU 秒数。
       
  1372 .RE
       
  1373 
       
  1374 .sp
       
  1375 .ne 2
       
  1376 .mk
       
  1377 .na
       
  1378 \fB\fB%P\fR\fR
       
  1379 .ad
       
  1380 .sp .6
       
  1381 .RS 4n
       
  1382 CPU 百分比,计算公式为 \fB(U + S)/R\fR。
       
  1383 .RE
       
  1384 
       
  1385 花括号表示可选部分。可选 \fIp\fR 是一个用于指定\fI精度\fR(即小数点后面的小数位数)的数字。值为 \fB0\fR 导致不会输出小数点或小数。最多可显示小数点后面的三个数位。大于 \fB3\fR 的 \fIp\fR 值视为 \fB3\fR。如果未指定 \fIp\fR,则使用值 \fB3\fR。
       
  1386 .sp
       
  1387 可选 \fBl\fR 指定较长的格式,其中包括小时(如果大于零)、分钟和秒钟,并且格式为 \fIHHhMMmSS.FFs\fR。\fIp\fR 的值确定是否包含小数。
       
  1388 .sp
       
  1389 所有其他字符在输出时都不会发生任何更改,并且会添加一个尾随的换行符。如果取消设置,则使用缺省值 \fB$'\nreal\t%2lR\nuser\t%2lU\nsys%2lS'\fR。如果值为 null,则不会显示时间信息。
       
  1390 .RE
       
  1391 
       
  1392 .sp
       
  1393 .ne 2
       
  1394 .mk
       
  1395 .na
       
  1396 \fB\fBTMOUT\fR\fR
       
  1397 .ad
       
  1398 .RS 14n
       
  1399 .rt  
       
  1400 如果设置为大于零的值,\fBTMOUT\fR 即为 \fBread\fR 内置命令的缺省超时值。如果输入来自于终端,\fBselect\fR 复合命令则会在 \fBTMOUT\fR 秒后终止。否则,当从终端读取时,如果未在规定的秒数内输入某个行,shell 将终止。可以为 shell 编译此值的最大限制,不能超过此最大限制。
       
  1401 .sp
       
  1402 shell 指定 \fBTMOUT\fR 的缺省值。
       
  1403 .RE
       
  1404 
       
  1405 .sp
       
  1406 .ne 2
       
  1407 .mk
       
  1408 .na
       
  1409 \fB\fBVISUAL\fR\fR
       
  1410 .ad
       
  1411 .RS 14n
       
  1412 .rt  
       
  1413 如果此变量的值与模式 \fB*[Vv][Ii]*\fR 匹配,则会启用 \fBvi\fR 选项。请参见\fB特殊命令\fR。如果此值与模式 \fB*gmacs*\fR 匹配,则会启用 \fBgmacs\fR 选项。如果此值与模式 \fB*macs*\fR 匹配,则会启用 \fBemacs\fR 选项。\fBVISUAL\fR 的值会覆盖 \fBEDITOR\fR 的值。
       
  1414 .RE
       
  1415 
       
  1416 .SS "字段分隔"
       
  1417 .sp
       
  1418 .LP
       
  1419 执行参数扩展和命令替换之后,系统将扫描替换结果中的字段分隔符(即位于 \fBIFS\fR 中的字段分隔符),并在找到此类字符的位置将结果分隔为不同字段。系统将保留显式 null 字段(\fB""\fR 或 \fB\&''\fR),并删除隐式 null 字段,这些字段是由没有任何值的参数或没有任何输出的命令替换所生成的。
       
  1420 .sp
       
  1421 .LP
       
  1422 如果设置了 \fBbraceexpand\fR (\fB-B\fR) 选项,则会检查由 \fBIFS\fR 生成的每个字段,以查看它们是否包含一个或多个花括号模式。有效花括号模式包括:\fB{*\fR,\fB*}\fR、\fB{\fR\fI l1\fR\fB\&..\fR\fIl2\fR\fB}\fR、\fB{\fR\fIn1\fR\fB\&..\fR\fIn2\fR\fB}\fR、\fB{\fR\fIn1\fR\fB\&..\fR\fIn2\fR\fB %\fR\fIfmt\fR\fB}、{\fR\fIn1\fR\fB\&..\fR\fI n2\fR \fB\&..\fR\fIn3\fR\fB}\fR 或 \fB{\fR\fIn1\fR\fB\&..\fR\fI n2\fR \fB\&..\fR\fIn3\fR\fB%\fR\fIfmt\fR\fB}\fR,其中 \fB*\fR 表示任意字符,\fIl1\fR、\fIl2\fR 表示字母,\fIn1\fR、\fIn2\fR、\fIn3\fR 表示带符号的数字,\fIfmt\fR 表示 \fBprintf\fR 使用的指定格式。在每种情况下,通过将 \fB{\fR 前的字符放置在 \fB{\fR 和 \fB}\fR 之间的字符所生成的每个字符串之前,并将 } 后的字符附加到此类字符串之后来创建字段。系统将检查生成的字段,查看这些字段是否包含任何花括号模式。
       
  1423 .sp
       
  1424 .LP
       
  1425 在第一种格式中,将为 \fB{\fR 和 \fB,\fR、\fB,\fR 和 \fB,\fR 以及 , 和 \fB}\fR 之间的每个字符串创建一个字段。\fB*\fR 表示的字符串可包含不带引号的匹配的嵌入式 { 和 }。否则,必须引用带有 \fB*\fR 的每个 \fB{\fR 和 \fB}\fR。
       
  1426 .sp
       
  1427 .LP
       
  1428 在第二种格式中,\fIl1\fR 和 \fIl2\fR 在 C 语言环境中必须同时为大写字母或小写字母字符。在此种情况下,将为从 \fIl1\fR 到 \fIl2\fR 的每个字符创建一个字段。
       
  1429 .sp
       
  1430 .LP
       
  1431 在其余的格式中,将为从 \fIn1\fR 开始的每个数字创建一个字段。此操作将持续进行,直到达到 \fIn2\fR 并使 \fIn1\fR 递增 \fIn3\fR 为止。如果 \fIn1\fR\fB<=\fR\fIn2\fR,在未指定 \fIn3\fR 的情况下的行为就像 \fIn3\fR 为 1 一样,否则则像 n3 为 \fB-1\fR 一样。在指定了 \fB%\fR\fIfmt\fR 的格式中,可指定所有格式标志、宽度和精度,并且 \fIfmt\fR 可以任何说明符 \fBcdiouxX\fR 结尾。例如,\fB{a,z}{1..5..3%02d}{b..c}x\fR 扩展为 8 个字段,即 \fBa01bx、a01cx、a04bx、a04cx、z01bx、z01cx、z04bx\fR 和 \fBz4cx\fR。
       
  1432 .SS "文件名生成"
       
  1433 .sp
       
  1434 .LP
       
  1435 分隔之后,除非设置了 \fB-f\fR 选项,否则将扫描每个字段,以查看是否包含字符 \fB*\fR、\fB?\fR、\fB(\fR 和 \fB[\fR。如果显示其中的某个字符,则会将单词视为模式。 
       
  1436 .sp
       
  1437 .LP
       
  1438 包含任何模式字符的每个文件名组件都会替换为与该目录中的模式相匹配的按字典顺序排序的名称集合。如果未找到与此模式匹配的文件名,该文件名组件将保持不变,除非此模式带有 \fB~(N)\fR 前缀,此种情况下,将删除此文件名组件。如果设置了 \fBFIGNORE\fR,当生成匹配的文件名时,将忽略与 \fBFIGNORE\fR 的值定义的模式相匹配的每个文件名组件。此外,还会忽略名称 \fB\&.\fR 和 \fB ..\fR。如果未设置 \fBFIGNORE\fR,则会忽略每个文件名组件开头的字符 \fB\&.\fR,除非与此组件对应的模式的第一个字符为字符 \fB\&.\fR 自身。对于模式匹配的其他使用情况,不会对 \fB/\fR 和 \fB\&.\fR 进行特殊处理。
       
  1439 .sp
       
  1440 .ne 2
       
  1441 .mk
       
  1442 .na
       
  1443 \fB\fB*\fR\fR
       
  1444 .ad
       
  1445 .RS 11n
       
  1446 .rt  
       
  1447 匹配任何字符串,包括 null 字符串。当用于文件名扩展时,如果启用了 \fBglobstar\fR 选项,单独的两个相邻 \fB*\fR 匹配所有文件和零个或多个目录及子目录。如果两个相邻 \fB*\fR 后跟有一个 \fB/\fR,则仅匹配目录和子目录。
       
  1448 .RE
       
  1449 
       
  1450 .sp
       
  1451 .ne 2
       
  1452 .mk
       
  1453 .na
       
  1454 \fB\fB?\fR\fR
       
  1455 .ad
       
  1456 .RS 11n
       
  1457 .rt  
       
  1458 匹配任何单个字符。
       
  1459 .RE
       
  1460 
       
  1461 .sp
       
  1462 .ne 2
       
  1463 .mk
       
  1464 .na
       
  1465 \fB[\fB\&...\fR]\fR
       
  1466 .ad
       
  1467 .RS 11n
       
  1468 .rt  
       
  1469 匹配包括的任何一个字符。使用 \fB-\fR 分隔的一对字符将在词汇上匹配这对字符之间的任何字符,包括这对字符。如果左 \fB[\fR 后面的第一个字符为 \fB!\fR,则匹配任何不包括的字符。通过将 \fB-\fR 作为第一个或最后一个字符,可以将其包含在字符集合中。在 \fB[\fR 和 \fB]\fR 中,可使用语法 \fB[:\fR\fIclass\fR\fB:]\fR 指定字符类,其中 \fIclass\fR 表示按 \fBANSI-C\fR 标准定义的下列类之一:
       
  1470 .sp
       
  1471 .in +2
       
  1472 .nf
       
  1473 \fIalnum alpha blank cntrl digit graph\fR
       
  1474 \fIlower print punct space upper\fR
       
  1475 \fIword xdigit\fR
       
  1476 .fi
       
  1477 .in -2
       
  1478 .sp
       
  1479 
       
  1480 \fIword\fR 等效于 \fIalnum\fR 和字符 \fB_\fR。在 \fB[\fR 和 \fB]\fR 中,可使用语法 \fB[=\fR\fIc\fR\fB=]\fR 指定等效类,这会匹配主整理权重(根据当前语言环境定义)与字符 \fIc\fR 相同的所有字符。在 \fB[\fR 和 \fB]\fR 中,[\fI\&.symbol.\fR] 匹配整理符号 \fIsymbol\fR。
       
  1481 .RE
       
  1482 
       
  1483 .sp
       
  1484 .LP
       
  1485 \fIpattern-list\fR 是使用 \fB&\fR 或 \fB|\fR 彼此分隔的一个或多个模式的列表。 \fB&\fR 表示必须匹配所有模式,而 \fB|\fR 要求仅匹配一个模式。复合模式可以由下列一个或多个子模式组成:
       
  1486 .sp
       
  1487 .ne 2
       
  1488 .mk
       
  1489 .na
       
  1490 \fB\fB?(\fR\fIpattern-list\fR\fB)\fR\fR
       
  1491 .ad
       
  1492 .RS 22n
       
  1493 .rt  
       
  1494 选择性地匹配任何指定模式之一。
       
  1495 .RE
       
  1496 
       
  1497 .sp
       
  1498 .ne 2
       
  1499 .mk
       
  1500 .na
       
  1501 \fB\fB*(\fR\fIpattern-list\fR\fB)\fR\fR
       
  1502 .ad
       
  1503 .RS 22n
       
  1504 .rt  
       
  1505 匹配出现的零个或多个指定模式。
       
  1506 .RE
       
  1507 
       
  1508 .sp
       
  1509 .ne 2
       
  1510 .mk
       
  1511 .na
       
  1512 \fB\fB+(\fR\fIpattern-list\fR\fB)\fR\fR
       
  1513 .ad
       
  1514 .RS 22n
       
  1515 .rt  
       
  1516 匹配出现的一个或多个指定模式。
       
  1517 .RE
       
  1518 
       
  1519 .sp
       
  1520 .ne 2
       
  1521 .mk
       
  1522 .na
       
  1523 \fB\fB{\fR\fIn\fR\fB(\fR\fIpattern-list\fR\fB)\fR\fR
       
  1524 .ad
       
  1525 .RS 22n
       
  1526 .rt  
       
  1527 匹配出现的 \fIn\fR 个指定模式。
       
  1528 .RE
       
  1529 
       
  1530 .sp
       
  1531 .ne 2
       
  1532 .mk
       
  1533 .na
       
  1534 \fB\fB{\fR\fIm\fR\fB,\fR\fIn\fR\fB(\fR\fIpattern-list\fR\fB)\fR\fR
       
  1535 .ad
       
  1536 .RS 22n
       
  1537 .rt  
       
  1538 匹配出现的 \fIm\fR 到 \fIn\fR 个指定模式。如果省略了 \fIm\fR,则使用 \fB0\fR。如果省略了 \fIn\fR,则至少匹配出现的 \fIm\fR 个指定模式。
       
  1539 .RE
       
  1540 
       
  1541 .sp
       
  1542 .ne 2
       
  1543 .mk
       
  1544 .na
       
  1545 \fB\fB@(\fR\fIpattern-list\fR\fB)\fR\fR
       
  1546 .ad
       
  1547 .RS 22n
       
  1548 .rt  
       
  1549 与某个指定模式完全匹配。
       
  1550 .RE
       
  1551 
       
  1552 .sp
       
  1553 .ne 2
       
  1554 .mk
       
  1555 .na
       
  1556 \fB\fB!(\fR\fIpattern-list\fR\fB)\fR\fR
       
  1557 .ad
       
  1558 .RS 22n
       
  1559 .rt  
       
  1560 与除某个指定模式以外的所有内容匹配。
       
  1561 .RE
       
  1562 
       
  1563 .sp
       
  1564 .LP
       
  1565 缺省情况下,每个模式或子模式匹配最长的字符串,此字符串可能与生成最长的完整匹配项相一致。如果可能有多个匹配项,则选择起始位置离字符串开头最近的匹配项。但是,对于每个复合模式,可以在 \fB(\fR 前面插入一个 \fB-\fR,以便使用指定 \fIpattern-list\fR 的最短匹配项。
       
  1566 .sp
       
  1567 .LP
       
  1568 如果 \fIpattern-list\fR 包含在括号中,则会以特殊方式处理反斜杠字符 \fB\e\fR,即使它位于字符类中也是如此。所有 \fBANSI-C\fR 转义符均可识别,并且与指定字符匹配。此外,还可识别下列转义序列:
       
  1569 .sp
       
  1570 .ne 2
       
  1571 .mk
       
  1572 .na
       
  1573 \fB\fB\ed\fR\fR
       
  1574 .ad
       
  1575 .RS 7n
       
  1576 .rt  
       
  1577 匹配数字类中的任意字符。
       
  1578 .RE
       
  1579 
       
  1580 .sp
       
  1581 .ne 2
       
  1582 .mk
       
  1583 .na
       
  1584 \fB\fB\eD\fR\fR
       
  1585 .ad
       
  1586 .RS 7n
       
  1587 .rt  
       
  1588 匹配数字类中不包括的任意字符。
       
  1589 .RE
       
  1590 
       
  1591 .sp
       
  1592 .ne 2
       
  1593 .mk
       
  1594 .na
       
  1595 \fB\fB\es\fR\fR
       
  1596 .ad
       
  1597 .RS 7n
       
  1598 .rt  
       
  1599 匹配空格类中的任意字符。
       
  1600 .RE
       
  1601 
       
  1602 .sp
       
  1603 .ne 2
       
  1604 .mk
       
  1605 .na
       
  1606 \fB\fB\eS\fR\fR
       
  1607 .ad
       
  1608 .RS 7n
       
  1609 .rt  
       
  1610 匹配空格类中不包括的任意字符。
       
  1611 .RE
       
  1612 
       
  1613 .sp
       
  1614 .ne 2
       
  1615 .mk
       
  1616 .na
       
  1617 \fB\fB\ew\fR\fR
       
  1618 .ad
       
  1619 .RS 7n
       
  1620 .rt  
       
  1621 匹配单词类中的任意字符。
       
  1622 .RE
       
  1623 
       
  1624 .sp
       
  1625 .ne 2
       
  1626 .mk
       
  1627 .na
       
  1628 \fB\fB\eW\fR\fR
       
  1629 .ad
       
  1630 .RS 7n
       
  1631 .rt  
       
  1632 匹配单词类中不包括的任意字符。
       
  1633 .RE
       
  1634 
       
  1635 .sp
       
  1636 .LP
       
  1637 格式为 \fB%(\fR\fIpattern-pairs\fR\fB)\fR 的模式是可用于匹配嵌套字符表达式的子模式。每个 \fIpattern-pair\fR 都是一个包含两个字符的序列,该序列不能包含 \fB&\fR 或 \fB|\fR。第一个 \fIpattern-pair\fR 指定匹配项的起始字符和结束字符。每个后续 \fIpattern-pair\fR 表示在计算起始字符和结束字符匹配项数目时跳过的嵌套组的起始字符和结束字符。如果 \fIpattern-pair\fR 的第一个字符是除下列字符以外的字母数字,则行为是未指定的:
       
  1638 .sp
       
  1639 .ne 2
       
  1640 .mk
       
  1641 .na
       
  1642 \fB\fBD\fR\fR
       
  1643 .ad
       
  1644 .RS 5n
       
  1645 .rt  
       
  1646 导致结束字符在未找到匹配项的情况下终止对此模式的搜索。
       
  1647 .RE
       
  1648 
       
  1649 .sp
       
  1650 .ne 2
       
  1651 .mk
       
  1652 .na
       
  1653 \fB\fBE\fR\fR
       
  1654 .ad
       
  1655 .RS 5n
       
  1656 .rt  
       
  1657 导致将结束字符解释为转义符。
       
  1658 .RE
       
  1659 
       
  1660 .sp
       
  1661 .ne 2
       
  1662 .mk
       
  1663 .na
       
  1664 \fB\fBL\fR\fR
       
  1665 .ad
       
  1666 .RS 5n
       
  1667 .rt  
       
  1668 导致将结束字符解释为引号字符,从而导致在查找匹配项时忽略所有字符。
       
  1669 .RE
       
  1670 
       
  1671 .sp
       
  1672 .ne 2
       
  1673 .mk
       
  1674 .na
       
  1675 \fB\fBQ\fR\fR
       
  1676 .ad
       
  1677 .RS 5n
       
  1678 .rt  
       
  1679 导致将结束字符解释为引号字符,从而导致在查找匹配项时忽略除任何转义符以外的所有字符。
       
  1680 .RE
       
  1681 
       
  1682 .sp
       
  1683 .LP
       
  1684 \fB%({}Q"E\e)\fR 匹配从 \fB{\fR 开始的字符,直到找到匹配的 \fB}\fR 为止(位于双引号字符串中或前面带有转义符 \fB\e\fR 的任何 \fB{\fR 或 \fB}\fR 不会计算在内)。如果没有 \fB{}\fR,此模式则与任何 C 语言字符串匹配。
       
  1685 .sp
       
  1686 .LP
       
  1687 复合模式中的每个子模式都根据 \fB(\fR 在此模式中的位置从 \fB1\fR 开始进行编号。序列 \fB\e\fR\fIn\fR(其中 \fIn\fR 表示一个数字,并且 \fB\e\fR\fI n\fR 位于第 \fIn\fR 个子模式之后)匹配与子模式自身相同的字符串。
       
  1688 .sp
       
  1689 .LP
       
  1690 模式可包含 \fB~(\fR\fIoptions\fR\fB:\fR\fIpattern-list\fR\fB)\fR 格式的子模式,其中可省略 \fIoptions\fR 或 \fB:\fR\fIpattern-list\fR。与其他复合模式不同的是,这些子模式不会计算在带有编号的子模式之内。如果存在 \fIoptions\fR,则可以包括下列一个或多个字符:
       
  1691 .sp
       
  1692 .ne 2
       
  1693 .mk
       
  1694 .na
       
  1695 \fB\fB+\fR\fR
       
  1696 .ad
       
  1697 .RS 5n
       
  1698 .rt  
       
  1699 启用下列选项。这是缺省值。
       
  1700 .RE
       
  1701 
       
  1702 .sp
       
  1703 .ne 2
       
  1704 .mk
       
  1705 .na
       
  1706 \fB\fB-\fR\fR
       
  1707 .ad
       
  1708 .RS 5n
       
  1709 .rt  
       
  1710 禁用下列选项。
       
  1711 .RE
       
  1712 
       
  1713 .sp
       
  1714 .ne 2
       
  1715 .mk
       
  1716 .na
       
  1717 \fB\fBE\fR\fR
       
  1718 .ad
       
  1719 .RS 5n
       
  1720 .rt  
       
  1721 模式的提示使用扩展的正则表达式语法,例如,\fBegrep\fR(1) 命令。
       
  1722 .RE
       
  1723 
       
  1724 .sp
       
  1725 .ne 2
       
  1726 .mk
       
  1727 .na
       
  1728 \fB\fBF\fR\fR
       
  1729 .ad
       
  1730 .RS 5n
       
  1731 .rt  
       
  1732 模式的提示使用 \fBfgrep\fR(1) 表达式语法。
       
  1733 .RE
       
  1734 
       
  1735 .sp
       
  1736 .ne 2
       
  1737 .mk
       
  1738 .na
       
  1739 \fB\fBg\fR\fR
       
  1740 .ad
       
  1741 .RS 5n
       
  1742 .rt  
       
  1743 归档最长匹配项(最长一致)。 
       
  1744 .sp
       
  1745 这是缺省值。
       
  1746 .RE
       
  1747 
       
  1748 .sp
       
  1749 .ne 2
       
  1750 .mk
       
  1751 .na
       
  1752 \fB\fBG\fR\fR
       
  1753 .ad
       
  1754 .RS 5n
       
  1755 .rt  
       
  1756 模式的提示使用基本正则表达式语法,例如,\fBgrep\fR(1) 命令。
       
  1757 .RE
       
  1758 
       
  1759 .sp
       
  1760 .ne 2
       
  1761 .mk
       
  1762 .na
       
  1763 \fB\fBi\fR\fR
       
  1764 .ad
       
  1765 .RS 5n
       
  1766 .rt  
       
  1767 将匹配项视为不区分大小写。
       
  1768 .RE
       
  1769 
       
  1770 .sp
       
  1771 .ne 2
       
  1772 .mk
       
  1773 .na
       
  1774 \fB\fBK\fR\fR
       
  1775 .ad
       
  1776 .RS 5n
       
  1777 .rt  
       
  1778 模式的提示使用 shell 模式语法。 
       
  1779 .sp
       
  1780 这是缺省值。
       
  1781 .RE
       
  1782 
       
  1783 .sp
       
  1784 .ne 2
       
  1785 .mk
       
  1786 .na
       
  1787 \fB\fBl\fR\fR
       
  1788 .ad
       
  1789 .RS 5n
       
  1790 .rt  
       
  1791 将模式固定在左侧。 
       
  1792 .sp
       
  1793 这是 \fBK\fR 样式模式的缺省值。
       
  1794 .RE
       
  1795 
       
  1796 .sp
       
  1797 .ne 2
       
  1798 .mk
       
  1799 .na
       
  1800 \fB\fBN\fR\fR
       
  1801 .ad
       
  1802 .RS 5n
       
  1803 .rt  
       
  1804 忽略此字符。但是,如果该字符是第一个字母,用于生成文件名,并且没有匹配项,则文件模式将扩展为空字符串。
       
  1805 .RE
       
  1806 
       
  1807 .sp
       
  1808 .ne 2
       
  1809 .mk
       
  1810 .na
       
  1811 \fB\fBr\fR\fR
       
  1812 .ad
       
  1813 .RS 5n
       
  1814 .rt  
       
  1815 将模式固定在右侧。 
       
  1816 .sp
       
  1817 这是 \fBK\fR 样式模式的缺省值。
       
  1818 .RE
       
  1819 
       
  1820 .sp
       
  1821 .LP
       
  1822 如果同时指定了 \fIoptions\fR 和 \fB:\fR\fIpattern-list\fR,这些选项仅适用于 \fIpattern-list\fR。否则,这些选项将保持有效,直到由后续 \fB~(...)\fR 禁用或位于含有 \fB~(...)\fR 的子模式的末尾为止。
       
  1823 .SS "引用"
       
  1824 .sp
       
  1825 .LP
       
  1826 \fB定义\fR中列出的每个元字符都对 shell 具有特殊意义。
       
  1827 .sp
       
  1828 .ne 2
       
  1829 .mk
       
  1830 .na
       
  1831 \fB\fBg\fR\fR
       
  1832 .ad
       
  1833 .RS 5n
       
  1834 .rt  
       
  1835 归档最长匹配项(最长一致)。这是缺省值。
       
  1836 .RE
       
  1837 
       
  1838 .sp
       
  1839 .ne 2
       
  1840 .mk
       
  1841 .na
       
  1842 \fB\fBi\fR\fR
       
  1843 .ad
       
  1844 .RS 5n
       
  1845 .rt  
       
  1846 将匹配项视为不区分大小写。 
       
  1847 .RE
       
  1848 
       
  1849 .sp
       
  1850 .LP
       
  1851 如果同时指定了 \fIoptions\fR 和 \fB:\fR\fIpattern-list\fR,这些选项仅适用于 \fIpattern-list\fR。否则,这些选项将保持有效,直到由后续 \fB~(...)\fR 禁用或位于含有 \fB~(...)\fR 的子模式的末尾为止。
       
  1852 .sp
       
  1853 .LP
       
  1854 本手册页\fB定义\fR部分中列出的每个元字符都对 shell 具有特殊意义,并且会导致单词结束(除非这些元字符带有引号)。通过在字符前面添加一个反斜杠 (\fB\e\fR),可以引用此字符,即,使此字符代表其自身。\fB\e\fR换行符对将被删除。前面没有 \fB$\fR 的单引号对 (\fB\&''\fR) 中包含的所有字符将被引起来。单引号无法显示在单引号中。如果单引号前面带有不带引号的 \fB$\fR,单引号中的字符串将作为 \fBANSI-C\fR 字符串处理,但下列字符串除外:
       
  1855 .sp
       
  1856 .ne 2
       
  1857 .mk
       
  1858 .na
       
  1859 \fB\fB\e0\fR\fR
       
  1860 .ad
       
  1861 .RS 19n
       
  1862 .rt  
       
  1863 导致忽略字符串的提示。
       
  1864 .RE
       
  1865 
       
  1866 .sp
       
  1867 .ne 2
       
  1868 .mk
       
  1869 .na
       
  1870 \fB\fB\ec\fR\fIx\fR\fR
       
  1871 .ad
       
  1872 .RS 19n
       
  1873 .rt  
       
  1874 扩展至字符 CTRL-x。
       
  1875 .RE
       
  1876 
       
  1877 .sp
       
  1878 .ne 2
       
  1879 .mk
       
  1880 .na
       
  1881 \fB\fB\eC\fR[\fB\&.\fR\fIname\fR\fB\&.\fR]\fR
       
  1882 .ad
       
  1883 .RS 19n
       
  1884 .rt  
       
  1885 扩展至整理元素 \fIname\fR。
       
  1886 .RE
       
  1887 
       
  1888 .sp
       
  1889 .ne 2
       
  1890 .mk
       
  1891 .na
       
  1892 \fB\fB\ee\fR\fR
       
  1893 .ad
       
  1894 .RS 19n
       
  1895 .rt  
       
  1896 等效于转义符 (\fBASCII\fR 033)。
       
  1897 .RE
       
  1898 
       
  1899 .sp
       
  1900 .ne 2
       
  1901 .mk
       
  1902 .na
       
  1903 \fB\fB\eE\fR\fR
       
  1904 .ad
       
  1905 .RS 19n
       
  1906 .rt  
       
  1907 等效于转义符 (\fBASCII\fR 033)。
       
  1908 .RE
       
  1909 
       
  1910 .sp
       
  1911 .LP
       
  1912 参数和命令替换在双引号 (\fB""\fR) 中执行,并且 \fB\e\fR 引用字符 \fB\e\fR、\fB`\fR、\fB"\fR 和 \fB$\fR。在 \fBC\fR 或 \fBPOSIX\fR 语言环境中,将忽略带有双引号的字符串前面的 \fB$\fR,在其他语言环境中,这可能导致将此字符串替换为语言环境特定的字符串。当未带有引号时,或者当用作变量赋值的值或文件名时,\fB$*\fR 的含义与 \fB$@\fR 相同。但是,当用作命令参数时,\fB"$*"\fR 等效于 \fB"$1\fId\fR$2\fId\fR..."\fR,其中 \fId\fR 表示 IFS 变量的第一个字符,而 \fB"$@"\fR 等效于 \fB"$1" "$2" ....\fR在重音符引号 (\fB``\fR) 中,\fB\\fR 引用字符 \fB\e\fR、\fB`\fR 和 \fB$\fR。如果重音符引号出现在双引号中,\fB\e\fR 还会引用字符 \fB"\fR。
       
  1913 .sp
       
  1914 .LP
       
  1915 通过引用保留字的任何字符,可以删除保留字或别名的特殊意义。函数名称或内置命令名称的识别方式无法通过引用它们来进行更改。
       
  1916 .SS "算术计算"
       
  1917 .sp
       
  1918 .LP
       
  1919 此 shell 通过执行算术计算来进行算术替换,以便计算算术命令、索引数组下标以及内置命令 \fBshift\fR 和 \fBlet\fR 的参数。此外,还会对内置命令 printf 的参数操作数执行算术计算,该命令与格式操作数中的数字格式说明符相对应。请参见 \fBprintf\fR(1)。使用双精度浮点运算或长整型双精度浮点数对提供此数据类型的系统执行计算。浮点常量遵循 \fBANSI-C\fR 编程语言浮点约定。整数常量遵循 \fBANSI-C\fR 编程语言整数常量约定,但只能识别单字节字符常量,而不能识别字符强制类型转换。常量可以采用 \fB[\fR\fIbase#\fR\fB]\fR\fIn\fR 格式,其中 \fIbase\fR 是介于 2 到 64 之间的表示算术基的十进制数字,\fIn\fR 是该基中的数字。大于 \fB9\fR 的数字分别通过小写字母、大写字母、\fB@\fR 和 \fB_\fR 表示。对于小于或等于 \fB36\fR 的基,可以交替使用大写和小写字符。
       
  1920 .sp
       
  1921 .LP
       
  1922 算术表达式使用与 C 语言相同的表达式语法、优先级和关联。所有适用于浮点值的 C 语言运算符均可使用。此外,运算符 \fB**\fR 可用于求幂。同乘法相比,它具有较高的优先级,并且会保留关联性。如果算术变量或子表达式的值可表示为长整数,则可以执行所有 C 语言整数算术运算。算术表达式中的名称可引用变量,而不必使用参数扩展语法。引用变量时,该变量的值将作为算术表达式计算。 
       
  1923 .sp
       
  1924 .LP
       
  1925 C 数学库包含的下列任何数学库函数均可在算术表达式中使用:
       
  1926 .sp
       
  1927 .in +2
       
  1928 .nf
       
  1929 abs acos acosh asin asinh atan atan2 atanh cbrt 
       
  1930 copysign cos cosh erf erfc exp exp2 expm1 fabs
       
  1931 fdim finite floor fma fmax fmod hypot ilogb 
       
  1932 int isinf isnan lgamma log log2 logb 
       
  1933 nearbyint nextafter nexttoward pow remainder
       
  1934 rint round sin sinh sqrt tan tanh tgamma trunc
       
  1935 .fi
       
  1936 .in -2
       
  1937 .sp
       
  1938 
       
  1939 .sp
       
  1940 .LP
       
  1941 使用 \fBtypeset\fR 特殊内置命令的 \fB-E [\fR\fIn\fR\fB]\fR 或 \fB-F [\fR\fIn\fR\fB]\fR 选项可以指定作为双精度浮点数的\fI变量\fR的内部表示。\fB-E\fR 选项导致在扩展值时使用科学记数法表示此值的扩展。可选选项参数 \fIn\fR 定义重要数字的数目。\fB-F\fR 选项导致在扩展时将扩展表示为十进制浮点数。此种情况下,可选选项参数 \fIn\fR 定义小数点后面的小数位数。
       
  1942 .sp
       
  1943 .LP
       
  1944 使用 \fBtypeset\fR 特殊内置命令的 \fB-i\fR \fB[\fR\fIn\fR\fB]\fR 选项可以指定\fI变量\fR的内部整数表示。可选选项参数 \fIn\fR 指定扩展变量时使用的算术基。如果未指定算术基,则使用基 10。
       
  1945 .sp
       
  1946 .LP
       
  1947 使用 \fB-E\fR、\fB-F\fR 或 \fB-i\fR 选项对变量的每个赋值的值执行算术计算。向整数类型的变量分配浮点数会导致截断小数部分。 
       
  1948 .SS "提示"
       
  1949 .sp
       
  1950 .LP
       
  1951 当交互使用时,shell 在扩展 \fBPS1\fR 以便进行参数扩展、命令替换和算术替换之后通过 PS1 的值进行提示,然后再读取命令。此外,提示中的每个 \fB!\fR 都会替换为命令编号。A \fB!!\fR才能在提示中放置 \fB!\fR。如果在任何时间键入了换行符,并且需要进行更多输入才能完成命令,则会发出辅助提示,即 \fBPS2\fR 的值。
       
  1952 .SS "条件表达式"
       
  1953 .sp
       
  1954 .LP
       
  1955 \fB条件表达式\fR与 \fB[[\fR 复合命令配合使用,以便测试文件属性和比较字符串。不会对 \fB[[\fR 和 \fB]]\fR 之间的单词执行字段分隔和文件名生成。
       
  1956 .sp
       
  1957 .LP
       
  1958 每个表达式均可由下面的一个或多个一元表达式或二元表达式构成:
       
  1959 .sp
       
  1960 .ne 2
       
  1961 .mk
       
  1962 .na
       
  1963 \fB\fB-a\fR \fIfile\fR\fR
       
  1964 .ad
       
  1965 .RS 21n
       
  1966 .rt  
       
  1967 True(如果 \fIfile\fR 存在)。
       
  1968 .sp
       
  1969 此选项与 \fB-e\fR 相同。此选项已过时。
       
  1970 .RE
       
  1971 
       
  1972 .sp
       
  1973 .ne 2
       
  1974 .mk
       
  1975 .na
       
  1976 \fB\fB-b\fR \fIfile\fR\fR
       
  1977 .ad
       
  1978 .RS 21n
       
  1979 .rt  
       
  1980 True(如果 \fIfile\fR 存在且为块特殊文件)。
       
  1981 .RE
       
  1982 
       
  1983 .sp
       
  1984 .ne 2
       
  1985 .mk
       
  1986 .na
       
  1987 \fB\fB-c\fR \fIfile\fR\fR
       
  1988 .ad
       
  1989 .RS 21n
       
  1990 .rt  
       
  1991 True(如果 \fIfile\fR 存在且为字符特殊文件)。
       
  1992 .RE
       
  1993 
       
  1994 .sp
       
  1995 .ne 2
       
  1996 .mk
       
  1997 .na
       
  1998 \fB\fB-d\fR \fIfile\fR\fR
       
  1999 .ad
       
  2000 .RS 21n
       
  2001 .rt  
       
  2002 True(如果 \fIfile\fR 存在且为目录)。
       
  2003 .RE
       
  2004 
       
  2005 .sp
       
  2006 .ne 2
       
  2007 .mk
       
  2008 .na
       
  2009 \fB\fB-e\fR \fIfile\fR\fR
       
  2010 .ad
       
  2011 .RS 21n
       
  2012 .rt  
       
  2013 True(如果 \fIfile\fR 存在)。
       
  2014 .RE
       
  2015 
       
  2016 .sp
       
  2017 .ne 2
       
  2018 .mk
       
  2019 .na
       
  2020 \fB\fB-f\fR \fIfile\fR\fR
       
  2021 .ad
       
  2022 .RS 21n
       
  2023 .rt  
       
  2024 True(如果 \fIfile\fR 存在且为普通文件)。
       
  2025 .RE
       
  2026 
       
  2027 .sp
       
  2028 .ne 2
       
  2029 .mk
       
  2030 .na
       
  2031 \fB\fB-g\fR \fIfile\fR\fR
       
  2032 .ad
       
  2033 .RS 21n
       
  2034 .rt  
       
  2035 True(如果 \fIfile\fR 存在且设置了其 \fBsetgid\fR 位)。
       
  2036 .RE
       
  2037 
       
  2038 .sp
       
  2039 .ne 2
       
  2040 .mk
       
  2041 .na
       
  2042 \fB\fB-G\fR \fIfile\fR\fR
       
  2043 .ad
       
  2044 .RS 21n
       
  2045 .rt  
       
  2046 True(如果 \fIfile\fR 存在,并且其组与此进程的有效组 ID 匹配)。
       
  2047 .RE
       
  2048 
       
  2049 .sp
       
  2050 .ne 2
       
  2051 .mk
       
  2052 .na
       
  2053 \fB\fB-h\fR \fIfile\fR\fR
       
  2054 .ad
       
  2055 .RS 21n
       
  2056 .rt  
       
  2057 True(如果 \fIfile\fR 存在且为符号链接)。
       
  2058 .RE
       
  2059 
       
  2060 .sp
       
  2061 .ne 2
       
  2062 .mk
       
  2063 .na
       
  2064 \fB\fB-k\fR \fIfile\fR\fR
       
  2065 .ad
       
  2066 .RS 21n
       
  2067 .rt  
       
  2068 True(如果 \fIfile\fR 存在且设置了其 sticky 位)。
       
  2069 .RE
       
  2070 
       
  2071 .sp
       
  2072 .ne 2
       
  2073 .mk
       
  2074 .na
       
  2075 \fB\fB-L\fR \fIfile\fR\fR
       
  2076 .ad
       
  2077 .RS 21n
       
  2078 .rt  
       
  2079 True(如果 \fIfile\fR 存在且为符号链接)。
       
  2080 .RE
       
  2081 
       
  2082 .sp
       
  2083 .ne 2
       
  2084 .mk
       
  2085 .na
       
  2086 \fB\fB-n\fR \fIstring\fR\fR
       
  2087 .ad
       
  2088 .RS 21n
       
  2089 .rt  
       
  2090 True(如果 \fIstring\fR 的长度为\fB非零\fR)。
       
  2091 .RE
       
  2092 
       
  2093 .sp
       
  2094 .ne 2
       
  2095 .mk
       
  2096 .na
       
  2097 \fB\fB-N\fR \fIfile\fR\fR
       
  2098 .ad
       
  2099 .RS 21n
       
  2100 .rt  
       
  2101 True(如果 \fIfile\fR 存在,并且修改时间大于上次访问时间)。
       
  2102 .RE
       
  2103 
       
  2104 .sp
       
  2105 .ne 2
       
  2106 .mk
       
  2107 .na
       
  2108 \fB\fB-o\fR \fIoption\fR\fR
       
  2109 .ad
       
  2110 .RS 21n
       
  2111 .rt  
       
  2112 True(如果已启用名为 \fIoption\fR 的选项)。
       
  2113 .RE
       
  2114 
       
  2115 .sp
       
  2116 .ne 2
       
  2117 .mk
       
  2118 .na
       
  2119 \fB\fB-o\fR \fI?option\fR\fR
       
  2120 .ad
       
  2121 .RS 21n
       
  2122 .rt  
       
  2123 True(如果名为 \fIoption\fR 的选项为有效选项名称)。
       
  2124 .RE
       
  2125 
       
  2126 .sp
       
  2127 .ne 2
       
  2128 .mk
       
  2129 .na
       
  2130 \fB\fB-O\fR \fIfile\fR\fR
       
  2131 .ad
       
  2132 .RS 21n
       
  2133 .rt  
       
  2134 True(如果 \fIfile\fR 存在,并且归此进程的有效用户 ID 所有)。
       
  2135 .RE
       
  2136 
       
  2137 .sp
       
  2138 .ne 2
       
  2139 .mk
       
  2140 .na
       
  2141 \fB\fB-p\fR \fIfile\fR\fR
       
  2142 .ad
       
  2143 .RS 21n
       
  2144 .rt  
       
  2145 True(如果 \fIfile\fR 存在且为 \fBFIFO\fR 特殊文件或管道)。
       
  2146 .RE
       
  2147 
       
  2148 .sp
       
  2149 .ne 2
       
  2150 .mk
       
  2151 .na
       
  2152 \fB\fB-r\fR \fIfile\fR\fR
       
  2153 .ad
       
  2154 .RS 21n
       
  2155 .rt  
       
  2156 True(如果 \fIfile\fR 存在,并且可供当前进程读取)。
       
  2157 .RE
       
  2158 
       
  2159 .sp
       
  2160 .ne 2
       
  2161 .mk
       
  2162 .na
       
  2163 \fB\fB-s\fR \fIfile\fR\fR
       
  2164 .ad
       
  2165 .RS 21n
       
  2166 .rt  
       
  2167 True(如果 \fIfile\fR 存在且其大小大于零)。
       
  2168 .RE
       
  2169 
       
  2170 .sp
       
  2171 .ne 2
       
  2172 .mk
       
  2173 .na
       
  2174 \fB\fB-S\fR \fIfile\fR\fR
       
  2175 .ad
       
  2176 .RS 21n
       
  2177 .rt  
       
  2178 True(如果 \fIfile\fR 存在且为套接字)。
       
  2179 .RE
       
  2180 
       
  2181 .sp
       
  2182 .ne 2
       
  2183 .mk
       
  2184 .na
       
  2185 \fB\fB-t\fR \fIfildes\fR\fR
       
  2186 .ad
       
  2187 .RS 21n
       
  2188 .rt  
       
  2189 True(如果文件描述符编号 \fIfildes\fR 已打开且与终端设备相关联)。
       
  2190 .RE
       
  2191 
       
  2192 .sp
       
  2193 .ne 2
       
  2194 .mk
       
  2195 .na
       
  2196 \fB\fB-u\fR \fIfile\fR\fR
       
  2197 .ad
       
  2198 .RS 21n
       
  2199 .rt  
       
  2200 True(如果 \fIfile\fR 存在且设置了其 \fBsetuid\fR 位)。
       
  2201 .RE
       
  2202 
       
  2203 .sp
       
  2204 .ne 2
       
  2205 .mk
       
  2206 .na
       
  2207 \fB\fB-w\fR \fIfile\fR\fR
       
  2208 .ad
       
  2209 .RS 21n
       
  2210 .rt  
       
  2211 True(如果 \fIfile\fR 存在,并且可供当前进程写入)。
       
  2212 .RE
       
  2213 
       
  2214 .sp
       
  2215 .ne 2
       
  2216 .mk
       
  2217 .na
       
  2218 \fB\fB-x\fR \fIfile\fR\fR
       
  2219 .ad
       
  2220 .RS 21n
       
  2221 .rt  
       
  2222 True(如果 \fIfile\fR 存在,并且可供当前进程执行)。如果 \fIfile\fR 存在且为目录,并且如果当前进程有权在此目录中搜索,则为 True。
       
  2223 .RE
       
  2224 
       
  2225 .sp
       
  2226 .ne 2
       
  2227 .mk
       
  2228 .na
       
  2229 \fB\fB-z\fR \fIstring\fR\fR
       
  2230 .ad
       
  2231 .RS 21n
       
  2232 .rt  
       
  2233 True(如果 \fIstring\fR 的长度为零)。
       
  2234 .RE
       
  2235 
       
  2236 .sp
       
  2237 .ne 2
       
  2238 .mk
       
  2239 .na
       
  2240 \fB\fIfile1\fR \fB-ef\fR \fIfile2\fR\fR
       
  2241 .ad
       
  2242 .RS 21n
       
  2243 .rt  
       
  2244 True(如果 \fIfile1\fR 和 \fIfile2\fR 存在,并且引用同一文件)。
       
  2245 .RE
       
  2246 
       
  2247 .sp
       
  2248 .ne 2
       
  2249 .mk
       
  2250 .na
       
  2251 \fB\fIfile1\fR \fB-nt\fR \fIfile2\fR\fR
       
  2252 .ad
       
  2253 .RS 21n
       
  2254 .rt  
       
  2255 True(如果 \fIfile1\fR 存在且 \fIfile2\fR 不存在,或者 \fIfile1\fR 比 \fIfile2\fR 更新)。
       
  2256 .RE
       
  2257 
       
  2258 .sp
       
  2259 .ne 2
       
  2260 .mk
       
  2261 .na
       
  2262 \fB\fIfile1\fR \fB-ot\fR \fIfile2\fR\fR
       
  2263 .ad
       
  2264 .RS 21n
       
  2265 .rt  
       
  2266 True(如果 \fIfile2\fR 存在且 \fIfile1\fR 不存在,或者 \fIfile1\fR 比 \fIfile2\fR 更旧)。
       
  2267 .RE
       
  2268 
       
  2269 .sp
       
  2270 .ne 2
       
  2271 .mk
       
  2272 .na
       
  2273 \fB\fIstring\fR\fR
       
  2274 .ad
       
  2275 .RS 21n
       
  2276 .rt  
       
  2277 True(如果 \fIstring\fR 不为 null)。
       
  2278 .RE
       
  2279 
       
  2280 .sp
       
  2281 .ne 2
       
  2282 .mk
       
  2283 .na
       
  2284 \fB\fIstring\fR \fB==\fR \fIpattern\fR\fR
       
  2285 .ad
       
  2286 .RS 21n
       
  2287 .rt  
       
  2288 True(如果 \fIstring\fR 与 \fIpattern\fR 匹配)。可引用 \fIpattern\fR 的任何部分,以将其作为字符串匹配。成功匹配 \fIpattern\fR 后,\fB\&.sh.match\fR 数组变量将包含匹配项和子模式匹配项。
       
  2289 .RE
       
  2290 
       
  2291 .sp
       
  2292 .ne 2
       
  2293 .mk
       
  2294 .na
       
  2295 \fB\fIstring\fR \fB=\fR \fIpattern\fR\fR
       
  2296 .ad
       
  2297 .RS 21n
       
  2298 .rt  
       
  2299 与 \fB==\fR 相同,但已过时。
       
  2300 .RE
       
  2301 
       
  2302 .sp
       
  2303 .ne 2
       
  2304 .mk
       
  2305 .na
       
  2306 \fB\fIstring\fR \fB!=\fR \fIpattern\fR\fR
       
  2307 .ad
       
  2308 .RS 21n
       
  2309 .rt  
       
  2310 True(如果 \fIstring\fR 与 \fIpattern\fR 不匹配)。如果 \fIstring\fR 与 \fIpattern\fR 匹配,\fB\&.sh.match\fR 数组变量将包含匹配项和子模式匹配项。
       
  2311 .RE
       
  2312 
       
  2313 .sp
       
  2314 .ne 2
       
  2315 .mk
       
  2316 .na
       
  2317 \fB\fIstring\fR \fB=~\fR \fIere\fR\fR
       
  2318 .ad
       
  2319 .RS 21n
       
  2320 .rt  
       
  2321 True(如果 \fIstring\fR 与模式 \fB~(E)\fR\fIere\fR 匹配,其中 \fIere\fR 是扩展的正则表达式)。
       
  2322 .RE
       
  2323 
       
  2324 .sp
       
  2325 .ne 2
       
  2326 .mk
       
  2327 .na
       
  2328 \fB\fIstring1\fR \fB<\fR \fIstring2\fR\fR
       
  2329 .ad
       
  2330 .RS 21n
       
  2331 .rt  
       
  2332 True(如果根据字符的 \fBASCII\fR 值,\fIstring1\fR 位于 \fIstring2\fR 之前)。
       
  2333 .RE
       
  2334 
       
  2335 .sp
       
  2336 .ne 2
       
  2337 .mk
       
  2338 .na
       
  2339 \fB\fIstring1\fR \fB>\fR \fIstring2\fR\fR
       
  2340 .ad
       
  2341 .RS 21n
       
  2342 .rt  
       
  2343 True(如果根据字符的 \fBASCII\fR 值,\fIstring1\fR 位于 \fIstring2\fR 之后)。
       
  2344 .RE
       
  2345 
       
  2346 .sp
       
  2347 .LP
       
  2348 在下列每个表达式中,如果 \fIfile\fR 格式为 \fB/dev/fd/\fR\fIn\fR(其中 \fIn\fR 为整数),测试则应用于描述符编号为 \fIn\fR 的打开文件。支持下列已过时的算术比较: 
       
  2349 .sp
       
  2350 .ne 2
       
  2351 .mk
       
  2352 .na
       
  2353 \fB\fIexp1\fR \fB-eq\fR \fIexp2\fR\fR
       
  2354 .ad
       
  2355 .RS 17n
       
  2356 .rt  
       
  2357 True(如果 \fIexp1\fR 等于 \fIexp2\fR)。
       
  2358 .RE
       
  2359 
       
  2360 .sp
       
  2361 .ne 2
       
  2362 .mk
       
  2363 .na
       
  2364 \fB\fIexp1\fR \fB-ge\fR \fIexp2\fR\fR
       
  2365 .ad
       
  2366 .RS 17n
       
  2367 .rt  
       
  2368 True(如果 \fIexp1\fR 大于或等于 \fIexp2\fR)。
       
  2369 .RE
       
  2370 
       
  2371 .sp
       
  2372 .ne 2
       
  2373 .mk
       
  2374 .na
       
  2375 \fB\fIexp1\fR \fB-gt\fR \fIexp2\fR\fR
       
  2376 .ad
       
  2377 .RS 17n
       
  2378 .rt  
       
  2379 True(如果 \fIexp1\fR 大于 \fIexp2\fR)。
       
  2380 .RE
       
  2381 
       
  2382 .sp
       
  2383 .ne 2
       
  2384 .mk
       
  2385 .na
       
  2386 \fB\fIexp1\fR \fB-le\fR \fIexp2\fR\fR
       
  2387 .ad
       
  2388 .RS 17n
       
  2389 .rt  
       
  2390 True(如果 \fIexp1\fR 小于或等于 \fIexp2\fR)。
       
  2391 .RE
       
  2392 
       
  2393 .sp
       
  2394 .ne 2
       
  2395 .mk
       
  2396 .na
       
  2397 \fB\fIexp1\fR \fB-lt\fR \fIexp2\fR\fR
       
  2398 .ad
       
  2399 .RS 17n
       
  2400 .rt  
       
  2401 True(如果 \fIexp1\fR 小于 \fIexp2\fR)。
       
  2402 .RE
       
  2403 
       
  2404 .sp
       
  2405 .ne 2
       
  2406 .mk
       
  2407 .na
       
  2408 \fB\fIexp1\fR \fB-ne\fR \fIexp2\fR\fR
       
  2409 .ad
       
  2410 .RS 17n
       
  2411 .rt  
       
  2412 True(如果 \fIexp1\fR 不等于 \fIexp2\fR)。
       
  2413 .RE
       
  2414 
       
  2415 .sp
       
  2416 .LP
       
  2417 通过使用下列任何基元,可以使用这些基元构成复合表达式(这些基元按优先级的降序顺序列出):
       
  2418 .sp
       
  2419 .ne 2
       
  2420 .mk
       
  2421 .na
       
  2422 \fB\fB(\fR\fI表达式\fR\fB)\fR\fR
       
  2423 .ad
       
  2424 .RS 30n
       
  2425 .rt  
       
  2426 True(如果 \fIexpression\fR 为 True)。用于对表达式进行分组。
       
  2427 .RE
       
  2428 
       
  2429 .sp
       
  2430 .ne 2
       
  2431 .mk
       
  2432 .na
       
  2433 \fB\fB!\fR \fI表达式\fR\fR
       
  2434 .ad
       
  2435 .RS 30n
       
  2436 .rt  
       
  2437 True(如果 \fIexpression\fR 为 False)。
       
  2438 .RE
       
  2439 
       
  2440 .sp
       
  2441 .ne 2
       
  2442 .mk
       
  2443 .na
       
  2444 \fB\fIexpression1\fR \fB&&\fR \fIexpression2\fR\fR
       
  2445 .ad
       
  2446 .RS 30n
       
  2447 .rt  
       
  2448 True(如果 \fIexpression1\fR 和 \fIexpression2\fR 均为 True)。
       
  2449 .RE
       
  2450 
       
  2451 .sp
       
  2452 .ne 2
       
  2453 .mk
       
  2454 .na
       
  2455 \fB\fIexpression1\fR \fB||\fR \fIexpression2\fR\fR
       
  2456 .ad
       
  2457 .RS 30n
       
  2458 .rt  
       
  2459 True(如果 \fIexpression1\fR 或 \fIexpression2\fR 为 True)。
       
  2460 .RE
       
  2461 
       
  2462 .SS "输入和输出"
       
  2463 .sp
       
  2464 .LP
       
  2465 执行命令之前,使用 shell 解释的特殊表示法可以重定向该命令的输入和输出。以下内容可显示在简单命令中的任意位置,也可以位于命令之前或之后,并且\fB不\fR会传递给调用的命令。除非此部分另行说明,否则在使用 \fIword\fR 或 \fIdigit\fR 之前执行命令替换、参数扩展和算术替换。仅当 shell 为交互式 shell 并且模式与某个文件匹配时,才会执行文件名生成。不会执行字段分隔。
       
  2466 .sp
       
  2467 .LP
       
  2468 在下列每个重定向中,如果 \fIfile\fR 格式为 \fB/dev/sctp/\fR\fIhost\fR\fB/\fR\fIport\fR、\fB/dev/tcp/\fR\fIhost\fR\fB/\fR\fI port\fR 或 \fB/dev/udp/\fR\fIhost\fR\fB/\fR\fIport\fR(其中 \fIhost\fR 为主机名或主机地址,\fIport\fR 为名称指定的服务或整数端口号),重定向会尝试建立到相应套接字的 \fBtcp\fR、\fBsctp\fR 或 \fBudp\fR 连接。
       
  2469 .sp
       
  2470 .LP
       
  2471 禁止在重定向运算符的字符之间使用中间空格。
       
  2472 .sp
       
  2473 .ne 2
       
  2474 .mk
       
  2475 .na
       
  2476 \fB\fB<\fR\fIword\fR\fR
       
  2477 .ad
       
  2478 .RS 14n
       
  2479 .rt  
       
  2480 使用文件 \fIword\fR 作为标准输入(文件描述符 0)。 
       
  2481 .RE
       
  2482 
       
  2483 .sp
       
  2484 .ne 2
       
  2485 .mk
       
  2486 .na
       
  2487 \fB\fB>\fR\fIword\fR\fR
       
  2488 .ad
       
  2489 .RS 14n
       
  2490 .rt  
       
  2491 使用文件 \fIword\fR 作为标准输出(文件描述符 1)。如果文件不存在,则会创建一个文件。如果文件存在,并且启用了 \fBnoclobber\fR 选项,则会导致错误。否则会将其截断为零长度。
       
  2492 .RE
       
  2493 
       
  2494 .sp
       
  2495 .ne 2
       
  2496 .mk
       
  2497 .na
       
  2498 \fB\fB>|\fR\fIword\fR\fR
       
  2499 .ad
       
  2500 .RS 14n
       
  2501 .rt  
       
  2502 与 \fB>\fR 相同,但它会覆盖 \fBnoclobber\fR 选项。
       
  2503 .RE
       
  2504 
       
  2505 .sp
       
  2506 .ne 2
       
  2507 .mk
       
  2508 .na
       
  2509 \fB\fB>>\fR\fIword\fR\fR
       
  2510 .ad
       
  2511 .RS 14n
       
  2512 .rt  
       
  2513 使用文件 \fIword\fR 作为标准输出。如果文件存在,则会将输出附加到此文件(通过首先查找到文件结尾)。否则会创建文件。 
       
  2514 .RE
       
  2515 
       
  2516 .sp
       
  2517 .ne 2
       
  2518 .mk
       
  2519 .na
       
  2520 \fB\fB<>\fR\fIword\fR\fR
       
  2521 .ad
       
  2522 .RS 14n
       
  2523 .rt  
       
  2524 打开文件 \fIword\fR 以便作为标准输入读取和写入。
       
  2525 .RE
       
  2526 
       
  2527 .sp
       
  2528 .ne 2
       
  2529 .mk
       
  2530 .na
       
  2531 \fB\fB<<\fR\fB[-]\fR\fIword\fR\fR
       
  2532 .ad
       
  2533 .RS 14n
       
  2534 .rt  
       
  2535 读取在删除任何引用后与 \fIword\fR 相同的行之前或文件结尾之前的 shell 输入。不会对 \fIword\fR 执行参数替换、命令替换、算术替换或文件名生成。生成的名为 \fBhere-document\fR 的文档将成为标准输入。如果引用了 \fIword\fR 的任何字符,则不会对文档的字符进行任何解释。否则会执行参数扩展、命令替换和算术替换,忽略 \fB\e\fR换行符,并且必须使用 \fB\e\fR 引用字符 \fB\e\fR、\fB$\fR、\fB`\fR。如果将 \fB-\fR 附加到 \fB<<\fR,则会从 \fIword\fR 和文档删除所有前导制表符。如果将 \fB#\fR 附加到 \fB<<\fR,则会从文档的第一行中删除前导空格和制表符,并从其余行和 \fIword\fR 中最多删除等效的缩排。制表停止位置应每 8 列出现一次,以便确定缩排。
       
  2536 .RE
       
  2537 
       
  2538 .sp
       
  2539 .ne 2
       
  2540 .mk
       
  2541 .na
       
  2542 \fB\fB<<<\fR\fIword\fR\fR
       
  2543 .ad
       
  2544 .RS 14n
       
  2545 .rt  
       
  2546 生成 here document 的简捷形式,在此简捷形式中,在执行任何参数扩展、命令替换和算术替换之后,\fIword\fR 将成为 here-document 的内容。
       
  2547 .RE
       
  2548 
       
  2549 .sp
       
  2550 .ne 2
       
  2551 .mk
       
  2552 .na
       
  2553 \fB\fB<&\fR\fIdigit\fR\fR
       
  2554 .ad
       
  2555 .RS 14n
       
  2556 .rt  
       
  2557 从文件描述符 \fIdigit\fR 复制标准输入,类似地,对于标准输出,请使用 \fB>&\fR\fIdigit\fR。请参见 \fBdup\fR(2)。
       
  2558 .RE
       
  2559 
       
  2560 .sp
       
  2561 .ne 2
       
  2562 .mk
       
  2563 .na
       
  2564 \fB\fB<&\fR\fIdigit\fR\fB-\fR\fR
       
  2565 .ad
       
  2566 .RS 14n
       
  2567 .rt  
       
  2568 将 \fIdigit\fR 指定的文件描述符移至标准输入。类似地,对于标准输出,请使用 \fB>&\fR\fIdigit\fR\fB-\fR。
       
  2569 .RE
       
  2570 
       
  2571 .sp
       
  2572 .ne 2
       
  2573 .mk
       
  2574 .na
       
  2575 \fB\fB<&-\fR\fR
       
  2576 .ad
       
  2577 .RS 14n
       
  2578 .rt  
       
  2579 关闭标准输入。类似地,对于标准输出,请使用 \fB>&-\fR。
       
  2580 .RE
       
  2581 
       
  2582 .sp
       
  2583 .ne 2
       
  2584 .mk
       
  2585 .na
       
  2586 \fB\fB<&p\fR\fR
       
  2587 .ad
       
  2588 .RS 14n
       
  2589 .rt  
       
  2590 将协同进程的输入移至标准输入。 
       
  2591 .RE
       
  2592 
       
  2593 .sp
       
  2594 .ne 2
       
  2595 .mk
       
  2596 .na
       
  2597 \fB\fB>&p\fR\fR
       
  2598 .ad
       
  2599 .RS 14n
       
  2600 .rt  
       
  2601 将协同进程的输出移至标准输出。
       
  2602 .RE
       
  2603 
       
  2604 .sp
       
  2605 .ne 2
       
  2606 .mk
       
  2607 .na
       
  2608 \fB\fB<#((\fR\fIexpr\fR\fB))\fR\fR
       
  2609 .ad
       
  2610 .RS 14n
       
  2611 .rt  
       
  2612 计算算术表达式 \fIexpr\fR,并将文件描述符 0 放置在离文件开头的字节数为生成的值的相应位置。当计算 \fIexpr\fR 时,变量 \fBCUR\fR 和 \fBEOF\fR 的计算结果分别为当前偏移和文件结尾偏移。
       
  2613 .RE
       
  2614 
       
  2615 .sp
       
  2616 .ne 2
       
  2617 .mk
       
  2618 .na
       
  2619 \fB\fB>#((\fR\fIexpr\fR\fB))\fR\fR
       
  2620 .ad
       
  2621 .RS 14n
       
  2622 .rt  
       
  2623 与 \fB<#\fR 相同,但应用于文件描述符 1。
       
  2624 .RE
       
  2625 
       
  2626 .sp
       
  2627 .ne 2
       
  2628 .mk
       
  2629 .na
       
  2630 \fB\fB<#\fR\fIpattern\fR\fR
       
  2631 .ad
       
  2632 .RS 14n
       
  2633 .rt  
       
  2634 向前查找到包含模式的下一行的开头。
       
  2635 .RE
       
  2636 
       
  2637 .sp
       
  2638 .ne 2
       
  2639 .mk
       
  2640 .na
       
  2641 \fB\fB<##\fR\fIpattern\fR\fR
       
  2642 .ad
       
  2643 .RS 14n
       
  2644 .rt  
       
  2645 与 \fB<#\fR 相同,但将跳过的文件部分复制到标准输出。
       
  2646 .RE
       
  2647 
       
  2648 .sp
       
  2649 .LP
       
  2650 如果某个重定向运算符前面带有一个数字,并且没有任何中间空格,引用的文件描述符编号即为该数字(而非缺省值 0 或 1)指定的文件描述符编号。 如果除 \fB>&-\fR、\fB>#\fR 和 \fB<#\fR 格式以外的其他某个重定向运算符前面带有 \fB{\fR\fIvarname\fR\fB}\fR,且无中间空格,shell 则会选择 \fB> 10\fR 的文件描述符编号,并将其存储在变量 \fIvarname\fR 中。如果 \fB>&-\fR、任何 \fB>#\fR 及 \fB<#\fR 格式前面带有 \fB{\fR\fIvarname\fR\fB}\fR,\fIvarname\fR 的值定义要关闭或定位的文件描述符。例如:
       
  2651 .sp
       
  2652 .in +2
       
  2653 .nf
       
  2654 \&... 2>&1
       
  2655 .fi
       
  2656 .in -2
       
  2657 .sp
       
  2658 
       
  2659 .sp
       
  2660 .LP
       
  2661 表示打开文件描述符 2 以便作为文件描述符 1 的副本写入,
       
  2662 .sp
       
  2663 .in +2
       
  2664 .nf
       
  2665 exec [\fIn\fR]<\fIfile\fR
       
  2666 .fi
       
  2667 .in -2
       
  2668 .sp
       
  2669 
       
  2670 .sp
       
  2671 .LP
       
  2672 表示打开\fI文件\fR以便读取,并将文件描述符编号存储在变量 \fIn\fR 中。重定向的指定顺序至关重要。shell 根据评估时的(\fI文件描述符\fR、\fI文件\fR)关联来评估每个重定向。例如:
       
  2673 .sp
       
  2674 .in +2
       
  2675 .nf
       
  2676 \&... 1>\fIfname\fR 2>&1
       
  2677 .fi
       
  2678 .in -2
       
  2679 .sp
       
  2680 
       
  2681 .sp
       
  2682 .LP
       
  2683 首先将文件描述符 1 与文件 \fIfname\fR 关联。然后,它将文件描述符 2 与文件描述符 1 的关联文件(即 \fIfname\fR)相关联。如果颠倒重定向顺序,文件描述符 2 将与终端关联(假定文件描述符 1 已与此终端关联),文件描述符 1 将与文件 \fIfname\fR 关联。如果命令后跟有 \fB&\fR,并且作业控制处于非活动状态,该命令的缺省标准输入则为空文件 \fB/dev/null\fR。否则,命令执行环境包含调用根据输入和输出规范修改的 shell 的文件描述符。
       
  2684 .SS "环境"
       
  2685 .sp
       
  2686 .LP
       
  2687 \fI环境\fR是按照标准参数列表的相同传递方式传递给执行程序的名称-值对列表。请参见 \fBenviron\fR(5)。
       
  2688 .sp
       
  2689 .LP
       
  2690 这些名称必须是\fI标识符\fR,值必须是字符串。shell 采用多种方式与环境交互。shell 在调用时扫描环境,为找到的每个名称创建一个变量,为变量指定相应值和属性,并将其标记为 \fBexport\fR。执行命令继承此环境。如果用户使用 \fBexport\fR 或 \fBtypeset\fR \fB-x\fR 命令修改了这些变量的值或创建了新的变量,这些变量将成为环境的一部分。因此,向任何执行命令显示的环境包括 shell 最初继承的所有名称-值对(当前 shell 可修改这些名称-值对的值)以及必须在 \fBexport\fR 或 \fBtypeset\fR \fB-x\fR 命令中说明的所有添加内容。通过在任何简单命令或函数前面添加一个或多个变量赋值作为前缀,可以扩展这些简单命令或函数的环境。变量赋值参数是\fI标识符\fR\fB=\fR\fI值\fR格式的单词。因此:
       
  2691 .sp
       
  2692 .in +2
       
  2693 .nf
       
  2694 TERM=450 cmd args
       
  2695 .fi
       
  2696 .in -2
       
  2697 .sp
       
  2698 
       
  2699 .sp
       
  2700 .LP
       
  2701
       
  2702 .sp
       
  2703 .in +2
       
  2704 .nf
       
  2705 (export TERM; TERM=450; cmd args)
       
  2706 .fi
       
  2707 .in -2
       
  2708 .sp
       
  2709 
       
  2710 .sp
       
  2711 .LP
       
  2712 等效(就执行 \fIcmd\fR 而言,\fB内置命令\fR部分中列出的特殊内置命令除外,这些命令的前面带有一个剑形符号)。如果设置了已过时的 \fB-k\fR 选项,所有变量赋值参数都会放置到环境中,即使这些变量赋值参数出现在命令名称之后。 
       
  2713 .sp
       
  2714 .LP
       
  2715 下面的示例首先输出 \fBa=b c\fR,然后输出 \fBc\fR:
       
  2716 .sp
       
  2717 .in +2
       
  2718 .nf
       
  2719 echo a=b c
       
  2720 set -k
       
  2721 echo a=b c
       
  2722 .fi
       
  2723 .in -2
       
  2724 .sp
       
  2725 
       
  2726 .sp
       
  2727 .LP
       
  2728 此功能旨在用于为早期 shell 版本编写的脚本,强烈建议不要将此功能用于新脚本中。
       
  2729 .SS "函数"
       
  2730 .sp
       
  2731 .LP
       
  2732 出于历史原因,定义函数有两种方法,即 \fBname()\fR 语法和 \fBfunction\fR \fBname\fR 语法。本手册页的\fB命令\fR部分介绍了这两种方法。 
       
  2733 .sp
       
  2734 .LP
       
  2735 Shell 函数在内部读取和存储。别名在读取函数时解析。函数的执行方式与将参数作为位置参数传递的命令相似。有关详细信息,请参见本手册页的\fB执行\fR部分。
       
  2736 .sp
       
  2737 .LP
       
  2738 根据 \fBfunction\fR \fBname\fR 语法定义并按照名称调用的函数与调用者在同一进程中执行,并与调用者共享所有文件和现有工作目录。调用者捕获的陷阱在函数中重置为其缺省操作。函数未捕获或忽略的陷阱条件导致该函数终止,并将此条件传递给调用者。函数完成之后,在 \fBEXIT\fR 时在函数内部设置的陷阱将在调用者的环境中执行。通常在调用程序和函数之间共享变量。但是,在函数中使用的 \fBtypeset\fR 特殊内置命令定义其作用域包括当前函数的局部变量。这些局部变量可以在调用之前传递给变量赋值列表中的调用函数,或者作为以名称引用形式传递的参数传递。函数中的错误将控制权返回给调用者。
       
  2739 .sp
       
  2740 .LP
       
  2741 通过 \fB\&.\fR 特殊内置命令调用的使用 \fBname()\fR 语法定义的函数以及使用 \fBfunction\fR \fBname\fR 语法定义的函数在调用者的环境中执行,并且与调用者共享所有变量和陷阱。在执行这些函数的过程中出现的错误导致函数所在的脚本中止。
       
  2742 .sp
       
  2743 .LP
       
  2744 特殊内置命令 \fBreturn\fR 用于从函数调用返回。
       
  2745 .sp
       
  2746 .LP
       
  2747 使用 \fBtypeset\fR 特殊内置命令的 \fB-f\fR 或 \fB+f\fR 选项可以列出函数名称。使用 \fB-f\fR 还可以列出函数文本(如果可用)。使用 \fBunset\fR 特殊内置命令的 \fB-f\fR 选项可以取消定义函数。
       
  2748 .sp
       
  2749 .LP
       
  2750 函数通常在 shell 执行 shell 脚本时取消设置。必须跨不同 shell 调用定义的函数应放置在目录中,并且 \fBFPATH\fR 变量应包含此目录的名称。也可以在 \fBENV\fR 文件中指定这些函数。
       
  2751 .SS "规程函数"
       
  2752 .sp
       
  2753 .LP
       
  2754 每个变量都可以关联有零个或多个规程函数。shell 最初了解规程名称 \fBget\fR、\fBset\fR、\fBappend\fR 和 \fBunset\fR,但是在大多数系统中,通过 \fBbuiltin\fR 内置实用程序提供的 C 编程接口扩展可以在运行时添加其他规程名称。如果为变量定义了 \fBget\fR 规程,则会在引用指定变量时调用此规程。如果为规程函数中的变量 \fB\&.sh.value\fR 分配了一个值,引用的变量的计算结果将为此值。如果为变量定义了 \fBset\fR 规程,则会在为指定变量分配值时调用此规程。如果为变量定义了 \fBappend\fR 规程,则会在将值附加到指定变量时调用此规程。在调用规程之前,为变量 \fB\&.sh.value\fR 指定该变量的值,在规程结束之后,为该变量分配 \fB\&.sh.value\fR 的值。如果在规程中\fB取消设置\fR .\fBsh.value\fR,该值将保持不变。如果为变量定义了 \fBunset\fR 规程,则会在取消设置指定变量时调用此规程。除非从此规程函数中显式取消设置变量,否则无法取消设置此变量。
       
  2755 .sp
       
  2756 .LP
       
  2757 变量 \fB\&.sh.name\fR 包含调用了规程函数的变量的名称,\fB\&.sh.subscript\fR 是此变量的下标,\fB\&.sh.value\fR 包含在 \fBset\fR 规程函数中分配的值。对于 \fBset\fR 规程,更改 \fB\&.sh.value\fR 会更改分配的值。 
       
  2758 .SS "作业"
       
  2759 .sp
       
  2760 .LP
       
  2761 如果启用 \fBset\fR 命令的 monitor 选项,交互式 shell 会将作业与每个管道相关联。shell 保存当前作业的表,并使用 \fBjobs\fR 命令输出此表,然后为这些作业分配较小的整数。使用 \fB&\fR 异步启动作业时,shell 输出如下行:
       
  2762 .sp
       
  2763 .in +2
       
  2764 .nf
       
  2765 [1] 1234
       
  2766 .fi
       
  2767 .in -2
       
  2768 .sp
       
  2769 
       
  2770 .sp
       
  2771 .LP
       
  2772 这表示异步启动的作业的作业编号为 1,并且该作业具有一个(顶级)进程,其进程 ID 为 \fB1234\fR。
       
  2773 .sp
       
  2774 .LP
       
  2775 如果您正在运行作业,并且希望停止此作业,按 Ctrl-z 可向当前作业发送一个 \fBSTOP\fR 信号。shell 通常会显示一则该作业已停止的消息,并且会显示其他提示。然后,您可以处理此作业的状态,使用 \fBbg\fR 命令将其放置到后台,或者运行某些其他命令,最后使用前台命令 \fBfg\fR 将其放回到前台。Ctrl-z 立即生效,并在键入时放弃暂挂输出和未读输入,因此它与中断相似。
       
  2776 .sp
       
  2777 .LP
       
  2778 如果在后台运行的作业尝试从终端读取,则会停止该作业。通常允许后台作业生成输出,但是通过指定命令 \fBsttytostop\fR 可以禁用此功能。如果设置了此 \fBtty\fR 选项,后台作业将在尝试生成输出时停止,就像在尝试读取输入时停止一样。 
       
  2779 .sp
       
  2780 .LP
       
  2781 在 shell 中引用作业有多种方法。根据作业的任何进程的进程 ID 或下列各项之一可以引用作业:
       
  2782 .sp
       
  2783 .ne 2
       
  2784 .mk
       
  2785 .na
       
  2786 \fB\fB%\fR\fInumber\fR\fR
       
  2787 .ad
       
  2788 .RS 12n
       
  2789 .rt  
       
  2790 带有指定编号的作业。
       
  2791 .RE
       
  2792 
       
  2793 .sp
       
  2794 .ne 2
       
  2795 .mk
       
  2796 .na
       
  2797 \fB\fB%\fR\fIstring\fR\fR
       
  2798 .ad
       
  2799 .RS 12n
       
  2800 .rt  
       
  2801 命令行以\fI字符串\fR开头的所有作业。
       
  2802 .RE
       
  2803 
       
  2804 .sp
       
  2805 .ne 2
       
  2806 .mk
       
  2807 .na
       
  2808 \fB\fB%?\fR\fIstring\fR\fR
       
  2809 .ad
       
  2810 .RS 12n
       
  2811 .rt  
       
  2812 命令行包含\fI字符串\fR的所有作业。
       
  2813 .RE
       
  2814 
       
  2815 .sp
       
  2816 .ne 2
       
  2817 .mk
       
  2818 .na
       
  2819 \fB\fB%%\fR\fR
       
  2820 .ad
       
  2821 .RS 12n
       
  2822 .rt  
       
  2823 当前作业。
       
  2824 .RE
       
  2825 
       
  2826 .sp
       
  2827 .ne 2
       
  2828 .mk
       
  2829 .na
       
  2830 \fB\fB%+\fR\fR
       
  2831 .ad
       
  2832 .RS 12n
       
  2833 .rt  
       
  2834 等效于 \fB%%\fR。
       
  2835 .RE
       
  2836 
       
  2837 .sp
       
  2838 .ne 2
       
  2839 .mk
       
  2840 .na
       
  2841 \fB\fB%-\fR\fR
       
  2842 .ad
       
  2843 .RS 12n
       
  2844 .rt  
       
  2845 以前的作业。
       
  2846 .RE
       
  2847 
       
  2848 .sp
       
  2849 .LP
       
  2850 当进程更改状态时,shell 可立即获悉。当作业已被阻塞以致无法执行其他进程时,shell 通常会向您发送通知,但仅在输出提示前发送此通知。其目的是为了避免打扰您的工作。\fBset\fR 命令的通知选项导致 shell 在作业发生更改时立即输出这些作业更改消息。
       
  2851 .sp
       
  2852 .LP
       
  2853 启用 \fBmonitor\fR 选项后,完成的每个后台作业都会触发为 \fBCHLD\fR 设置的所有陷阱。
       
  2854 .sp
       
  2855 .LP
       
  2856 如果您尝试在作业正在运行或已停止时退出 shell,系统会向您发送\fB您已经停止(在运行)作业\fR警告。使用 \fBjobs\fR 命令可以查看这些作业。如果您立即尝试再次退出,shell 不会向您发出第二次警告,而会终止停止的作业。登录 shell 收到 \fBHUP\fR 信号后,它会将 \fBHUP\fR 信号发送到未使用 \fBdisown\fR 内置命令否认的每个作业。
       
  2857 .SS "信号"
       
  2858 .sp
       
  2859 .LP
       
  2860 如果调用的命令后跟有 \fB&\fR,并且 \fBmonitor\fR 选项处于非活动状态,则会忽略该命令的 \fBINT\fR 和 \fBQUIT\fR 信号。否则,信号具有 shell 从父级继承的值。请参见 \fBtrap\fR 内置命令。
       
  2861 .SS "执行"
       
  2862 .sp
       
  2863 .LP
       
  2864 每次读取命令时都会执行替换。如果命令名称与本手册页的\fB特殊内置命令\fR部分中的某个命令名称相匹配,则会在当前 shell 进程中执行此命令。接着,系统会检查此命令名称,查看其是否与某个用户定义函数匹配。如果匹配,则会保存位置参数,并将其重置为函数调用的参数。函数同样在当前 shell 进程中执行。函数完成或发出返回命令之后,系统将恢复位置参数列表。对于使用 \fBfunction\fR \fBname\fR 语法定义的函数,系统将执行在 \fBEXIT\fR 时在函数中设置的所有陷阱。函数的退出值即为执行的最后一个命令的值。如果命令名称不是特殊内置命令或用户定义函数,而是某个内置命令,则会在当前 shell 进程中执行此命令。
       
  2865 .sp
       
  2866 .LP
       
  2867 shell 变量 \fBPATH\fR 定义此命令所在的目录的搜索路径。备用路径名称使用冒号 (\fB:\fR) 分隔。缺省路径为 \fB/bin:/usr/bin:\fR,并按此顺序指定 \fB/bin\fR、\fB/usr/bin\fR 和当前目录。可以使用两个或多个相邻冒号指定当前目录,也可以使用位于路径列表开头或末尾的一个冒号来指定当前目录。如果命令名称包含斜杠 (\fB/\fR),则不会使用搜索路径。否则,将在此路径的每个目录中搜索具有指定名称的可执行文件(不是目录)。如果找到此文件,并且如果 shell 确定存在与指定路径名对应的内置命令版本,则会在当前进程中调用此内置命令。如果找到此文件,并且此目录还包含在 \fBFPATH\fR 变量的值中,则会将此文件装载到当前 shell 环境,就像是 . 命令的参数一样(除非只扩展预设别名),并按照本手册页中的说明执行具有指定名称的函数。如果未找到此文件,但找到文件 \fB\&.paths\fR,并且此文件包含一个 \fBFPATH=\fR\fIpath\fR 格式的行,其中 \fIpath\fR 是现有目录,并且此目录包含具有指定名称的文件,那么,则会将此文件装载到当前 shell 环境,就像是 \fB\&.特殊\fR内置命令的参数一样,并执行具有指定名称的函数。否则,如果找到此文件,则会创建一个进程,并尝试使用 \fBexec\fR(2) 执行命令。
       
  2868 .sp
       
  2869 .LP
       
  2870 找到可执行文件后,系统将在此可执行文件所在的目录中搜索名为 \fB\&.paths\fR 的文件。如果找到此文件,并且该文件包含一个 \fBBUILTIN_LIB=\fR\fIvalue\fR 格式的行,则会搜索根据 \fIvalue\fR 命名的库,就像是 \fBbuiltin -f\fR 的选项参数一样,并且如果此文件包含具有指定名称的内置命令,则会执行此内置命令,而不会执行具有此名称的命令。否则,如果找到此文件,并且该文件的第一行或第二行中包含一个 \fIname\fR\fB=\fR\fI value\fR 格式的行,则会通过将 \fIvalue\fR 指定的目录添加到目录列表开头来修改环境变量 \fIname\fR。如果 \fIvalue\fR 不是绝对目录,则会指定一个相对于可执行文件所在目录的目录。如果环境变量 \fIname\fR 不存在,则会将其添加到指定命令的环境列表中。
       
  2871 .sp
       
  2872 .LP
       
  2873 如果此文件具有执行权限,但不是 \fBa.out\fR 文件,则假定此文件是含有 shell 命令的文件。系统会派生一个单独的 shell 来读取此文件。此种情况下,将删除所有非导出的变量。如果 shell 命令文件没有读取权限,并且/或者如果在此文件中设置了 \fBsetuid\fR 和 \fBsetgid\fR 位,此 shell 则会执行其作业为设置权限的代理,并执行此 shell,同时将此 shell 命令文件作为打开文件文件向下传递。带有括号的命令在子 shell 中执行,而不会删除非导出的变量。
       
  2874 .SS "命令重新输入"
       
  2875 .sp
       
  2876 .LP
       
  2877 从终端设备输入的最后一个 \fBHISTSIZE\fR(缺省值为 512)命令的文本保存在历史文件中。如果未设置 \fBHISTFILE\fR 变量或者如果此变量指定的文件无法写入,则会使用 \fB$HOME/.sh_history\fR。shell 可以访问使用同一名称 \fBHISTFILE\fR 的所有交互式 shell 的命令。内置命令 \fBhist\fR 用于列出或编辑此文件的某个部分。要编辑或列出的文件部分可以根据编号进行选择,或者通过指定此命令的第一个字符或前几个字符来进行选择。可以指定一个命令或一系列命令。如果未将编辑器程序指定为 \fBhist\fR 的参数,则会使用变量 \fBHISTEDIT\fR 的值。如果取消设置 \fBHISTEDIT\fR,则使用已过时的变量 \fBFCEDIT\fR。如果未定义 \fBFCEDIT\fR,则使用 \fB/bin/ed\fR。在退出编辑器时,除非您在未写入的情况下退出,否则将重新输出和执行已编辑的命令。\fB-s\fR 选项(以及已过时的版本中的编辑器名称 \fB -\fR)用于跳过编辑短语并重新执行此命令。此种情况下,在执行之前,可使用 \fIold\fR\fB=\fR\fInew\fR 格式的替换参数来修改命令。例如,使用 \fB\&'hist -s'\fR 的预设别名 \fBr\fR,键入 \fB`r bad=good c'\fR 将重新执行以字母 \fBc\fR 开头的最新命令,并将出现的第一个字符串 bad 替换为字符串 good。 
       
  2878 .SS "内嵌编辑选项"
       
  2879 .sp
       
  2880 .LP
       
  2881 通常,从终端设备输入的每个命令行在键入时仅后跟有一个换行符(回车或换行符)。如果已激活 \fBemacs\fR、\fBgmacs\fR 或 \fBvi\fR 选项,用户则可以编辑命令行。要进入这些编辑模式,请设置相应选项。每次向 \fBVISUAL\fR 或 \fBEDITOR\fR 变量分配一个以上述选项名称结尾的值时,都会自动选择编辑选项。
       
  2882 .sp
       
  2883 .LP
       
  2884 编辑功能要求用户终端将回车作为无换行符的回车接受,并且空格必须覆写屏幕上的当前字符。
       
  2885 .sp
       
  2886 .LP
       
  2887 除非启用 \fBmultiline\fR 选项,否则编辑模式会实现在当前行查看整个窗口的内容的概念。窗口宽度为 \fBCOLUMNS\fR 的值(如果定义),否则为 \fB80\fR。如果窗口宽度太小以致无法显示提示,并且至少保留了 8 列来输入相关输入,则会从左侧截断提示。如果此行长于窗口宽度减去 2 的值,则会在窗口末端显示一个标记以便通知用户。当光标移动并达到窗口边界时,该窗口会将光标放置在中间位置。如果该行向窗口右侧、左侧或两侧延伸,标记分别为 \fB>\fR、\fB<、*\fR。
       
  2888 .sp
       
  2889 .LP
       
  2890 每种编辑模式下的搜索命令都可以提供对历史文件的访问。仅匹配字符串(而非模式),但字符串中的前导 \fB^\fR 将匹配范围限制为从行中的第一个字符开始。
       
  2891 .sp
       
  2892 .LP
       
  2893 每种编辑模式都具有列出与部分输入的单词匹配的文件或命令的操作。如果对行中的第一个单词或者对 \fB;\fR、\fB|\fR、\fB&\fR 或 \fB(\fR 后的第一个单词应用此功能,并且此单词不以 \fB~\fR 开头或不包含 \fB/\fR,则会显示 \fBPATH\fR 变量定义的可与部分单词匹配的别名、函数和可执行命令的列表。否则显示与指定单词匹配的文件的列表。如果部分输入的单词不包含任何文件扩展字符,则会在生成这些列表之前附加一个 \fB*\fR。显示生成的列表之后,将重新绘制输入行。这些操作分别称为命令行列出和文件名列出操作。此外,还存在一些称为命令名称完成和文件名完成的其他操作,这些操作计算匹配命令或文件的列表,但不会输出此列表,而是用完整匹配项或部分匹配项替换当前单词。对于文件名完成操作,如果匹配项是唯一的,则会附加一个 \fB/\fR(如果该文件为目录)和空格(如果该文件不为目录)。否则会使用所有匹配文件的最长共同前缀替换此单词。对于命令名称完成,仅使用最后一个 \fB/\fR 后面的文件名部分来查找最长的命令前缀。如果只有一个名称与此前缀匹配,则会将此单词替换为此命令名称,并在后面添加一个空格。当对未生成唯一匹配项的完成操作使用\fB制表符\fR时,后续制表符将提供带有编号的匹配备用项的列表。通过输入后跟有制表符的选择编号,可以选择特定项。
       
  2894 .SS "键绑定"
       
  2895 .sp
       
  2896 .LP
       
  2897 \fBKEYBD\fR 陷阱可用于在键入键时拦截键,并更改 shell 实际看到的字符。当从终端读取时,将在输入每个字符(如果第一个字符为 ESC,则为字符序列)后执行此陷阱。
       
  2898 .sp
       
  2899 .LP
       
  2900 变量 \fB\&.sh.edchar\fR 包含生成此陷阱的字符或字符序列。在陷阱操作中更改 \fB\&.sh.edchar\fR 的值将导致 shell 的行为就像新值(而非原始值)是从键盘输入的一样。变量 \fB\&.sh.edcol\fR 设置为输入时光标所在的输入列编号。当处于 \fBvi\fR 插入模式时,变量 \fB\&.sh.edmode\fR 设置为 \fBESC\fR,在其他情况下则设置为空。在分配给 \fB\&.sh.edchar\fR 的值前面添加 \fB${.sh.editmode}\fR 将导致 shell 更改为此控制模式(如果未处于此模式下)。
       
  2901 .sp
       
  2902 .LP
       
  2903 对于作为编辑指令的参数输入的字符,或者当读取字符搜索的输入时,不会调用此陷阱。
       
  2904 .SS "\fBemacs\fR 编辑模式"
       
  2905 .sp
       
  2906 .LP
       
  2907 通过启用 \fBemacs\fR 或 \fBgmacs\fR 选项,可以进入此模式。这两种模式之间的唯一区别在于它们对 \fB^T\fR 的处理方式。要进行编辑,用户应将光标移至需要校正的位置,然后根据需要插入或删除字符或单词。所有编辑命令均为控制字符或转义序列。控制字符的表示法为后跟有字符的插入记号 (\fB^\fR)。
       
  2908 .sp
       
  2909 .LP
       
  2910 例如,\fB^F\fR 是 Ctrl/F 的表示法。按住 Ctrl(控制)键并按下 \fBf\fR 可以输入 ^F。不按下 Shift 键。(表示法 \fB^?\fR 表示 Del(删除)键。)
       
  2911 .sp
       
  2912 .LP
       
  2913 转义序列的表示法为后跟有字符的 \fBM-\fR。例如,通过先后按下 Esc (\fBASCII 033\fR) 和 \fBf\fR 可以输入 \fBM-f\fR(发音为 \fBMeta f\fR)。\fBM-F\fR 是后跟有 \fBF\fR 的 ESC 的表示法。
       
  2914 .sp
       
  2915 .LP
       
  2916 所有编辑命令都可从行中的任意位置运行,而不仅限于行开头。除非另行说明,否则不会在编辑命令之后输入回车或换行符键。
       
  2917 .sp
       
  2918 .ne 2
       
  2919 .mk
       
  2920 .na
       
  2921 \fB\fB^F\fR\fR
       
  2922 .ad
       
  2923 .RS 13n
       
  2924 .rt  
       
  2925 将光标向前(向右)移动一个字符。
       
  2926 .RE
       
  2927 
       
  2928 .sp
       
  2929 .ne 2
       
  2930 .mk
       
  2931 .na
       
  2932 \fB\fBM-[C\fR\fR
       
  2933 .ad
       
  2934 .RS 13n
       
  2935 .rt  
       
  2936 将光标向前(向右)移动一个字符。
       
  2937 .RE
       
  2938 
       
  2939 .sp
       
  2940 .ne 2
       
  2941 .mk
       
  2942 .na
       
  2943 \fB\fBM-f\fR\fR
       
  2944 .ad
       
  2945 .RS 13n
       
  2946 .rt  
       
  2947 将光标向前移动一个单词。对于 \fBemacs\fR 编辑器而言,单词是仅由字母、数字和下划线组成的字符串。
       
  2948 .RE
       
  2949 
       
  2950 .sp
       
  2951 .ne 2
       
  2952 .mk
       
  2953 .na
       
  2954 \fB\fB^B\fR\fR
       
  2955 .ad
       
  2956 .RS 13n
       
  2957 .rt  
       
  2958 将光标向后(向左)移动一个字符。
       
  2959 .RE
       
  2960 
       
  2961 .sp
       
  2962 .ne 2
       
  2963 .mk
       
  2964 .na
       
  2965 \fB\fBM-[D\fR\fR
       
  2966 .ad
       
  2967 .RS 13n
       
  2968 .rt  
       
  2969 将光标向后(向左)移动一个字符。
       
  2970 .RE
       
  2971 
       
  2972 .sp
       
  2973 .ne 2
       
  2974 .mk
       
  2975 .na
       
  2976 \fB\fBM-b\fR\fR
       
  2977 .ad
       
  2978 .RS 13n
       
  2979 .rt  
       
  2980 将光标向后移动一个单词。
       
  2981 .RE
       
  2982 
       
  2983 .sp
       
  2984 .ne 2
       
  2985 .mk
       
  2986 .na
       
  2987 \fB\fB^A\fR\fR
       
  2988 .ad
       
  2989 .RS 13n
       
  2990 .rt  
       
  2991 将光标移至行开头。
       
  2992 .RE
       
  2993 
       
  2994 .sp
       
  2995 .ne 2
       
  2996 .mk
       
  2997 .na
       
  2998 \fB\fBM-[H\fR\fR
       
  2999 .ad
       
  3000 .RS 13n
       
  3001 .rt  
       
  3002 将光标移至行开头。
       
  3003 .RE
       
  3004 
       
  3005 .sp
       
  3006 .ne 2
       
  3007 .mk
       
  3008 .na
       
  3009 \fB\fB^M\fR\fR
       
  3010 .ad
       
  3011 .RS 13n
       
  3012 .rt  
       
  3013 将光标移至行尾。
       
  3014 .RE
       
  3015 
       
  3016 .sp
       
  3017 .ne 2
       
  3018 .mk
       
  3019 .na
       
  3020 \fB\fBM-[Y\fR\fR
       
  3021 .ad
       
  3022 .RS 13n
       
  3023 .rt  
       
  3024 将光标移至行尾。
       
  3025 .RE
       
  3026 
       
  3027 .sp
       
  3028 .ne 2
       
  3029 .mk
       
  3030 .na
       
  3031 \fB\fB^]\fR\fIchar\fR\fR
       
  3032 .ad
       
  3033 .RS 13n
       
  3034 .rt  
       
  3035 将光标向前移动到当前行中的字符 \fIchar\fR。
       
  3036 .RE
       
  3037 
       
  3038 .sp
       
  3039 .ne 2
       
  3040 .mk
       
  3041 .na
       
  3042 \fB\fBM-^]\fR\fIchar\fR\fR
       
  3043 .ad
       
  3044 .RS 13n
       
  3045 .rt  
       
  3046 将光标向后移动到当前行中的字符 \fIchar\fR。
       
  3047 .RE
       
  3048 
       
  3049 .sp
       
  3050 .ne 2
       
  3051 .mk
       
  3052 .na
       
  3053 \fB\fB^X^X\fR\fR
       
  3054 .ad
       
  3055 .RS 13n
       
  3056 .rt  
       
  3057 交换光标和标记。
       
  3058 .RE
       
  3059 
       
  3060 .sp
       
  3061 .ne 2
       
  3062 .mk
       
  3063 .na
       
  3064 \fB\fIerase\fR\fR
       
  3065 .ad
       
  3066 .RS 13n
       
  3067 .rt  
       
  3068 删除上一字符。用户定义的清除字符使用 \fBstty\fR(1) 命令定义,该字符通常为 \fB^H\fR 或 \fB#\fR。 
       
  3069 .RE
       
  3070 
       
  3071 .sp
       
  3072 .ne 2
       
  3073 .mk
       
  3074 .na
       
  3075 \fB\fIlnext\fR\fR
       
  3076 .ad
       
  3077 .RS 13n
       
  3078 .rt  
       
  3079 删除下一字符的编辑功能。用户定义的下一文本字符使用 \fBstty\fR(1) 命令定义,如果未定义此字符,则为 \fB^V\fR。 
       
  3080 .RE
       
  3081 
       
  3082 .sp
       
  3083 .ne 2
       
  3084 .mk
       
  3085 .na
       
  3086 \fB\fB^D\fR\fR
       
  3087 .ad
       
  3088 .RS 13n
       
  3089 .rt  
       
  3090 删除当前字符。
       
  3091 .RE
       
  3092 
       
  3093 .sp
       
  3094 .ne 2
       
  3095 .mk
       
  3096 .na
       
  3097 \fB\fBM-d\fR\fR
       
  3098 .ad
       
  3099 .RS 13n
       
  3100 .rt  
       
  3101 删除当前单词。
       
  3102 .RE
       
  3103 
       
  3104 .sp
       
  3105 .ne 2
       
  3106 .mk
       
  3107 .na
       
  3108 \fB\fBM-^H\fR\fR
       
  3109 .ad
       
  3110 .RS 13n
       
  3111 .rt  
       
  3112 元 Back Space 键。删除上一单词。
       
  3113 .RE
       
  3114 
       
  3115 .sp
       
  3116 .ne 2
       
  3117 .mk
       
  3118 .na
       
  3119 \fB\fBM-h\fR\fR
       
  3120 .ad
       
  3121 .RS 13n
       
  3122 .rt  
       
  3123 删除上一单词。
       
  3124 .RE
       
  3125 
       
  3126 .sp
       
  3127 .ne 2
       
  3128 .mk
       
  3129 .na
       
  3130 \fB\fBM-^?\fR\fR
       
  3131 .ad
       
  3132 .RS 13n
       
  3133 .rt  
       
  3134 元 Del 键。删除上一单词。如果中断字符为 \fB^?\fR(缺省为 DEL),则不会运行此命令。
       
  3135 .RE
       
  3136 
       
  3137 .sp
       
  3138 .ne 2
       
  3139 .mk
       
  3140 .na
       
  3141 \fB\fB^T\fR\fR
       
  3142 .ad
       
  3143 .RS 13n
       
  3144 .rt  
       
  3145 在 \fBemacs\fR 模式下将当前字符与上一字符换位并向前移动光标。在 \fBgmacs\fR 模式下将前两个字符换位。
       
  3146 .RE
       
  3147 
       
  3148 .sp
       
  3149 .ne 2
       
  3150 .mk
       
  3151 .na
       
  3152 \fB\fB^C\fR\fR
       
  3153 .ad
       
  3154 .RS 13n
       
  3155 .rt  
       
  3156 大写当前字符。
       
  3157 .RE
       
  3158 
       
  3159 .sp
       
  3160 .ne 2
       
  3161 .mk
       
  3162 .na
       
  3163 \fB\fBM-c\fR\fR
       
  3164 .ad
       
  3165 .RS 13n
       
  3166 .rt  
       
  3167 大写当前单词。
       
  3168 .RE
       
  3169 
       
  3170 .sp
       
  3171 .ne 2
       
  3172 .mk
       
  3173 .na
       
  3174 \fB\fBM-l\fR\fR
       
  3175 .ad
       
  3176 .RS 13n
       
  3177 .rt  
       
  3178 将当前单词更改为小写字母。
       
  3179 .RE
       
  3180 
       
  3181 .sp
       
  3182 .ne 2
       
  3183 .mk
       
  3184 .na
       
  3185 \fB\fB^K\fR\fR
       
  3186 .ad
       
  3187 .RS 13n
       
  3188 .rt  
       
  3189 删除光标至行尾之间的内容。如果此命令前面带有一个其值小于当前光标位置的数字参数,则删除指定位置到光标之间的内容。如果此命令前面带有一个其值大于当前光标位置的数字参数,则删除光标到指定光标位置之间的内容。
       
  3190 .RE
       
  3191 
       
  3192 .sp
       
  3193 .ne 2
       
  3194 .mk
       
  3195 .na
       
  3196 \fB\fB^由 W\fR\fR
       
  3197 .ad
       
  3198 .RS 13n
       
  3199 .rt  
       
  3200 删除光标到标记之间的内容。
       
  3201 .RE
       
  3202 
       
  3203 .sp
       
  3204 .ne 2
       
  3205 .mk
       
  3206 .na
       
  3207 \fB\fBM-p\fR\fR
       
  3208 .ad
       
  3209 .RS 13n
       
  3210 .rt  
       
  3211 将光标到标记之间的区域推送到堆栈中。
       
  3212 .RE
       
  3213 
       
  3214 .sp
       
  3215 .ne 2
       
  3216 .mk
       
  3217 .na
       
  3218 \fB\fIkill\fR\fR
       
  3219 .ad
       
  3220 .RS 13n
       
  3221 .rt  
       
  3222 删除整个当前行。用户定义的删除字符使用 \fBstty\fR(1) 命令定义,该字符通常为 \fB^G\fR 或 \fB@\fR。如果连续输入了两个删除字符,从此时起输入的所有删除字符都会导致一个换行符。当使用纸张终端时,此功能非常有用。
       
  3223 .RE
       
  3224 
       
  3225 .sp
       
  3226 .ne 2
       
  3227 .mk
       
  3228 .na
       
  3229 \fB\fB^Y\fR\fR
       
  3230 .ad
       
  3231 .RS 13n
       
  3232 .rt  
       
  3233 恢复从行中删除的上一项。在行中重新输出此项。
       
  3234 .RE
       
  3235 
       
  3236 .sp
       
  3237 .ne 2
       
  3238 .mk
       
  3239 .na
       
  3240 \fB\fB^L\fR\fR
       
  3241 .ad
       
  3242 .RS 13n
       
  3243 .rt  
       
  3244 换行并输出当前行。
       
  3245 .RE
       
  3246 
       
  3247 .sp
       
  3248 .ne 2
       
  3249 .mk
       
  3250 .na
       
  3251 \fB\fBM-^L\fR\fR
       
  3252 .ad
       
  3253 .RS 13n
       
  3254 .rt  
       
  3255 清除屏幕。
       
  3256 .RE
       
  3257 
       
  3258 .sp
       
  3259 .ne 2
       
  3260 .mk
       
  3261 .na
       
  3262 \fB\fB^@\fR\fR
       
  3263 .ad
       
  3264 .RS 13n
       
  3265 .rt  
       
  3266 空字符。设置标记。
       
  3267 .RE
       
  3268 
       
  3269 .sp
       
  3270 .ne 2
       
  3271 .mk
       
  3272 .na
       
  3273 \fB\fBM-\fR\fIspace\fR\fR
       
  3274 .ad
       
  3275 .RS 13n
       
  3276 .rt  
       
  3277 元空格。设置标记。
       
  3278 .RE
       
  3279 
       
  3280 .sp
       
  3281 .ne 2
       
  3282 .mk
       
  3283 .na
       
  3284 \fB\fB^J\fR\fR
       
  3285 .ad
       
  3286 .RS 13n
       
  3287 .rt  
       
  3288 新行。执行当前行。
       
  3289 .RE
       
  3290 
       
  3291 .sp
       
  3292 .ne 2
       
  3293 .mk
       
  3294 .na
       
  3295 \fB\fB^M\fR\fR
       
  3296 .ad
       
  3297 .RS 13n
       
  3298 .rt  
       
  3299 返回。执行当前行。
       
  3300 .RE
       
  3301 
       
  3302 .sp
       
  3303 .ne 2
       
  3304 .mk
       
  3305 .na
       
  3306 \fB\fBEOF\fR\fR
       
  3307 .ad
       
  3308 .RS 13n
       
  3309 .rt  
       
  3310 仅当当前行为空时,文件结尾字符(通常为 \fB^D\fR)才会作为\fB文件结尾\fR处理。
       
  3311 .RE
       
  3312 
       
  3313 .sp
       
  3314 .ne 2
       
  3315 .mk
       
  3316 .na
       
  3317 \fB\fB^P\fR\fR
       
  3318 .ad
       
  3319 .RS 13n
       
  3320 .rt  
       
  3321 获取上一命令。每次输入 \fB^P\fR 时,都会访问前面的上一命令。如果该命令不在多行命令的第一行中,则往回移动一行。
       
  3322 .RE
       
  3323 
       
  3324 .sp
       
  3325 .ne 2
       
  3326 .mk
       
  3327 .na
       
  3328 \fB\fBM-[A\fR\fR
       
  3329 .ad
       
  3330 .RS 13n
       
  3331 .rt  
       
  3332 等效于 \fB^P\fR。
       
  3333 .RE
       
  3334 
       
  3335 .sp
       
  3336 .ne 2
       
  3337 .mk
       
  3338 .na
       
  3339 \fB\fBM-<\fR\fR
       
  3340 .ad
       
  3341 .RS 13n
       
  3342 .rt  
       
  3343 获取最早(最旧)的历史行。
       
  3344 .RE
       
  3345 
       
  3346 .sp
       
  3347 .ne 2
       
  3348 .mk
       
  3349 .na
       
  3350 \fB\fBM->\fR\fR
       
  3351 .ad
       
  3352 .RS 13n
       
  3353 .rt  
       
  3354 获取最近(最新)的历史行。
       
  3355 .RE
       
  3356 
       
  3357 .sp
       
  3358 .ne 2
       
  3359 .mk
       
  3360 .na
       
  3361 \fB\fB^N\fR\fR
       
  3362 .ad
       
  3363 .RS 13n
       
  3364 .rt  
       
  3365 获取下一命令行。每次输入 \fB^N\fR 时,都会访问后面的下一命令。
       
  3366 .RE
       
  3367 
       
  3368 .sp
       
  3369 .ne 2
       
  3370 .mk
       
  3371 .na
       
  3372 \fB\fBM-[B\fR\fR
       
  3373 .ad
       
  3374 .RS 13n
       
  3375 .rt  
       
  3376 等效于 \fB^N\fR。
       
  3377 .RE
       
  3378 
       
  3379 .sp
       
  3380 .ne 2
       
  3381 .mk
       
  3382 .na
       
  3383 \fB\fB^R\fR\fIstring\fR\fR
       
  3384 .ad
       
  3385 .RS 13n
       
  3386 .rt  
       
  3387 颠倒含有 \fIstring\fR 的上一命令行的搜索历史。如果指定参数 0,搜索则为正向搜索。\fIstring\fR 以回车或换行符结束。如果 string 前面带有 \fB^\fR,匹配行必须以 \fIstring\fR 开头。如果省略了 \fIstring\fR,则会访问包含最新的 \fIstring\fR 的下一命令行。此种情况下,参数 0 将颠倒搜索方向。
       
  3388 .RE
       
  3389 
       
  3390 .sp
       
  3391 .ne 2
       
  3392 .mk
       
  3393 .na
       
  3394 \fB\fB^O\fR\fR
       
  3395 .ad
       
  3396 .RS 13n
       
  3397 .rt  
       
  3398 运行。执行当前行,获取历史文件中相对于当前行的下一行。
       
  3399 .RE
       
  3400 
       
  3401 .sp
       
  3402 .ne 2
       
  3403 .mk
       
  3404 .na
       
  3405 \fB\fBM-\fR\fIdigits\fR\fR
       
  3406 .ad
       
  3407 .RS 13n
       
  3408 .rt  
       
  3409 转义。定义数字参数。这些数字作为下一命令的参数。接受参数的命令包括:\fB^F\fR、\fB^B\fR、\fBERASE\fR、\fB^C\fR、\fB^D\fR、\fB^K\fR、\fB^R\fR、\fB^P\fR、\fB^N\fR、\fB^]\fR、\fBM-.\fR、\fBM-\fR、\fBM-^]\fR、\fBM-_\fR、\fBM-=\fR、\fBM-b\fR、\fBM-c\fR、\fBM-d\fR、\fBM-f\fR、\fBM-h\fR、\fBM-l\fR 和 \fBM-^H\fR。
       
  3410 .RE
       
  3411 
       
  3412 .sp
       
  3413 .ne 2
       
  3414 .mk
       
  3415 .na
       
  3416 \fB\fBM-\fR\fIletter\fR\fR
       
  3417 .ad
       
  3418 .RS 13n
       
  3419 .rt  
       
  3420 软键。根据名称 \fIletter\fR 在别名列表中搜索别名。如果定义了 \fIletter\fR 的名称,则在输入队列中插入其值。\fIletter\fR 不能是此部分中的元函数之一。
       
  3421 .RE
       
  3422 
       
  3423 .sp
       
  3424 .ne 2
       
  3425 .mk
       
  3426 .na
       
  3427 \fB\fBM-[\fR\fIletter\fR\fR
       
  3428 .ad
       
  3429 .RS 13n
       
  3430 .rt  
       
  3431 软键。根据名称 \fIletter\fR 在别名列表中搜索别名。如果定义了此名称的别名,则在输入队列中插入其值。此命令可用于在许多终端上对功能键进行编程。
       
  3432 .RE
       
  3433 
       
  3434 .sp
       
  3435 .ne 2
       
  3436 .mk
       
  3437 .na
       
  3438 \fB\fBM-.\fR\fR
       
  3439 .ad
       
  3440 .RS 13n
       
  3441 .rt  
       
  3442 在行中插入上一命令的最后一个单词。如果此命令前面带有一个数字参数,此参数的值确定要插入的单词,而不是最后一个单词。
       
  3443 .RE
       
  3444 
       
  3445 .sp
       
  3446 .ne 2
       
  3447 .mk
       
  3448 .na
       
  3449 \fB\fBM-_\fR\fR
       
  3450 .ad
       
  3451 .RS 13n
       
  3452 .rt  
       
  3453 与 \fBM-.\fR 相同。
       
  3454 .RE
       
  3455 
       
  3456 .sp
       
  3457 .ne 2
       
  3458 .mk
       
  3459 .na
       
  3460 \fB\fBM-*\fR\fR
       
  3461 .ad
       
  3462 .RS 13n
       
  3463 .rt  
       
  3464 尝试根据当前单词生成文件名。如果单词不与任何文件匹配或不包含任何特殊模式字符,则会附加一个星号。
       
  3465 .RE
       
  3466 
       
  3467 .sp
       
  3468 .ne 2
       
  3469 .mk
       
  3470 .na
       
  3471 \fB\fBM-\fRESC\fR
       
  3472 .ad
       
  3473 .RS 13n
       
  3474 .rt  
       
  3475 按照本手册页中的说明执行命令或文件名完成操作。
       
  3476 .RE
       
  3477 
       
  3478 .sp
       
  3479 .ne 2
       
  3480 .mk
       
  3481 .na
       
  3482 \fB\fB^I\fRTAB\fR
       
  3483 .ad
       
  3484 .RS 13n
       
  3485 .rt  
       
  3486 尝试按照本手册页中的说明执行命令或文件名完成操作。如果发生部分完成,重复此操作的行为就像输入了 \fBM-=\fR 一样。如果未找到匹配项或者在空格后输入,则会插入一个制表符。
       
  3487 .RE
       
  3488 
       
  3489 .sp
       
  3490 .ne 2
       
  3491 .mk
       
  3492 .na
       
  3493 \fB\fBM-=\fR\fR
       
  3494 .ad
       
  3495 .RS 13n
       
  3496 .rt  
       
  3497 如果此命令前面没有数字参数,则会按照本手册页中的说明生成匹配的命令或文件名的列表。否则,光标下的单词将替换为与最近生成的命令或文件列表中的数字参数的值相对应的项。如果光标不在单词上方,则会插入此单词。 
       
  3498 .RE
       
  3499 
       
  3500 .sp
       
  3501 .ne 2
       
  3502 .mk
       
  3503 .na
       
  3504 \fB\fB^U\fR\fR
       
  3505 .ad
       
  3506 .RS 13n
       
  3507 .rt  
       
  3508 将下一命令的参数乘以 \fB4\fR。
       
  3509 .RE
       
  3510 
       
  3511 .sp
       
  3512 .ne 2
       
  3513 .mk
       
  3514 .na
       
  3515 \fB\fB\e\fR\fR
       
  3516 .ad
       
  3517 .RS 13n
       
  3518 .rt  
       
  3519 对下一字符进行转义。如果前面带有 \fB\e\fR,则可以在命令行或搜索字符串中输入编辑字符、用户的清除、删除和中断(通常为 \fB^?\fR)字符。\fB\e\fR 删除下一字符的编辑功能(如果有)。
       
  3520 .RE
       
  3521 
       
  3522 .sp
       
  3523 .ne 2
       
  3524 .mk
       
  3525 .na
       
  3526 \fB\fBM-^V\fR\fR
       
  3527 .ad
       
  3528 .RS 13n
       
  3529 .rt  
       
  3530 显示 shell 版本。
       
  3531 .RE
       
  3532 
       
  3533 .sp
       
  3534 .ne 2
       
  3535 .mk
       
  3536 .na
       
  3537 \fB\fBM-#\fR\fR
       
  3538 .ad
       
  3539 .RS 13n
       
  3540 .rt  
       
  3541 如果行不以 \fB#\fR 开头,则会在此行开头以及每个换行符后面插入一个 \fB#\fR,并输入此行。这会导致在历史文件中插入注释。如果行以 \fB#\fR 开头,则会删除 \fB#\fR,并删除每个换行符后面的一个 \fB#\fR。
       
  3542 .RE
       
  3543 
       
  3544 .SS "\fBvi\fR 编辑模式"
       
  3545 .sp
       
  3546 .LP
       
  3547 有两种键入模式。最初,当您输入命令时,您处于输入模式下。要进行编辑,用户应通过键入 ESC (033) 进入控制模式,将光标移至需要校正的位置,然后根据需要插入或删除字符或单词。大多数控制命令都接受命令前面的可选重复 \fIcount\fR。 
       
  3548 .sp
       
  3549 .LP
       
  3550 当在大多数系统上处于 vi 模式时,如果速度为 1200 波特或更大值,并且命令包含任何控制字符,或者自输出提示以来所经过的时间不到 1 秒,则会在一开始时启用标准化处理,并重新回显命令。ESC 字符终止命令提示的标准化处理,然后用户可以修改命令行。此方案具有标准化处理以及对原始模式进行输入提示回显的优势。
       
  3551 .sp
       
  3552 .LP
       
  3553 如果还设置了选项 \fBviraw\fR,终端始终会禁用标准化处理。对于不支持两种备用的行尾分隔符的系统,此模式是固有的,并且对某些终端可能会很有用。 
       
  3554 .SS "输入编辑命令"
       
  3555 .sp
       
  3556 .LP
       
  3557 缺省情况下,编辑器处于输入模式。
       
  3558 .sp
       
  3559 .LP
       
  3560 支持下列输入编辑命令:
       
  3561 .sp
       
  3562 .ne 2
       
  3563 .mk
       
  3564 .na
       
  3565 \fBERASE\fR
       
  3566 .ad
       
  3567 .RS 10n
       
  3568 .rt  
       
  3569 使用 \fBstty\fR 命令定义的用户定义清除字符,通常为 \fB^H\fR 或 \fB#\fR。删除上一字符。
       
  3570 .RE
       
  3571 
       
  3572 .sp
       
  3573 .ne 2
       
  3574 .mk
       
  3575 .na
       
  3576 \fB\fB^由 W\fR\fR
       
  3577 .ad
       
  3578 .RS 10n
       
  3579 .rt  
       
  3580 删除由空格分隔的上一单词。在某些系统上,可能需要使用 \fBviraw\fR 选项,此命令才能正常运行。
       
  3581 .RE
       
  3582 
       
  3583 .sp
       
  3584 .ne 2
       
  3585 .mk
       
  3586 .na
       
  3587 \fBEOF\fR
       
  3588 .ad
       
  3589 .RS 10n
       
  3590 .rt  
       
  3591 除非设置了 \fBignoreeof\fR 选项,否则行的第一个字符将导致 shell 终止。否则,将忽略此字符。
       
  3592 .RE
       
  3593 
       
  3594 .sp
       
  3595 .ne 2
       
  3596 .mk
       
  3597 .na
       
  3598 \fB\fIlnext\fR\fR
       
  3599 .ad
       
  3600 .RS 10n
       
  3601 .rt  
       
  3602 使用 \fBstty\fR(1) 定义的下一用户定义文本字符,如果未定义此字符,则为 \fB^V\fR。删除下一字符的编辑功能(如果有)。在某些系统上,可能需要使用 \fBviraw\fR 选项,此命令才能正常运行。
       
  3603 .RE
       
  3604 
       
  3605 .sp
       
  3606 .ne 2
       
  3607 .mk
       
  3608 .na
       
  3609 \fB\fB\e\fR\fR
       
  3610 .ad
       
  3611 .RS 10n
       
  3612 .rt  
       
  3613 将下一 ERASE 或 KILL 字符转义。
       
  3614 .RE
       
  3615 
       
  3616 .sp
       
  3617 .ne 2
       
  3618 .mk
       
  3619 .na
       
  3620 \fB\fB^I\fR TAB\fR
       
  3621 .ad
       
  3622 .RS 10n
       
  3623 .rt  
       
  3624 尝试按照本手册页中的说明执行命令或文件名完成操作,并返回到输入模式。如果发生部分完成,重复此操作的行为就像从控制模式输入了 \fB=\fR 一样。如果未找到匹配项或者在空格后输入,则会插入一个制表符。
       
  3625 .RE
       
  3626 
       
  3627 .SS "运动编辑命令"
       
  3628 .sp
       
  3629 .LP
       
  3630 运动编辑命令可移动光标。
       
  3631 .sp
       
  3632 .LP
       
  3633 支持下列运动编辑命令:
       
  3634 .sp
       
  3635 .ne 2
       
  3636 .mk
       
  3637 .na
       
  3638 \fB\fB[\fR\fIcount\fR\fB]l\fR\fR
       
  3639 .ad
       
  3640 .RS 13n
       
  3641 .rt  
       
  3642 将光标向前(向右)移动一个字符。
       
  3643 .RE
       
  3644 
       
  3645 .sp
       
  3646 .ne 2
       
  3647 .mk
       
  3648 .na
       
  3649 \fB\fB[\fR\fIcount\fR\fB][C\fR\fR
       
  3650 .ad
       
  3651 .RS 13n
       
  3652 .rt  
       
  3653 将光标向前(向右)移动一个字符。
       
  3654 .RE
       
  3655 
       
  3656 .sp
       
  3657 .ne 2
       
  3658 .mk
       
  3659 .na
       
  3660 \fB\fB[\fR\fIcount\fR\fB]w\fR\fR
       
  3661 .ad
       
  3662 .RS 13n
       
  3663 .rt  
       
  3664 将光标向前移动一个字母数字单词。
       
  3665 .RE
       
  3666 
       
  3667 .sp
       
  3668 .ne 2
       
  3669 .mk
       
  3670 .na
       
  3671 \fB\fB[\fR\fIcount\fR\fB]W\fR\fR
       
  3672 .ad
       
  3673 .RS 13n
       
  3674 .rt  
       
  3675 将光标移至空格后的下一个单词的开头。
       
  3676 .RE
       
  3677 
       
  3678 .sp
       
  3679 .ne 2
       
  3680 .mk
       
  3681 .na
       
  3682 \fB\fB[\fR\fIcount\fR\fB]e\fR\fR
       
  3683 .ad
       
  3684 .RS 13n
       
  3685 .rt  
       
  3686 将光标移至单词末尾。
       
  3687 .RE
       
  3688 
       
  3689 .sp
       
  3690 .ne 2
       
  3691 .mk
       
  3692 .na
       
  3693 \fB\fB[\fR\fIcount\fR\fB]E\fR\fR
       
  3694 .ad
       
  3695 .RS 13n
       
  3696 .rt  
       
  3697 将光标移至以当前空格分隔的单词的末尾。
       
  3698 .RE
       
  3699 
       
  3700 .sp
       
  3701 .ne 2
       
  3702 .mk
       
  3703 .na
       
  3704 \fB\fB[\fR\fIcount\fR\fB]h\fR\fR
       
  3705 .ad
       
  3706 .RS 13n
       
  3707 .rt  
       
  3708 将光标向后(向左)移动一个字符。
       
  3709 .RE
       
  3710 
       
  3711 .sp
       
  3712 .ne 2
       
  3713 .mk
       
  3714 .na
       
  3715 \fB\fB[\fR\fIcount\fR\fB][D\fR\fR
       
  3716 .ad
       
  3717 .RS 13n
       
  3718 .rt  
       
  3719 将光标向后(向左)移动一个字符。
       
  3720 .RE
       
  3721 
       
  3722 .sp
       
  3723 .ne 2
       
  3724 .mk
       
  3725 .na
       
  3726 \fB\fB[\fR\fIcount\fR\fB]b\fR\fR
       
  3727 .ad
       
  3728 .RS 13n
       
  3729 .rt  
       
  3730 将光标向后移动一个单词。
       
  3731 .RE
       
  3732 
       
  3733 .sp
       
  3734 .ne 2
       
  3735 .mk
       
  3736 .na
       
  3737 \fB\fB[\fR\fIcount\fR\fB]B\fR\fR
       
  3738 .ad
       
  3739 .RS 13n
       
  3740 .rt  
       
  3741 将光标移至以空格分隔的上一单词。
       
  3742 .RE
       
  3743 
       
  3744 .sp
       
  3745 .ne 2
       
  3746 .mk
       
  3747 .na
       
  3748 \fB\fB[\fR\fIcount\fR\fB]|\fR\fR
       
  3749 .ad
       
  3750 .RS 13n
       
  3751 .rt  
       
  3752 将光标移至列 \fIcount\fR。
       
  3753 .RE
       
  3754 
       
  3755 .sp
       
  3756 .ne 2
       
  3757 .mk
       
  3758 .na
       
  3759 \fB\fB[\fR\fIcount\fR\fB]f\fR\fIc\fR\fR
       
  3760 .ad
       
  3761 .RS 13n
       
  3762 .rt  
       
  3763 在当前行中查找下一字符 \fIc\fR。
       
  3764 .RE
       
  3765 
       
  3766 .sp
       
  3767 .ne 2
       
  3768 .mk
       
  3769 .na
       
  3770 \fB\fB[\fR\fIcount\fR\fB]F\fR\fIc\fR\fR
       
  3771 .ad
       
  3772 .RS 13n
       
  3773 .rt  
       
  3774 在当前行中查找上一个字符 \fIc\fR。
       
  3775 .RE
       
  3776 
       
  3777 .sp
       
  3778 .ne 2
       
  3779 .mk
       
  3780 .na
       
  3781 \fB\fB[\fR\fIcount\fR\fB]t\fR\fIC\fR\fR
       
  3782 .ad
       
  3783 .RS 13n
       
  3784 .rt  
       
  3785 等效于 \fBf\fR 后跟 \fBh\fR。
       
  3786 .RE
       
  3787 
       
  3788 .sp
       
  3789 .ne 2
       
  3790 .mk
       
  3791 .na
       
  3792 \fB\fB[\fR\fIcount\fR\fB]T\fR\fIc\fR\fR
       
  3793 .ad
       
  3794 .RS 13n
       
  3795 .rt  
       
  3796 等效于 \fBF\fR 后跟 \fBl\fR。
       
  3797 .RE
       
  3798 
       
  3799 .sp
       
  3800 .ne 2
       
  3801 .mk
       
  3802 .na
       
  3803 \fB\fB[\fR\fIcount\fR\fB];\fR\fR
       
  3804 .ad
       
  3805 .RS 13n
       
  3806 .rt  
       
  3807 重复最后一个单字符查找命令 \fIcount\fR 次:\fBf\fR、\fBF\fR, \fBt、\fR 或 \fBT\fR。
       
  3808 .RE
       
  3809 
       
  3810 .sp
       
  3811 .ne 2
       
  3812 .mk
       
  3813 .na
       
  3814 \fB\fB[\fR\fIcount\fR\fB],\fR\fR
       
  3815 .ad
       
  3816 .RS 13n
       
  3817 .rt  
       
  3818 反向最后一个单字符查找命令 \fIcount\fR 次。
       
  3819 .RE
       
  3820 
       
  3821 .sp
       
  3822 .ne 2
       
  3823 .mk
       
  3824 .na
       
  3825 \fB\fB0\fR\fR
       
  3826 .ad
       
  3827 .RS 13n
       
  3828 .rt  
       
  3829 将光标移到行首。
       
  3830 .RE
       
  3831 
       
  3832 .sp
       
  3833 .ne 2
       
  3834 .mk
       
  3835 .na
       
  3836 \fB\fB^\fR\fR
       
  3837 .ad
       
  3838 .RS 13n
       
  3839 .rt  
       
  3840 将光标移到行首。
       
  3841 .RE
       
  3842 
       
  3843 .sp
       
  3844 .ne 2
       
  3845 .mk
       
  3846 .na
       
  3847 \fB\fB[H\fR\fR
       
  3848 .ad
       
  3849 .RS 13n
       
  3850 .rt  
       
  3851 将光标移到行中的第一个非空白字符。
       
  3852 .RE
       
  3853 
       
  3854 .sp
       
  3855 .ne 2
       
  3856 .mk
       
  3857 .na
       
  3858 \fB\fB$\fR\fR
       
  3859 .ad
       
  3860 .RS 13n
       
  3861 .rt  
       
  3862 将光标移至行尾。
       
  3863 .RE
       
  3864 
       
  3865 .sp
       
  3866 .ne 2
       
  3867 .mk
       
  3868 .na
       
  3869 \fB\fB[Y\fR\fR
       
  3870 .ad
       
  3871 .RS 13n
       
  3872 .rt  
       
  3873 将光标移至行尾。
       
  3874 .RE
       
  3875 
       
  3876 .sp
       
  3877 .ne 2
       
  3878 .mk
       
  3879 .na
       
  3880 \fB\fB%\fR\fR
       
  3881 .ad
       
  3882 .RS 13n
       
  3883 .rt  
       
  3884 移动到对称的 \fB(\fR、\fB)\fR、\fB{\fR、\fB}\fR、\fB[\fR 或 \fB]\fR。如果光标不在本部分所述的任何一个字符上,将先在该行的剩余部分中搜索第一次出现的这些字符之一。
       
  3885 .RE
       
  3886 
       
  3887 .SS "搜索编辑命令"
       
  3888 .sp
       
  3889 .LP
       
  3890 搜索编辑命令可以访问您的命令历史记录。
       
  3891 .sp
       
  3892 .LP
       
  3893 支持下列搜索编辑命令:
       
  3894 .sp
       
  3895 .ne 2
       
  3896 .mk
       
  3897 .na
       
  3898 \fB\fB[\fR\fIcount\fR\fB]k\fR\fR
       
  3899 .ad
       
  3900 .RS 14n
       
  3901 .rt  
       
  3902 获取上一命令。每次输入 \fBk\fR 时,都会访问之前的上一条命令。
       
  3903 .RE
       
  3904 
       
  3905 .sp
       
  3906 .ne 2
       
  3907 .mk
       
  3908 .na
       
  3909 \fB\fB[\fR\fIcount\fR\fB]-\fR\fR
       
  3910 .ad
       
  3911 .RS 14n
       
  3912 .rt  
       
  3913 获取上一命令。每次输入 \fBk\fR 时,都会访问之前的上一条命令。
       
  3914 .sp
       
  3915 等效于 \fBk\fR。
       
  3916 .RE
       
  3917 
       
  3918 .sp
       
  3919 .ne 2
       
  3920 .mk
       
  3921 .na
       
  3922 \fB\fB[\fR\fIcount\fR\fB][A\fR\fR
       
  3923 .ad
       
  3924 .RS 14n
       
  3925 .rt  
       
  3926 获取上一命令。每次输入 \fBk\fR 时,都会访问之前的上一条命令。
       
  3927 .sp
       
  3928 等效于 \fBk\fR。
       
  3929 .RE
       
  3930 
       
  3931 .sp
       
  3932 .ne 2
       
  3933 .mk
       
  3934 .na
       
  3935 \fB\fB[\fR\fIcount\fR\fB]j\fR\fR
       
  3936 .ad
       
  3937 .RS 14n
       
  3938 .rt  
       
  3939 获取下一条命令。每次输入 \fBj\fR 时,都会访问以后的下一条命令。
       
  3940 .RE
       
  3941 
       
  3942 .sp
       
  3943 .ne 2
       
  3944 .mk
       
  3945 .na
       
  3946 \fB\fB[\fR\fIcount\fR\fB]+\fR\fR
       
  3947 .ad
       
  3948 .RS 14n
       
  3949 .rt  
       
  3950 获取下一条命令。每次输入 \fBj\fR 时,都会访问以后的下一条命令。
       
  3951 .sp
       
  3952 等效于 \fBj\fR。
       
  3953 .RE
       
  3954 
       
  3955 .sp
       
  3956 .ne 2
       
  3957 .mk
       
  3958 .na
       
  3959 \fB\fB[\fR\fIcount\fR\fB][B\fR\fR
       
  3960 .ad
       
  3961 .RS 14n
       
  3962 .rt  
       
  3963 获取下一条命令。每次输入 \fBj\fR 时,都会访问以后的下一条命令。
       
  3964 .sp
       
  3965 等效于 \fBj\fR。
       
  3966 .RE
       
  3967 
       
  3968 .sp
       
  3969 .ne 2
       
  3970 .mk
       
  3971 .na
       
  3972 \fB\fB[\fR\fIcount\fR\fB]G\fR\fR
       
  3973 .ad
       
  3974 .RS 14n
       
  3975 .rt  
       
  3976 获取命令编号 \fIcount\fR。缺省命令为最早的历史命令。
       
  3977 .RE
       
  3978 
       
  3979 .sp
       
  3980 .ne 2
       
  3981 .mk
       
  3982 .na
       
  3983 \fB\fB/\fR\fI字符串\fR\fR
       
  3984 .ad
       
  3985 .RS 14n
       
  3986 .rt  
       
  3987 在历史记录中向后搜索包含 \fIstring\fR 的上一条命令。\fIstring\fR 以回车或换行符结束。如果 string 前面带有 \fB^\fR,匹配行必须以 \fIstring\fR 开头。如果 \fIstring\fR 为空,则使用上一个字符串。
       
  3988 .RE
       
  3989 
       
  3990 .sp
       
  3991 .ne 2
       
  3992 .mk
       
  3993 .na
       
  3994 \fB\fB?\fR\fI字符串\fR\fR
       
  3995 .ad
       
  3996 .RS 14n
       
  3997 .rt  
       
  3998 在历史记录中向前搜索包含 \fIstring\fR 的上一条命令。\fIstring\fR 以回车或换行符结束。如果 string 前面带有 \fB^\fR,匹配行必须以 \fIstring\fR 开头。如果 \fIstring\fR 为空,则使用上一个字符串。
       
  3999 .sp
       
  4000 除了搜索方向是向前外,其余均与 \fI/\fR 相同。
       
  4001 .RE
       
  4002 
       
  4003 .sp
       
  4004 .ne 2
       
  4005 .mk
       
  4006 .na
       
  4007 \fB\fBn\fR\fR
       
  4008 .ad
       
  4009 .RS 14n
       
  4010 .rt  
       
  4011 向后搜索 \fI/\fR 或 \fI?\fR 命令的最后一个模式的下一个匹配项。
       
  4012 .RE
       
  4013 
       
  4014 .sp
       
  4015 .ne 2
       
  4016 .mk
       
  4017 .na
       
  4018 \fB\fBN\fR\fR
       
  4019 .ad
       
  4020 .RS 14n
       
  4021 .rt  
       
  4022 向前搜索 \fI/\fR 或 \fI?\fR 的最后一个模式的下一个匹配项。
       
  4023 .RE
       
  4024 
       
  4025 .SS "文本修改编辑命令"
       
  4026 .sp
       
  4027 .LP
       
  4028 以下命令可修改行:
       
  4029 .sp
       
  4030 .ne 2
       
  4031 .mk
       
  4032 .na
       
  4033 \fB\fBa\fR\fR
       
  4034 .ad
       
  4035 .RS 19n
       
  4036 .rt  
       
  4037 进入输入模式并在当前字符后输入文本。
       
  4038 .RE
       
  4039 
       
  4040 .sp
       
  4041 .ne 2
       
  4042 .mk
       
  4043 .na
       
  4044 \fB\fBA\fR\fR
       
  4045 .ad
       
  4046 .RS 19n
       
  4047 .rt  
       
  4048 将文本附加到行尾。等效于 \fB$a\fR。
       
  4049 .RE
       
  4050 
       
  4051 .sp
       
  4052 .ne 2
       
  4053 .mk
       
  4054 .na
       
  4055 \fB\fB[\fR\fIcount\fR\fB]c\fR\fImotion\fR\fR
       
  4056 .ad
       
  4057 .br
       
  4058 .na
       
  4059 \fB\fBc[\fR\fIcount\fR\fB]\fR\fImotion\fR\fR
       
  4060 .ad
       
  4061 .RS 19n
       
  4062 .rt  
       
  4063 从当前字符删除到 \fImotion\fR 将光标移动到的字符,并进入输入模式。如果 \fImotion\fR 为 \fBc\fR,将删除整行并进入输入模式。
       
  4064 .RE
       
  4065 
       
  4066 .sp
       
  4067 .ne 2
       
  4068 .mk
       
  4069 .na
       
  4070 \fB\fBC\fR\fR
       
  4071 .ad
       
  4072 .RS 19n
       
  4073 .rt  
       
  4074 从当前字符删除到行尾并进入输入模式。等效于 \fBc$\fR。
       
  4075 .RE
       
  4076 
       
  4077 .sp
       
  4078 .ne 2
       
  4079 .mk
       
  4080 .na
       
  4081 \fB\fBS\fR\fR
       
  4082 .ad
       
  4083 .RS 19n
       
  4084 .rt  
       
  4085 等效于 \fBcc\fR。
       
  4086 .RE
       
  4087 
       
  4088 .sp
       
  4089 .ne 2
       
  4090 .mk
       
  4091 .na
       
  4092 \fB\fB[\fR\fIcount\fR\fB]s\fR\fR
       
  4093 .ad
       
  4094 .RS 19n
       
  4095 .rt  
       
  4096 在输入模式中替换光标下方的字符。
       
  4097 .RE
       
  4098 
       
  4099 .sp
       
  4100 .ne 2
       
  4101 .mk
       
  4102 .na
       
  4103 \fB\fBD[\fR\fIcount\fR\fB]d\fR\fImotion\fR\fR
       
  4104 .ad
       
  4105 .RS 19n
       
  4106 .rt  
       
  4107 从当前字符删除到行尾。等效于 d$。
       
  4108 .RE
       
  4109 
       
  4110 .sp
       
  4111 .ne 2
       
  4112 .mk
       
  4113 .na
       
  4114 \fB\fBd[\fR\fIcount\fR\fB]\fR\fImotion\fR\fR
       
  4115 .ad
       
  4116 .RS 19n
       
  4117 .rt  
       
  4118 从当前字符删除到 \fImotion\fR 将移动到的字符。如果 \fImotion\fR 为 d,将删除整行。
       
  4119 .RE
       
  4120 
       
  4121 .sp
       
  4122 .ne 2
       
  4123 .mk
       
  4124 .na
       
  4125 \fB\fBi\fR\fR
       
  4126 .ad
       
  4127 .RS 19n
       
  4128 .rt  
       
  4129 进入输入模式并在当前字符前插入文本。
       
  4130 .RE
       
  4131 
       
  4132 .sp
       
  4133 .ne 2
       
  4134 .mk
       
  4135 .na
       
  4136 \fB\fBI\fR\fR
       
  4137 .ad
       
  4138 .RS 19n
       
  4139 .rt  
       
  4140 在行首之前插入文本。等效于 \fB0i\fR。
       
  4141 .RE
       
  4142 
       
  4143 .sp
       
  4144 .ne 2
       
  4145 .mk
       
  4146 .na
       
  4147 \fB\fB[\fR\fIcount\fR\fB]P\fR\fR
       
  4148 .ad
       
  4149 .RS 19n
       
  4150 .rt  
       
  4151 在光标之前放置以前修改的文本。
       
  4152 .RE
       
  4153 
       
  4154 .sp
       
  4155 .ne 2
       
  4156 .mk
       
  4157 .na
       
  4158 \fB\fB[\fR\fIcount\fR\fB]p\fR\fR
       
  4159 .ad
       
  4160 .RS 19n
       
  4161 .rt  
       
  4162 在光标之后放置以前修改的文本。
       
  4163 .RE
       
  4164 
       
  4165 .sp
       
  4166 .ne 2
       
  4167 .mk
       
  4168 .na
       
  4169 \fB\fBR\fR\fR
       
  4170 .ad
       
  4171 .RS 19n
       
  4172 .rt  
       
  4173 进入输入模式并将屏幕上的字符替换为您以覆盖方式键入的字符。
       
  4174 .RE
       
  4175 
       
  4176 .sp
       
  4177 .ne 2
       
  4178 .mk
       
  4179 .na
       
  4180 \fB\fB[\fR\fIcount\fR\fB]r\fR\fIc\fR\fR
       
  4181 .ad
       
  4182 .RS 19n
       
  4183 .rt  
       
  4184 将从当前光标位置开始的 \fIcount\fR 个字符替换为 \fIc\fR,并向前移动光标。
       
  4185 .RE
       
  4186 
       
  4187 .sp
       
  4188 .ne 2
       
  4189 .mk
       
  4190 .na
       
  4191 \fB\fB[\fR\fIcount\fR\fB]x\fR\fR
       
  4192 .ad
       
  4193 .RS 19n
       
  4194 .rt  
       
  4195 删除当前字符。
       
  4196 .RE
       
  4197 
       
  4198 .sp
       
  4199 .ne 2
       
  4200 .mk
       
  4201 .na
       
  4202 \fB\fB[\fIcount\fR]X\fR\fR
       
  4203 .ad
       
  4204 .RS 19n
       
  4205 .rt  
       
  4206 删除前面的字符。
       
  4207 .RE
       
  4208 
       
  4209 .sp
       
  4210 .ne 2
       
  4211 .mk
       
  4212 .na
       
  4213 \fB\fB[\fIcount\fR].\fR\fR
       
  4214 .ad
       
  4215 .RS 19n
       
  4216 .rt  
       
  4217 重复上一条文本修改命令。
       
  4218 .RE
       
  4219 
       
  4220 .sp
       
  4221 .ne 2
       
  4222 .mk
       
  4223 .na
       
  4224 \fB\fB[\fIcount\fR]~\fR\fR
       
  4225 .ad
       
  4226 .RS 19n
       
  4227 .rt  
       
  4228 转换从当前光标位置开始的 \fIcount\fR 个字符的大小写,并向前移动光标。
       
  4229 .RE
       
  4230 
       
  4231 .sp
       
  4232 .ne 2
       
  4233 .mk
       
  4234 .na
       
  4235 \fB\fB[\fIcount\fR]_\fR\fR
       
  4236 .ad
       
  4237 .RS 19n
       
  4238 .rt  
       
  4239 促使附加上一条命令中的 \fIcount\fR 单词并进入输入模式。如果省略 \fIcount\fR,则使用最后一个单词。
       
  4240 .RE
       
  4241 
       
  4242 .sp
       
  4243 .ne 2
       
  4244 .mk
       
  4245 .na
       
  4246 \fB\fB*\fR\fR
       
  4247 .ad
       
  4248 .RS 19n
       
  4249 .rt  
       
  4250 促使 \fB*\fR 附加到当前的单词并尝试生成文件名。如果未找到匹配项,则会发出铃声。否则,将该单词替换为匹配模式并进入输入模式。
       
  4251 .RE
       
  4252 
       
  4253 .sp
       
  4254 .ne 2
       
  4255 .mk
       
  4256 .na
       
  4257 \fB\fB\e\fR\fR
       
  4258 .ad
       
  4259 .RS 19n
       
  4260 .rt  
       
  4261 按照本手册页中的说明执行命令或文件名完成操作。
       
  4262 .RE
       
  4263 
       
  4264 .SS "其他编辑命令"
       
  4265 .sp
       
  4266 .LP
       
  4267 支持下列其他编辑命令: 
       
  4268 .sp
       
  4269 .ne 2
       
  4270 .mk
       
  4271 .na
       
  4272 \fB\fB[\fR\fIcount\fR\fB]y\fR\fImotion\fR\fR
       
  4273 .ad
       
  4274 .br
       
  4275 .na
       
  4276 \fB\fBy[\fR\fIcount\fR\fB]\fR\fImotion\fR\fR
       
  4277 .ad
       
  4278 .RS 18n
       
  4279 .rt  
       
  4280 将当前字符到 \fImotion\fR 将光标移动到的字符全部移出。将移出的字符放在删除缓冲区中。文本和光标位置保持不变。
       
  4281 .RE
       
  4282 
       
  4283 .sp
       
  4284 .ne 2
       
  4285 .mk
       
  4286 .na
       
  4287 \fB\fByy\fR\fR
       
  4288 .ad
       
  4289 .RS 18n
       
  4290 .rt  
       
  4291 移出当前行。
       
  4292 .RE
       
  4293 
       
  4294 .sp
       
  4295 .ne 2
       
  4296 .mk
       
  4297 .na
       
  4298 \fB\fBY\fR\fR
       
  4299 .ad
       
  4300 .RS 18n
       
  4301 .rt  
       
  4302 移出从当前的光标位置直到行尾的当前行。等效于 \fBy$\fR。
       
  4303 .RE
       
  4304 
       
  4305 .sp
       
  4306 .ne 2
       
  4307 .mk
       
  4308 .na
       
  4309 \fB\fBu\fR\fR
       
  4310 .ad
       
  4311 .RS 18n
       
  4312 .rt  
       
  4313 撤消最后一个文本修改命令。
       
  4314 .RE
       
  4315 
       
  4316 .sp
       
  4317 .ne 2
       
  4318 .mk
       
  4319 .na
       
  4320 \fB\fBU\fR\fR
       
  4321 .ad
       
  4322 .RS 18n
       
  4323 .rt  
       
  4324 撤消对当前行执行的所有文本修改命令。
       
  4325 .RE
       
  4326 
       
  4327 .sp
       
  4328 .ne 2
       
  4329 .mk
       
  4330 .na
       
  4331 \fB\fB[\fR\fIcount\fR\fB]V\fR\fR
       
  4332 .ad
       
  4333 .RS 18n
       
  4334 .rt  
       
  4335 返回以下命令:
       
  4336 .sp
       
  4337 .in +2
       
  4338 .nf
       
  4339 hist -e ${VISUAL:-${EDITOR:-vi}} \fIcount\fR
       
  4340 .fi
       
  4341 .in -2
       
  4342 .sp
       
  4343 
       
  4344 该命令位于输入缓冲区中。如果省略 \fIcount\fR,则使用当前行。
       
  4345 .RE
       
  4346 
       
  4347 .sp
       
  4348 .ne 2
       
  4349 .mk
       
  4350 .na
       
  4351 \fB\fB^L\fR\fR
       
  4352 .ad
       
  4353 .RS 18n
       
  4354 .rt  
       
  4355 换行并输出当前行。该命令仅在控制模式下使用。
       
  4356 .RE
       
  4357 
       
  4358 .sp
       
  4359 .ne 2
       
  4360 .mk
       
  4361 .na
       
  4362 \fB\fB^J\fR\fR
       
  4363 .ad
       
  4364 .RS 18n
       
  4365 .rt  
       
  4366 新行。无论处于什么模式下,都执行当前行。
       
  4367 .RE
       
  4368 
       
  4369 .sp
       
  4370 .ne 2
       
  4371 .mk
       
  4372 .na
       
  4373 \fB\fB^M\fR\fR
       
  4374 .ad
       
  4375 .RS 18n
       
  4376 .rt  
       
  4377 返回。无论处于什么模式下,都执行当前行。
       
  4378 .RE
       
  4379 
       
  4380 .sp
       
  4381 .ne 2
       
  4382 .mk
       
  4383 .na
       
  4384 \fB\fB#\fR\fR
       
  4385 .ad
       
  4386 .RS 18n
       
  4387 .rt  
       
  4388 如果该命令的第一个字符是 \fB#\fR,则删除该 \fB#\fR 及换行符之后的每个 \fB#\fR。
       
  4389 .sp
       
  4390 否则,在该命令的每行前面插入 \fB#\fR 之后发送该行。 
       
  4391 .sp
       
  4392 该命令非常有用,可以将当前行作为注释插入历史记录中,以及取消注释历史文件中以前带有注释的命令。
       
  4393 .RE
       
  4394 
       
  4395 .sp
       
  4396 .ne 2
       
  4397 .mk
       
  4398 .na
       
  4399 \fB\fB[\fR\fIcount\fR\fB]=\fR\fR
       
  4400 .ad
       
  4401 .RS 18n
       
  4402 .rt  
       
  4403 如果未指定 \fIcount\fR,则生成本手册页中所述的匹配命令或文件名的列表。
       
  4404 .sp
       
  4405 否则,将当前光标位置的单词替换为最近生成的命令或文件列表中的 \fIcount\fR 项。如果光标未停留在单词上,则会在当前光标位置之后插入该项。
       
  4406 .RE
       
  4407 
       
  4408 .sp
       
  4409 .ne 2
       
  4410 .mk
       
  4411 .na
       
  4412 \fB\fB@\fR\fIletter\fR\fR
       
  4413 .ad
       
  4414 .RS 18n
       
  4415 .rt  
       
  4416 在别名列表中按名称 \fIletter\fR 搜索别名。如果该名称的别名已经定义,则在输入队列中插入其值以进行处理。
       
  4417 .RE
       
  4418 
       
  4419 .sp
       
  4420 .ne 2
       
  4421 .mk
       
  4422 .na
       
  4423 \fB\fB^A\fR\fR
       
  4424 .ad
       
  4425 .RS 18n
       
  4426 .rt  
       
  4427 显示 shell 的版本。
       
  4428 .RE
       
  4429 
       
  4430 .SS "内置命令"
       
  4431 .sp
       
  4432 .LP
       
  4433 以下的简单命令将在 shell 进程中执行。允许输入和输出重定向。除非另有说明,否则输出将写入在文件描述符 \fB1\fR 中,并且退出状态(如果没有语法错误)为 \fB0\fR。除了 \fB :\fR、\fBtrue\fR、\fBfalse\fR、\fBecho\fR、\fBnewgrp\fR 和 \fBlogin\fR 外,其他所有的内置命令都接受 \fB--\fR 以指示选项结束。它们还可以将选项 \fB--man\fR 解释为在标准错误中显示手册页的请求,以及将 \fB-?\fR 解释为在标准错误中输出用法消息的帮助请求。
       
  4434 .sp
       
  4435 .LP
       
  4436 前面添加了一个或两个 \fB++\fR 符号的命令是特殊的内置命令,将通过以下方式进行特殊处理:
       
  4437 .RS +4
       
  4438 .TP
       
  4439 1.
       
  4440 命令完成时,该命令前面的变量赋值列表仍然有效。
       
  4441 .RE
       
  4442 .RS +4
       
  4443 .TP
       
  4444 2.
       
  4445 在变量赋值之后处理 I/O 重定向。
       
  4446 .RE
       
  4447 .RS +4
       
  4448 .TP
       
  4449 3.
       
  4450 脚本中包含的错误会导致其中止。
       
  4451 .RE
       
  4452 .RS +4
       
  4453 .TP
       
  4454 4.
       
  4455 它们不是有效的函数名称。
       
  4456 .RE
       
  4457 .RS +4
       
  4458 .TP
       
  4459 5.
       
  4460 对于跟在前面添加了 \fB++\fR 的命令之后且格式为变量赋值格式的单词,将通过与变量赋值相同的规则进行扩展。这意味着将在 \fB=\fR 符号之后执行波浪号替换,并且不执行字段分割和文件名生成。
       
  4461 .RE
       
  4462 .sp
       
  4463 .ne 2
       
  4464 .mk
       
  4465 .na
       
  4466 \fB\fB+ : [\fR\fIarg ...\fR\fB]\fR\fR
       
  4467 .ad
       
  4468 .sp .6
       
  4469 .RS 4n
       
  4470 该命令仅扩展参数。
       
  4471 .RE
       
  4472 
       
  4473 .sp
       
  4474 .ne 2
       
  4475 .mk
       
  4476 .na
       
  4477 \fB\fB+ .\fR \fIname\fR \fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4478 .ad
       
  4479 .sp .6
       
  4480 .RS 4n
       
  4481 如果 \fIname\fR 是一个通过 \fBfunction\fR \fBname\fR 保留字语法定义的函数,则会在当前环境中执行该函数(就好像它是通过 \fIname()\fR 语法定义的一样)。否则,如果 \fIname\fR 表示一个文件,则会读取整个文件并在当前的 shell 环境中执行命令。通过 PATH 指定的搜索路径用于查找包含该文件的目录。如果指定了任何参数 \fIarg\fR,则在处理 . 命令时这些参数将变为位置参数,并在完成时恢复原始的位置参数。否则,位置参数保持不变。退出状态是最后执行的命令的退出状态。
       
  4482 .RE
       
  4483 
       
  4484 .sp
       
  4485 .ne 2
       
  4486 .mk
       
  4487 .na
       
  4488 \fB\fB++ alias [\fR\fB-ptx\fR\fB] [\fR\fIname\fR\fB[ =\fR\fIvalue\fR\fB]] ...\fR\fR
       
  4489 .ad
       
  4490 .sp .6
       
  4491 .RS 4n
       
  4492 不包含参数的 \fBalias\fR 可在标准输出中以 \fIname\fR\fB=\fR\fIvalue\fR 的格式输出别名列表。可通过 \fB-p\fR 选项在每个名称之前插入单词 alias。如果指定一个或多个参数,将为已指定其 \fIvalue\fR 的每个 \fIname\fR 定义 \fIalias\fR。可通过 \fIvalue\fR 中的结尾空格选中下一个单词进行别名替换。过时的 \fB-t\fR 选项用于设置和列出被跟踪的别名。被跟踪别名的值是与指定的 \fIname\fR 对应的完整路径名。如果 \fBPATH\fR 的值重置但别名仍被跟踪,被跟踪别名的值将变成未定义的值。如果没有 \fB-t\fR 选项,则对于参数列表中没有为其指定 \fIvalue\fR 的每个 \fIname\fR,都将输出别名的名称和值。过时的 -x 选项没有作用。如果指定了 \fIname\fR,但没有提供值,也没有为 \fIname\fR 定义别名,则退出状态为\fB非零\fR。
       
  4493 .RE
       
  4494 
       
  4495 .sp
       
  4496 .ne 2
       
  4497 .mk
       
  4498 .na
       
  4499 \fB\fBbg [\fR \fIjob\fR\fB\&...]\fR\fR
       
  4500 .ad
       
  4501 .sp .6
       
  4502 .RS 4n
       
  4503 该命令仅适用于支持作业控制的系统。将指定的每个 \fIjob\fR 放入后台。如果未指定 \fIjob\fR,则将当前作业放入后台。请参见本手册页的 \fBJobs\fR 部分了解 \fIjob\fR 格式的说明。
       
  4504 .RE
       
  4505 
       
  4506 .sp
       
  4507 .ne 2
       
  4508 .mk
       
  4509 .na
       
  4510 \fB\fB+ break [\fR\fIn\fR\fB]\fR\fR
       
  4511 .ad
       
  4512 .sp .6
       
  4513 .RS 4n
       
  4514 从封闭的 \fBfor\fR、\fBwhile\fR、\fBuntil\fR 或 \fBselect\fR 循环(如果有)中退出。如果指定了 \fIn\fR,则分成 \fIn\fR 个级别。 
       
  4515 .RE
       
  4516 
       
  4517 .sp
       
  4518 .ne 2
       
  4519 .mk
       
  4520 .na
       
  4521 \fB\fBbuiltin [\fR\fB-ds\fR \fB] [\fR\fB-f\fR \fIfile\fR\fB] [\fR\fIname ...\fR\fB]\fR\fR
       
  4522 .ad
       
  4523 .sp .6
       
  4524 .RS 4n
       
  4525 如果未指定 \fIname\fR 和 \fB-f\fR 选项,将在标准输出中输出内置名称。\fB-s\fR 选项仅输出特殊的内置名称。否则,每个 \fIname\fR 都代表其基名为内置名称的路径名。入口点函数名称通过在内置名称前面加上 \fIb\fR 确定。内置命令 \fImycommand\fR 的 ISO C/C++ 样例为 \fBb\fR\fImycommand(int argc, char *argv[], void *context)\fR,其中 \fIargv\fR 是 \fIargc\fR 元素的数组,\fIcontext\fR 是指向如 \fB<ast/shell.h>\fR 中所述的 \fBShell_t\fR 结构的可选指针。不能将特殊内置名称绑定到路径名或删除。\fB-d\fR 选项可删除所指定的每个内置名称。在支持动态装载的系统上,\fB-f\fR 选项可命名包含内置名称代码的共享库。可以省略共享库的前缀和/或后缀,具体取决于系统。装载某个库之后,其符号将可用于 \fBbuiltin\fR 的后续调用。可通过单独调用 \fBbuiltin\fR 命令指定多个库。按指定库时的反向顺序搜索库。装载某个库之后,该库将在名称为 \fBlib_init()\fR 的库中查找函数,并将此函数与参数 \fB0\fR 一起调用。
       
  4526 .RE
       
  4527 
       
  4528 .sp
       
  4529 .ne 2
       
  4530 .mk
       
  4531 .na
       
  4532 \fB\fBcd\fR \fB[\fR\fB-LP\fR\fB] [\fR\fIarg\fR\fB]\fR\fR
       
  4533 .ad
       
  4534 .br
       
  4535 .na
       
  4536 \fB\fBcd\fR \fB[\fR\fB-LP\fR\fB]\fR \fIold\fR \fInew\fR\fR
       
  4537 .ad
       
  4538 .sp .6
       
  4539 .RS 4n
       
  4540 该命令具有两种形式。 
       
  4541 .sp
       
  4542 在第一种形式中,它将当前目录更改为 \fIarg\fR。如果 \fIarg\fR 为 \fB-\fR,目录将被更改为以前的目录。shell 变量 \fBHOME\fR 是缺省的 \fIarg\fR。变量 \fBPWD\fR 被设置为当前目录。shell 变量 \fBCDPATH\fR 定义包含 \fIarg\fR 的目录的搜索路径。备用路径名称使用冒号 (\fB:\fR) 分隔。缺省路径是 \fBNULL\fR(指定当前目录)。当前目录是通过空路径名指定的,可以直接显示在等号之后或显示在路径列表中任何其他位置的冒号分界符之间。如果 \fIarg\fR 以 \fB/\fR 开头,则不使用搜索路径。否则,将搜索路径中每个目录的 \fIarg\fR。 
       
  4543 .sp
       
  4544 \fBcd\fR 的第二种形式在当前目录名称 \fBPWD\fR 中用字符串 \fInew\fR 替换字符串 \fIold\fR,并尝试更改为此新目录。缺省情况下,在查找目录名称时会按字面意思处理符号链接名称。这等效于 \fB-L\fR 选项。可通过 \fB-P\fR 选项在确定目录时解析符号链接。命令行中的 \fB-L\fR 或 \fB-P\fR 的最后一个实例可确定使用的方法。不能通过 \fBrksh\fR 执行 \fBcd\fR 命令。
       
  4545 .RE
       
  4546 
       
  4547 .sp
       
  4548 .ne 2
       
  4549 .mk
       
  4550 .na
       
  4551 \fB\fBcommand\fR \fB[\fR\fB-pvVx\fR\fB]\fR \fIname\fR \fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4552 .ad
       
  4553 .sp .6
       
  4554 .RS 4n
       
  4555 如果没有 \fB-v\fR 或 \fB-V\fR 选项,则通过由 \fIarg\fR 指定的参数执行 \fIname\fR。 
       
  4556 .sp
       
  4557 可通过 \fB-p\fR 选项搜索缺省路径,而不是 \fBPATH\fR 的值指定的路径。查找 \fIname\fR 时不会搜索函数。此外,如果 \fIname\fR 表示特殊内置名称,将忽略与前导剑形符号关联的任何特殊属性。例如,预定义别名 \fBredirect='command exec'\fR 可在指定的重定向无效时阻止脚本终止。 
       
  4558 .sp
       
  4559 在带有 \fB-x\fR 选项的情况下,如果由于参数过多会导致命令执行失败(\fBerrno E2BIG\fR),shell 将多次调用命令 \fIname\fR,且每次调用时包含部分参数。每次调用时,将会传递在扩展到多个参数的第一个单词之前以及在扩展到多个参数的最后一个单词之后出现的参数。退出状态为最大调用退出状态。 
       
  4560 .sp
       
  4561 在带有 \fB-v\fR 选项的情况下,\fBcommand\fR 等效于本部分中所述的内置 \fBwhence\fR 命令。\fB-V\fR 选项使 \fBcommand\fR 的作用相当于 \fBwhence -v\fR。
       
  4562 .RE
       
  4563 
       
  4564 .sp
       
  4565 .ne 2
       
  4566 .mk
       
  4567 .na
       
  4568 \fB\fB+continue\fR \fB[\fR\fIn\fR\fB]\fR\fR
       
  4569 .ad
       
  4570 .sp .6
       
  4571 .RS 4n
       
  4572 继续执行封闭的 \fBfor\fR、\fBwhile\fR、\fBuntil\fR 或 \fBselect\fR 循环的下一次重复。如果指定了 \fIn\fR,则从第 \fIn\fR 次封闭循环继续执行。
       
  4573 .RE
       
  4574 
       
  4575 .sp
       
  4576 .ne 2
       
  4577 .mk
       
  4578 .na
       
  4579 \fB\fBdisown\fR \fB[\fR\fIjob...\fR\fB]\fR\fR
       
  4580 .ad
       
  4581 .sp .6
       
  4582 .RS 4n
       
  4583 促使该 shell 在登录 shell 终止时不将 \fBHUP\fR 信号发送至指定的每个 \fIjob\fR,或不发送至所有活动作业(如果省略 \fIjob\fR)。
       
  4584 .RE
       
  4585 
       
  4586 .sp
       
  4587 .ne 2
       
  4588 .mk
       
  4589 .na
       
  4590 \fB\fBecho\fR \fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4591 .ad
       
  4592 .sp .6
       
  4593 .RS 4n
       
  4594 如果第一个 \fIarg\fR 不以 \fB-\fR 开头,并且所有的参数均不包含反斜杠 (\fB\e\fR),则会输出其所有参数,并用空格隔开以及换行符终止。否则,\fBecho\fR 的行为与系统相关,并且应使用本部分中所述的 \fBprint\fR 或 \fBprintf\fR。请参见 \fBecho\fR(1) 了解用法和说明。
       
  4595 .RE
       
  4596 
       
  4597 .sp
       
  4598 .ne 2
       
  4599 .mk
       
  4600 .na
       
  4601 \fB\fB+eval\fR \fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4602 .ad
       
  4603 .sp .6
       
  4604 .RS 4n
       
  4605 将这些参数作为输入读取到 shell 并执行生成的命令。
       
  4606 .RE
       
  4607 
       
  4608 .sp
       
  4609 .ne 2
       
  4610 .mk
       
  4611 .na
       
  4612 \fB\fB+exec\fR [\fB-c\fR] [\fB-a\fR \fIname ...\fR] \fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4613 .ad
       
  4614 .sp .6
       
  4615 .RS 4n
       
  4616 如果指定了 \fIarg\fR,将执行这些参数指定的命令而不是此 shell,同时不创建新进程。可通过 \fB-c\fR 选项在应用与 exec 调用关联的变量赋值之前清除环境。可通过 \fB-a\fR 选项将 \fIname\fR(而不是第一个 \fIarg\fR)变成新进程的 \fBargv[0]\fR。输入参数与输出参数可以显示并影响当前进程。如果未指定 \fIarg\fR,则该命令的作用是修改输入/输出重定向列表所指定的文件描述符。在这种情况下,任何通过该机制打开的 \fB2\fR 以上的文件描述符编号将在调用其他程序时关闭。
       
  4617 .RE
       
  4618 
       
  4619 .sp
       
  4620 .ne 2
       
  4621 .mk
       
  4622 .na
       
  4623 \fB\fB+exit\fR \fB[\fR\fIn\fR\fB]\fR\fR
       
  4624 .ad
       
  4625 .sp .6
       
  4626 .RS 4n
       
  4627 促使 shell 退出,退出状态由 \fIn\fR 指定。该值是指定状态的最低有效 8 位。如果省略 \fIn\fR,则退出状态为最后执行的命令的退出状态。此外,也可通过文件结尾使 shell 退出,但启用了 \fBignoreeof\fR 选项的 shell 除外。请参见 \fBset\fR。
       
  4628 .RE
       
  4629 
       
  4630 .sp
       
  4631 .ne 2
       
  4632 .mk
       
  4633 .na
       
  4634 \fB\fB++export\fR \fB[\fR\fB-p\fR\fB]\fR \fB[\fR\fIname\fR\fB[=\fR\fIvalue\fR\fB]] ...\fR\fR
       
  4635 .ad
       
  4636 .sp .6
       
  4637 .RS 4n
       
  4638 如果未指定 \fIname\fR,将输出具有导出属性的每个变量的名称和值,并且以能够重新输入的方式将值括起来。可通过 \fB-p\fR 选项在每个名称之前插入单词 export。否则,将对指定的 \fIname\fR 添加标记以自动导出到后续执行的命令的环境中。
       
  4639 .RE
       
  4640 
       
  4641 .sp
       
  4642 .ne 2
       
  4643 .mk
       
  4644 .na
       
  4645 \fB\fBfalse\fR\fR
       
  4646 .ad
       
  4647 .sp .6
       
  4648 .RS 4n
       
  4649 不执行任何操作,退出 \fB1\fR。与 \fBuntil\fR 结合使用以实现死循环。
       
  4650 .RE
       
  4651 
       
  4652 .sp
       
  4653 .ne 2
       
  4654 .mk
       
  4655 .na
       
  4656 \fB\fBfg\fR \fB[\fR\fIjob ...\fR\fB]\fR\fR
       
  4657 .ad
       
  4658 .sp .6
       
  4659 .RS 4n
       
  4660 该命令仅适用于支持作业控制的系统。将指定的每个 \fIjob\fR 放入前台并按指定顺序等待。否则,将当前作业放入前台。请参见 \fBJobs\fR 了解 \fIjob\fR 格式的说明。
       
  4661 .RE
       
  4662 
       
  4663 .sp
       
  4664 .ne 2
       
  4665 .mk
       
  4666 .na
       
  4667 \fB\fBgetconf\fR \fB[\fR\fIname\fR \fB[\fR\fIpathname\fR\fB]]\fR\fR
       
  4668 .ad
       
  4669 .sp .6
       
  4670 .RS 4n
       
  4671 输出 \fIname\fR 指定的配置参数的当前值。配置参数是通过 IEEE POSIX 1003.1 和 IEEE POSIX 1003.2 标准定义的。请参见 \fBpathconf\fR(2) 和 \fBsysconf\fR(3C)。
       
  4672 .sp
       
  4673 其值取决于文件系统中的位置的参数需要 \fIpathname\fR 参数。如果未指定参数,\fBgetconf\fR 将输出当前配置参数的名称和值。对需要 \fIpathname\fR 的每个参数使用路径名 \fB/\fR。
       
  4674 .RE
       
  4675 
       
  4676 .sp
       
  4677 .ne 2
       
  4678 .mk
       
  4679 .na
       
  4680 \fB\fBgetopts\fR \fB[\fR \fB-a\fR \fIname\fR\fB]\fR \fIoptstring\fR \fIvname\fR \fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4681 .ad
       
  4682 .sp .6
       
  4683 .RS 4n
       
  4684 检查 \fIarg\fR 是否具有合法选项。如果省略了 \fIarg\fR,则会使用位置参数。选项参数以 \fB+\fR 或 \fB-\fR 开始。不是以 \fB+\fR 或 \fB -\fR 开始的选项或者参数 \fB--\fR 会终止选项。当 \fIoptstring\fR 以 \fB+\fR 开始时,仅识别以 \fB+\fR 开始的选项。\fIoptstring\fR 包含 \fBgetopts\fR 可识别的字母。如果字母后面跟有一个 \fB:\fR,则该选项需要有一个参数。选项与参数之间可以用空格隔开。选项 \fB-?\fR 促使 \fBgetopts\fR 在标准错误输出中生成用法消息。\fB-a\fR 选项可用于指定用法消息使用的名称,缺省情况下为 $0。每次调用时,\fBgetopts\fR 都将它找到的下一个选项字母放在变量 \fIvname\fR 内。如果 \fIarg\fR 以 \fB+\fR 开始,会在选项字母前面加上 \fB+\fR。下一个 \fIarg\fR 的索引存储在 \fBOPTIND\fR 中。选项参数(如果有)存储在 \fBOPTARG\fR 中。\fIoptstring\fR 中的前导 : 促使 \fBgetopts\fR 将无效选项的字母存储在 \fBOPTARG\fR 中,并在缺少所需的选项参数时针对未知选项和 to: 将 \fIvname\fR 设置为 \fB?\fR。其他情况下,\fBgetopts\fR 将显示一条错误消息。如果没有更多选项,则退出状态是\fB非零的\fR。无法指定以下任何选项:\fB:\fR、\fB+\fR、\fB-\fR、\fB?\fR、\fB[\fR 和 \fB]\fR。只能将 \fB#\fR 选项指定为第一个选项。
       
  4685 .RE
       
  4686 
       
  4687 .sp
       
  4688 .ne 2
       
  4689 .mk
       
  4690 .na
       
  4691 \fB\fBhist\fR \fB[\fR \fB-e\fR \fIename\fR\fB]\fR\fB[\fR\fB-nlr\fR\fB]\fR \fB[\fR \fIfirst\fR\fB[\fR\fIlast\fR \fB ] ]\fR\fR
       
  4692 .ad
       
  4693 .br
       
  4694 .na
       
  4695 \fB\fR
       
  4696 .ad
       
  4697 .br
       
  4698 .na
       
  4699 \fB\fBhist\fR \fB-s\fR \fB[\fR \fIold\fR\fB=\fR\fInew\fR \fB] [\fR \fIcommand\fR\fB]\fR\fR
       
  4700 .ad
       
  4701 .sp .6
       
  4702 .RS 4n
       
  4703 在第一种形式中,从 \fIfirst\fR 到 \fIlast\fR 的命令范围是从在终端键入的最后的 \fBHISTSIZE\fR 命令中选择的。参数 \fIfirst\fR 和 \fIlast\fR 可以指定为数字或字符串。字符串用于从指定字符串开始查找最近的命令。负数用作到当前命令数的偏移。如果选择 -l 选项,命令将列在标准输出中。否则,在包含这些键盘命令的文件中调用编辑器程序 \fIename\fR。如果未提供 \fIename\fR,将使用变量 \fBHISTEDIT\fR 的值。如果未设置 \fBHISTEDIT\fR,将 \fBFCEDIT\fR(缺省为 \fB /bin/ed\fR)用作编辑器。编辑完成后,如果更改已经保存,将执行编辑后的命令。如果未指定 \fIlast\fR,将它设置为 \fIfirst\fR。如果未指定 \fIfirst\fR,针对编辑和列举的缺省值分别为上一条命令和 \fB-16\fR。选项 \fB-r\fR 颠倒命令顺序,选项 \fB-n\fR 在列举时隐藏命令数。在第二种形式中,将 \fIcommand\fR 解释为本部分中所述的 \fIfirst\fR,缺省为最后执行的命令。在执行可选替代 \fIold\fR\fB=\fR\fInew\fR 之后执行生成的命令。
       
  4704 .RE
       
  4705 
       
  4706 .sp
       
  4707 .ne 2
       
  4708 .mk
       
  4709 .na
       
  4710 \fB\fBjobs\fR \fB-lnp\fR \fB[\fR\fIjob ...\fR\fB]\fR\fR
       
  4711 .ad
       
  4712 .sp .6
       
  4713 .RS 4n
       
  4714 列出有关每个指定作业或(如果省略 \fIjob\fR)所有活动作业的信息。除普通信息外,\fB-l\fR 还列出进程 ID。\fB-n\fR 选项仅显示自上次通知起已停止或退出的作业。可通过 \fB-p\fR 选项只列出进程组。请参见 \fBJobs\fR 了解 \fIjob\fR 格式的说明。
       
  4715 .RE
       
  4716 
       
  4717 .sp
       
  4718 .ne 2
       
  4719 .mk
       
  4720 .na
       
  4721 \fB\fBkill\fR \fB[\fR\fB-s\fR \fIsigname\fR\fB]\fR \fIjob ...\fR\fR
       
  4722 .ad
       
  4723 .br
       
  4724 .na
       
  4725 \fB\fBkill\fR \fB[\fR\fB-n\fR \fIsignum\fR\fB]\fR \fI job ...\fR\fR
       
  4726 .ad
       
  4727 .br
       
  4728 .na
       
  4729 \fB\fBkill\fR \fB-l\fR \fB[\fR\fIsig ...\fR\fB]\fR\fR
       
  4730 .ad
       
  4731 .sp .6
       
  4732 .RS 4n
       
  4733 向指定作业或进程发送 \fBTERM\fR(终端)信号或指定信号。通过具有 \fB-n\fR 选项的数字或具有 \fB-s\fR 选项的名称指定信号(如 \fB<signal.h\fR> 中指定,除去前缀 `\fBSIG\fR,除非将 \fBSIGCLD\fR 命名为 \fBCHLD\fR)。为实现向后兼容,可以省略 \fBn\fR 和 \fBs\fR,将数字或名称紧跟 \fB-\fR 之后。如果已发送的信号是 \fBTERM\fR(终端)或 \fBHUP\fR(挂断),在作业或进程停止时将其作为 \fBCONT\fR(继续)信号发送。参数 \fIjob\fR 可以是不属于某个活动作业的进程的进程 ID。请参见 \fBJobs\fR 了解 \fIjob\fR 格式的说明。在第三种形式 \fBkill -l\fR 中,如果未指定 \fIsig\fR,将列出信号名称。否则,对于作为名称的每个 \fIsig\fR,将列出相应的信号编号。对于作为编号的每个 \fIsig\fR,将列出与 \fIsig\fR 的最低有效 8 位对应的信号名称。
       
  4734 .RE
       
  4735 
       
  4736 .sp
       
  4737 .ne 2
       
  4738 .mk
       
  4739 .na
       
  4740 \fB\fBlet\fR \fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4741 .ad
       
  4742 .sp .6
       
  4743 .RS 4n
       
  4744 每个 \fIarg\fR 都是一个可求值的独立算术表达式。请参见本手册页的 \fBArithmetic Evaluation\fR 部分,了解算术表达式求值的说明。如果最后一个表达式的值是\fB非零\fR,则退出状态为 \fB0\fR,否则为 \fB1\fR。
       
  4745 .RE
       
  4746 
       
  4747 .sp
       
  4748 .ne 2
       
  4749 .mk
       
  4750 .na
       
  4751 \fB\fB+newgrp\fR \fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4752 .ad
       
  4753 .sp .6
       
  4754 .RS 4n
       
  4755 等效于 \fBexec\fR \fB/bin/newgrp\fR \fIarg ...\fR
       
  4756 .RE
       
  4757 
       
  4758 .sp
       
  4759 .ne 2
       
  4760 .mk
       
  4761 .na
       
  4762 \fB\fBprint\fR [\fB-Renprs\fR] \fB[\fR \fB-u\fR \fIunit\fR\fB] [\fR \fB-f\fR \fIformat\fR \fB] [\fR \fIarg ...\fR\fB]\fR\fR
       
  4763 .ad
       
  4764 .sp .6
       
  4765 .RS 4n
       
  4766 如果没有选项或者具有选项 \fB-\fR 或 \fB--\fR,将在标准输出中输出每个 \fIarg\fR。可通过 \fB-f\fR 选项按 \fBprintf\fR 所述输出参数。在这种情况下,忽略任何 \fBe\fR、\fBn\fR、\fBr\fR 或 \fBR\fR 选项。除非指定 \fB-R\fR 或 \fB-r,\fR,否则应用以下转义约定:
       
  4767 .sp
       
  4768 .ne 2
       
  4769 .mk
       
  4770 .na
       
  4771 \fB\fB\ea\fR\fR
       
  4772 .ad
       
  4773 .RS 8n
       
  4774 .rt  
       
  4775 警报字符 (\fBASCII\fR 07)
       
  4776 .RE
       
  4777 
       
  4778 .sp
       
  4779 .ne 2
       
  4780 .mk
       
  4781 .na
       
  4782 \fB\fB\eb\fR\fR
       
  4783 .ad
       
  4784 .RS 8n
       
  4785 .rt  
       
  4786 退格字符 (\fBASCII\fR 010)
       
  4787 .RE
       
  4788 
       
  4789 .sp
       
  4790 .ne 2
       
  4791 .mk
       
  4792 .na
       
  4793 \fB\fB\ec\fR\fR
       
  4794 .ad
       
  4795 .RS 8n
       
  4796 .rt  
       
  4797 使输出终止,而不处理更多参数,且不添加换行符
       
  4798 .RE
       
  4799 
       
  4800 .sp
       
  4801 .ne 2
       
  4802 .mk
       
  4803 .na
       
  4804 \fB\fB\ef\fR\fR
       
  4805 .ad
       
  4806 .RS 8n
       
  4807 .rt  
       
  4808 换页字符 (\fBASCII\fR 014)
       
  4809 .RE
       
  4810 
       
  4811 .sp
       
  4812 .ne 2
       
  4813 .mk
       
  4814 .na
       
  4815 \fB\fB\en\fR\fR
       
  4816 .ad
       
  4817 .RS 8n
       
  4818 .rt  
       
  4819 换行符 (\fBASCII\fR 012)
       
  4820 .RE
       
  4821 
       
  4822 .sp
       
  4823 .ne 2
       
  4824 .mk
       
  4825 .na
       
  4826 \fB\fB\er\fR\fR
       
  4827 .ad
       
  4828 .RS 8n
       
  4829 .rt  
       
  4830 RETURN 字符 (\fBASCII\fR 015)
       
  4831 .RE
       
  4832 
       
  4833 .sp
       
  4834 .ne 2
       
  4835 .mk
       
  4836 .na
       
  4837 \fB\fB\et\fR\fR
       
  4838 .ad
       
  4839 .RS 8n
       
  4840 .rt  
       
  4841 TAB 字符 (\fBASCII\fR 011)
       
  4842 .RE
       
  4843 
       
  4844 .sp
       
  4845 .ne 2
       
  4846 .mk
       
  4847 .na
       
  4848 \fB\fB\ev\fR\fR
       
  4849 .ad
       
  4850 .RS 8n
       
  4851 .rt  
       
  4852 垂直 TAB 字符 (\fBASCII\fR 013)
       
  4853 .RE
       
  4854 
       
  4855 .sp
       
  4856 .ne 2
       
  4857 .mk
       
  4858 .na
       
  4859 \fB\fB\eE\fR\fR
       
  4860 .ad
       
  4861 .RS 8n
       
  4862 .rt  
       
  4863 转义符 (\fBASCII\fR 033)
       
  4864 .RE
       
  4865 
       
  4866 .sp
       
  4867 .ne 2
       
  4868 .mk
       
  4869 .na
       
  4870 \fB\fB\e\e\fR\fR
       
  4871 .ad
       
  4872 .RS 8n
       
  4873 .rt  
       
  4874 反斜杠字符 \fB\e\fR
       
  4875 .RE
       
  4876 
       
  4877 .sp
       
  4878 .ne 2
       
  4879 .mk
       
  4880 .na
       
  4881 \fB\fB\e0\fR\fIx\fR\fR
       
  4882 .ad
       
  4883 .RS 8n
       
  4884 .rt  
       
  4885 通过 \fIx\fR 指定的 1、2 或 3 位八进制字符串定义的字符
       
  4886 .RE
       
  4887 
       
  4888 \fB-R\fR 选项输出除 \fB-n\fR 之外的所有后续参数和选项。可通过 \fB-e\fR 应用转义约定,这是缺省行为。它颠倒早先 \fB-r\fR 的效果。可通过 \fB-p\fR 选项将参数写入到通过 \fB|&\fR 产生的进程管道中,而不是标准输出中。可通过 \fB-s\fR 选项将参数写入到历史文件中而不是标准输出中。\fB-u\fR 选项可用于指定输出所在的一位文件描述符单元编号 \fIunit\fR。缺省值为 \fB1\fR。如果使用 \fB-n\fR 选项,则不会将换行符添加到输出中。
       
  4889 .RE
       
  4890 
       
  4891 .sp
       
  4892 .ne 2
       
  4893 .mk
       
  4894 .na
       
  4895 \fB\fBprintf\fR \fIformat\fR\fB[\fR\fIarg ...\fR\fB]\fR\fR
       
  4896 .ad
       
  4897 .sp .6
       
  4898 .RS 4n
       
  4899 根据与格式字符串 \fIformat\fR 关联的 \fBANSI-C\fR 格式化规则,在标准输出中输出参数 \fIarg\fR。如果参数的数目超过格式指定的数目,将重用该格式字符串格式化剩余的参数。还可以使用以下表达式:可以用 \fB%b\fR 格式代替 \fB%s\fR 以按照 \fBprint\fR 中的说明扩展对应 \fIarg\fR 中的转义序列。可通过 \fB%B\fR 选项将每个参数作为变量名称处理并输出变量的二进制值。这对于具有属性 b 的变量非常有用。可以用 \fB%H\fR 格式代替 \fB%s\fR,以便将 \fIarg\fR 中对 \fBHTML\fR 和 \fBXML\fR 特殊的字符作为它们的实体名称输出。可以用 \fB%P\fR 格式代替 \fB%s\fR,以便将 \fIarg\fR 解释为扩展的正则表达式并作为 shell 模式输出。可以用 \fB%R\fR 格式代替 \fB%s\fR,以便将 \fIarg\fR 解释为 shell 模式并作为扩展的正则表达式输出。可以用 \fB%q\fR 格式代替 \fB%\fR,以便通过可重新输入到 shell 的方式引用生成的字符串。\fB%(\fR\fIdate-format\fR\fB)T\fR 格式可用于将参数作为日期/时间字符串来处理并根据为 \fBdate\fR(1) 命令定义的 \fIdate-format\fR 格式化日期/时间。\fB%Z\fR 格式可输出其值为 0 的字节。%d 格式的精度字段可以后跟 a . 和输出基数。在这种情况下,可通过 \fB#\fR 标志字符使 \fBbase\fR\fI#\fR 前置。\fB#\fR 标志与 \fBd\fR 说明符一起使用但没有输出基数时,使输出以千分位显示,后缀 \fBk\fR \fBM\fR \fBG\fR \fBT\fR \fBP\fR \fBE\fR 中的其中一个表示单位。\fB#\fR 标志与 i 说明符一起使用时,使输出以 \fB1024\fR 显示,后缀 \fBKi\fR \fBMi\fR \fBGi\fR \fBTi\fR \fBPi\fR \fBEi\fR 中的其中一个表示单位。已添加 \fB=\fR 标志以使输出在指定的字段宽度内居中。
       
  4900 .RE
       
  4901 
       
  4902 .sp
       
  4903 .ne 2
       
  4904 .mk
       
  4905 .na
       
  4906 \fB\fBpwd\fR [\fB-LP\fR]\fR
       
  4907 .ad
       
  4908 .sp .6
       
  4909 .RS 4n
       
  4910 输出当前工作目录的值。\fB-L\fR 选项为缺省选项,用于输出当前目录的逻辑名称。如果指定了 \fB-P\fR 选项,将基于该名称解析所有的符号链接。命令行中的 \fB-L\fR 或 \fB-P\fR 的最后一个实例可确定使用的方法。
       
  4911 .RE
       
  4912 
       
  4913 .sp
       
  4914 .ne 2
       
  4915 .mk
       
  4916 .na
       
  4917 \fB\fBread\fR \fB[\fR\fB-Aprs\fR\fB] [\fR\fB-d\fR \fIdelim\fR\fB] [\fR \fB-n\fR \fIn\fR\fB] [[\fR \fB-N\fR \fIn\fR\fB ] [[\fR\fB-t\fR \fItimeout\fR\fB] [\fR\fB-u\fR \fIunit\fR\fB] [\fR\fIvname\fR\fB?\fR\fIprompt\fR\fB] [\fR \fIvname ...\fR \fB ]\fR\fR
       
  4918 .ad
       
  4919 .sp .6
       
  4920 .RS 4n
       
  4921 shell 输入机制。读取一行并使用 IFS 中的字符作为分隔符将该行分为多个字段。转义符 \fB\e\fR 用于去除下一个字符和续行符的任何特殊含义。可通过 \fB-d\fR 选项将读取延续到 \fIdelim\fR(而不是\fB换行符\fR)的第一个字符。可通过 \fB-n\fR 选项最多只读取 \fIn\fR 字节而不是整行,但在从速度较慢的设备中读取时,只要已读取任何字符即将其返回。可通过 \fB-N\fR 选项恰好读取 \fIn\fR 字节,除非到达文件结尾或因设置了 \fB-t\fR 选项而导致读取超时。在原始模式下 (\fB-r\fR),不特殊处理 \fB\e\fR 字符。第一个字段分配给第一个 \fIvname\fR,第二个字段分配给第二个 \fIvname\fR,以此类推,剩余的字段分配给最后一个 \fIvname\fR。如果 \fIvname\fR 具有二进制属性并且已指定 \fB-n\fR 或 \fB-N\fR,读取的字节将直接存储在变量中。如果已指定 -v,将第一个 \fIvname\fR 的值用作从终端设备读取时的缺省值。可通过 \fB-A\fR 选项取消设置变量 \fIvname\fR,并使读取的每个字段存储在索引数组 \fIvname\fR 的连续元素中。通过 \fB-p\fR 选项,使用 \fB|&\fR 从 shell 产生的进程输入管道中获取输入行。如果存在 \fB-s\fR 选项,将输入另存为历史文件中的命令。选项 \fB-u\fR 可用于指定从中读取的一位文件描述符单元 \fIunit\fR。可以通过特殊的内置命令 \fBexec\fR 打开文件描述符。单元 \fIn\fR 的缺省值是 \fB0\fR。选项 \fB-t\fR 用于指定从终端或管道读取时以秒为单位的超时。如果省略 \fIvname\fR,则 REPLY 将用作缺省的 \fIvname\fR。具有 \fB-p\fR 选项的文件结尾可清除该进程,这样可以生成其他进程。如果第一个参数包含 \fB?\fR,则当 shell 为交互式 shell 时,该单词的剩余部分将用作标准错误输出中的提示。除非到达文件结尾或读取超时,否则退出状态为 \fB0\fR。
       
  4922 .RE
       
  4923 
       
  4924 .sp
       
  4925 .ne 2
       
  4926 .mk
       
  4927 .na
       
  4928 \fB\fB++readonly\fR \fB[\fR\fB-p\fR\fB] [\fR \fIvname\fR\fB[=\fR\fIvalue\fR\fB]] ...\fR\fR
       
  4929 .ad
       
  4930 .sp .6
       
  4931 .RS 4n
       
  4932 如果未指定 \fIvname\fR,将输出具有只读属性的每个变量的名称和值,并且以能够重新输入的方式将值括起来。通过 \fB-p\fR 选项将单词 \fBreadonly\fR 插入在每个变量之前。否则,将对指定的 \fIvname\fR 标记 \fBreadonly\fR,且不能通过后续赋值更改这些名称。 
       
  4933 .RE
       
  4934 
       
  4935 .sp
       
  4936 .ne 2
       
  4937 .mk
       
  4938 .na
       
  4939 \fB\fB+return\fR \fB[\fR\fIn\fR\fB]\fR\fR
       
  4940 .ad
       
  4941 .sp .6
       
  4942 .RS 4n
       
  4943 使 shell 函数或脚本返回到具有 \fIn\fR 指定的退出状态的调用脚本。该值是指定状态的最低有效 8 位。如果省略 \fBn\fR,则返回状态为最后执行的命令的返回状态。如果调用的返回不在函数或脚本中,则与退出的行为相同。 
       
  4944 .RE
       
  4945 
       
  4946 .sp
       
  4947 .ne 2
       
  4948 .mk
       
  4949 .na
       
  4950 \fB\fB+set [ \(+-BCGabefhkmnoprstuvx] [\(+-o [\fR \fIoption\fR \fB] ] ... [ \(+-A\fR \fIvname\fR\fB]\fR \fB[\fR\fIarg...\fR\fB]\fR\fR
       
  4951 .ad
       
  4952 .sp .6
       
  4953 .RS 4n
       
  4954 \fBset\fR 命令支持以下选项:
       
  4955 .sp
       
  4956 .ne 2
       
  4957 .mk
       
  4958 .na
       
  4959 \fB\fB-a\fR\fR
       
  4960 .ad
       
  4961 .sp .6
       
  4962 .RS 4n
       
  4963 自动导出已定义的所有后续变量。
       
  4964 .RE
       
  4965 
       
  4966 .sp
       
  4967 .ne 2
       
  4968 .mk
       
  4969 .na
       
  4970 \fB\fB-A\fR\fR
       
  4971 .ad
       
  4972 .sp .6
       
  4973 .RS 4n
       
  4974 数组赋值。取消设置变量 \fIvname\fR,并按顺序从 \fIarg\fR 列表中赋值。如果使用 \fB+A\fR,则首先不取消设置变量 \fIvname\fR。
       
  4975 .RE
       
  4976 
       
  4977 .sp
       
  4978 .ne 2
       
  4979 .mk
       
  4980 .na
       
  4981 \fB\fB-b\fR\fR
       
  4982 .ad
       
  4983 .sp .6
       
  4984 .RS 4n
       
  4985 一旦后台作业更改状态,即输出作业完成消息,而不是等待下一提示。
       
  4986 .RE
       
  4987 
       
  4988 .sp
       
  4989 .ne 2
       
  4990 .mk
       
  4991 .na
       
  4992 \fB\fB-B\fR\fR
       
  4993 .ad
       
  4994 .sp .6
       
  4995 .RS 4n
       
  4996 启用大括号模式字段生成。这是缺省行为。
       
  4997 .RE
       
  4998 
       
  4999 .sp
       
  5000 .ne 2
       
  5001 .mk
       
  5002 .na
       
  5003 \fB\fB-C\fR\fR
       
  5004 .ad
       
  5005 .sp .6
       
  5006 .RS 4n
       
  5007 阻止重定向 (\fB>\fR) 截断现有文件。通过 \fBO_EXCL\fR 模式打开已创建的文件。要求 \fB>|\fR 在启用时截断文件。
       
  5008 .RE
       
  5009 
       
  5010 .sp
       
  5011 .ne 2
       
  5012 .mk
       
  5013 .na
       
  5014 \fB\fB-e\fR\fR
       
  5015 .ad
       
  5016 .sp .6
       
  5017 .RS 4n
       
  5018 如果命令具有\fB非零\fR退出状态,则执行 \fBERR\fR 捕获(如果已设置)并退出。该模式在读取配置文件时被禁用。
       
  5019 .RE
       
  5020 
       
  5021 .sp
       
  5022 .ne 2
       
  5023 .mk
       
  5024 .na
       
  5025 \fB\fB-f\fR\fR
       
  5026 .ad
       
  5027 .sp .6
       
  5028 .RS 4n
       
  5029 禁用文件名生成。
       
  5030 .RE
       
  5031 
       
  5032 .sp
       
  5033 .ne 2
       
  5034 .mk
       
  5035 .na
       
  5036 \fB\fB-G\fR\fR
       
  5037 .ad
       
  5038 .sp .6
       
  5039 .RS 4n
       
  5040 在用于文件名生成时,使模式 \fB**\fR 本身与文件及零个或多个目录和子目录匹配。如果后跟 \fB/\fR,则仅匹配目录和子目录。
       
  5041 .RE
       
  5042 
       
  5043 .sp
       
  5044 .ne 2
       
  5045 .mk
       
  5046 .na
       
  5047 \fB\fB-h\fR\fR
       
  5048 .ad
       
  5049 .sp .6
       
  5050 .RS 4n
       
  5051 每个命令在第一次遇到时将成为被跟踪别名。
       
  5052 .RE
       
  5053 
       
  5054 .sp
       
  5055 .ne 2
       
  5056 .mk
       
  5057 .na
       
  5058 \fB\fB-k\fR\fR
       
  5059 .ad
       
  5060 .sp .6
       
  5061 .RS 4n
       
  5062 已过时。将所有的变量赋值参数放在命令的环境中,而不仅仅是命令名称前面的参数。
       
  5063 .RE
       
  5064 
       
  5065 .sp
       
  5066 .ne 2
       
  5067 .mk
       
  5068 .na
       
  5069 \fB\fB-m\fR\fR
       
  5070 .ad
       
  5071 .sp .6
       
  5072 .RS 4n
       
  5073 后台作业在单独的进程组中运行,并在完成时输出一行。在完成消息中报告后台作业的退出状态。在具有作业控制的系统上,为交互式 shell 自动启用该选项。
       
  5074 .RE
       
  5075 
       
  5076 .sp
       
  5077 .ne 2
       
  5078 .mk
       
  5079 .na
       
  5080 \fB\fB-n\fR\fR
       
  5081 .ad
       
  5082 .sp .6
       
  5083 .RS 4n
       
  5084 读取命令并检查其中是否存在语法错误,但不执行这些命令。 对于交互式 shell,忽略此命令。
       
  5085 .RE
       
  5086 
       
  5087 .sp
       
  5088 .ne 2
       
  5089 .mk
       
  5090 .na
       
  5091 \fB\fB-o\fR\fR
       
  5092 .ad
       
  5093 .sp .6
       
  5094 .RS 4n
       
  5095 如果未提供选项名称,则会将选项及其当前设置的列表写入到标准输出。当与 \fB+\fR 一起调用此命令时,这些选项将以可重新输入到 shell 的格式写入,以便恢复相应设置。重复此选项可以启用或禁用多个选项。
       
  5096 .sp
       
  5097 下列参数可以是下列选项名称之一:
       
  5098 .sp
       
  5099 .ne 2
       
  5100 .mk
       
  5101 .na
       
  5102 \fB\fBallexport\fR\fR
       
  5103 .ad
       
  5104 .sp .6
       
  5105 .RS 4n
       
  5106 与 \fB-a\fR 相同。
       
  5107 .RE
       
  5108 
       
  5109 .sp
       
  5110 .ne 2
       
  5111 .mk
       
  5112 .na
       
  5113 \fB\fBbgnice\fR\fR
       
  5114 .ad
       
  5115 .sp .6
       
  5116 .RS 4n
       
  5117 以较低的优先级运行所有后台作业。这是缺省模式。
       
  5118 .RE
       
  5119 
       
  5120 .sp
       
  5121 .ne 2
       
  5122 .mk
       
  5123 .na
       
  5124 \fB\fBbraceexpand\fR\fR
       
  5125 .ad
       
  5126 .sp .6
       
  5127 .RS 4n
       
  5128 与 \fB-\fRB 相同。
       
  5129 .RE
       
  5130 
       
  5131 .sp
       
  5132 .ne 2
       
  5133 .mk
       
  5134 .na
       
  5135 \fB\fBemacs\fR\fR
       
  5136 .ad
       
  5137 .sp .6
       
  5138 .RS 4n
       
  5139 使您进入 \fBemacs\fR 样式的内嵌编辑器以便输入命令。
       
  5140 .RE
       
  5141 
       
  5142 .sp
       
  5143 .ne 2
       
  5144 .mk
       
  5145 .na
       
  5146 \fB\fBerrexit\fR\fR
       
  5147 .ad
       
  5148 .sp .6
       
  5149 .RS 4n
       
  5150 与 \fB-e\fR 相同。
       
  5151 .RE
       
  5152 
       
  5153 .sp
       
  5154 .ne 2
       
  5155 .mk
       
  5156 .na
       
  5157 \fB\fBglobstar\fR\fR
       
  5158 .ad
       
  5159 .sp .6
       
  5160 .RS 4n
       
  5161 与 \fB-G\fR 相同。
       
  5162 .RE
       
  5163 
       
  5164 .sp
       
  5165 .ne 2
       
  5166 .mk
       
  5167 .na
       
  5168 \fB\fBgmacs\fR\fR
       
  5169 .ad
       
  5170 .sp .6
       
  5171 .RS 4n
       
  5172 使您进入 \fBgmacs\fR 样式的内嵌编辑器以便输入命令。
       
  5173 .RE
       
  5174 
       
  5175 .sp
       
  5176 .ne 2
       
  5177 .mk
       
  5178 .na
       
  5179 \fB\fBignoreeof\fR\fR
       
  5180 .ad
       
  5181 .sp .6
       
  5182 .RS 4n
       
  5183 此 shell 不会在文件结尾退出。必须使用 \fBexit\fR 命令。
       
  5184 .RE
       
  5185 
       
  5186 .sp
       
  5187 .ne 2
       
  5188 .mk
       
  5189 .na
       
  5190 \fB\fBkeyword\fR\fR
       
  5191 .ad
       
  5192 .sp .6
       
  5193 .RS 4n
       
  5194 与 \fB-k\fR 相同。
       
  5195 .RE
       
  5196 
       
  5197 .sp
       
  5198 .ne 2
       
  5199 .mk
       
  5200 .na
       
  5201 \fB\fBmarkdirs\fR\fR
       
  5202 .ad
       
  5203 .sp .6
       
  5204 .RS 4n
       
  5205 文件名生成操作生成的所有目录名称都附加有尾随 /。
       
  5206 .RE
       
  5207 
       
  5208 .sp
       
  5209 .ne 2
       
  5210 .mk
       
  5211 .na
       
  5212 \fB\fBmonitor\fR\fR
       
  5213 .ad
       
  5214 .sp .6
       
  5215 .RS 4n
       
  5216 与 \fB-m\fR 相同。
       
  5217 .RE
       
  5218 
       
  5219 .sp
       
  5220 .ne 2
       
  5221 .mk
       
  5222 .na
       
  5223 \fB\fBmultiline\fR\fR
       
  5224 .ad
       
  5225 .sp .6
       
  5226 .RS 4n
       
  5227 对于长于屏幕宽度的行,内置编辑器在屏幕上使用多个行。这可能不适用于所有终端。
       
  5228 .RE
       
  5229 
       
  5230 .sp
       
  5231 .ne 2
       
  5232 .mk
       
  5233 .na
       
  5234 \fB\fBnoclobber\fR\fR
       
  5235 .ad
       
  5236 .sp .6
       
  5237 .RS 4n
       
  5238 与 \fB-C\fR 相同。
       
  5239 .RE
       
  5240 
       
  5241 .sp
       
  5242 .ne 2
       
  5243 .mk
       
  5244 .na
       
  5245 \fB\fBnoexec\fR\fR
       
  5246 .ad
       
  5247 .sp .6
       
  5248 .RS 4n
       
  5249 与 \fB-n\fR 相同。
       
  5250 .RE
       
  5251 
       
  5252 .sp
       
  5253 .ne 2
       
  5254 .mk
       
  5255 .na
       
  5256 \fB\fBnoglob\fR\fR
       
  5257 .ad
       
  5258 .sp .6
       
  5259 .RS 4n
       
  5260 与 \fB-f\fR 相同。
       
  5261 .RE
       
  5262 
       
  5263 .sp
       
  5264 .ne 2
       
  5265 .mk
       
  5266 .na
       
  5267 \fB\fBnolog\fR\fR
       
  5268 .ad
       
  5269 .sp .6
       
  5270 .RS 4n
       
  5271 不会在历史文件中保存函数定义。
       
  5272 .RE
       
  5273 
       
  5274 .sp
       
  5275 .ne 2
       
  5276 .mk
       
  5277 .na
       
  5278 \fB\fBnotify\fR\fR
       
  5279 .ad
       
  5280 .sp .6
       
  5281 .RS 4n
       
  5282 与 \fB-b\fR 相同。
       
  5283 .RE
       
  5284 
       
  5285 .sp
       
  5286 .ne 2
       
  5287 .mk
       
  5288 .na
       
  5289 \fB\fBnounset\fR\fR
       
  5290 .ad
       
  5291 .sp .6
       
  5292 .RS 4n
       
  5293 与 \fB-u\fR 相同。
       
  5294 .RE
       
  5295 
       
  5296 .sp
       
  5297 .ne 2
       
  5298 .mk
       
  5299 .na
       
  5300 \fB\fBpipefail\fR\fR
       
  5301 .ad
       
  5302 .sp .6
       
  5303 .RS 4n
       
  5304 管道将在所有管道组件完成后完成,并且返回值为失败的最后一个\fB非零\fR命令的值,如果没有任何命令失败,则为零。
       
  5305 .RE
       
  5306 
       
  5307 .sp
       
  5308 .ne 2
       
  5309 .mk
       
  5310 .na
       
  5311 \fB\fBprivileged\fR\fR
       
  5312 .ad
       
  5313 .sp .6
       
  5314 .RS 4n
       
  5315 与 \fB-p\fR 相同。
       
  5316 .RE
       
  5317 
       
  5318 .sp
       
  5319 .ne 2
       
  5320 .mk
       
  5321 .na
       
  5322 \fB\fBshowme\fR\fR
       
  5323 .ad
       
  5324 .sp .6
       
  5325 .RS 4n
       
  5326 启用此命令后,将显示前面带有分号 (\fB;\fR) 的简单命令或管道,就像启用了 \fBxtrace\fR 选项但未执行此选项一样。否则,将忽略前导 \fB;\fR。
       
  5327 .RE
       
  5328 
       
  5329 .sp
       
  5330 .ne 2
       
  5331 .mk
       
  5332 .na
       
  5333 \fB\fBtrackall\fR\fR
       
  5334 .ad
       
  5335 .sp .6
       
  5336 .RS 4n
       
  5337 与 \fB-h\fR 相同。
       
  5338 .RE
       
  5339 
       
  5340 .sp
       
  5341 .ne 2
       
  5342 .mk
       
  5343 .na
       
  5344 \fB\fBverbose\fR\fR
       
  5345 .ad
       
  5346 .sp .6
       
  5347 .RS 4n
       
  5348 与 \fB-v\fR 相同。
       
  5349 .RE
       
  5350 
       
  5351 .sp
       
  5352 .ne 2
       
  5353 .mk
       
  5354 .na
       
  5355 \fB\fBvi\fR\fR
       
  5356 .ad
       
  5357 .sp .6
       
  5358 .RS 4n
       
  5359 使您进入 \fBvi\fR 样式的内嵌编辑器的插入模式,直到您键入转义符 033 为止。这会使您进入控制模式。回车可发送此行。
       
  5360 .RE
       
  5361 
       
  5362 .sp
       
  5363 .ne 2
       
  5364 .mk
       
  5365 .na
       
  5366 \fB\fBviraw\fR\fR
       
  5367 .ad
       
  5368 .sp .6
       
  5369 .RS 4n
       
  5370 各个字符在 \fBvi\fR 模式下键入时处理。
       
  5371 .RE
       
  5372 
       
  5373 .sp
       
  5374 .ne 2
       
  5375 .mk
       
  5376 .na
       
  5377 \fB\fBxtrace\fR\fR
       
  5378 .ad
       
  5379 .sp .6
       
  5380 .RS 4n
       
  5381 与 \fB-x\fR 相同。 
       
  5382 .sp
       
  5383 如果未提供选项名称,则输出当前选项设置。
       
  5384 .RE
       
  5385 
       
  5386 .RE
       
  5387 
       
  5388 .sp
       
  5389 .ne 2
       
  5390 .mk
       
  5391 .na
       
  5392 \fB\fB-p\fR\fR
       
  5393 .ad
       
  5394 .sp .6
       
  5395 .RS 4n
       
  5396 禁用对\fB$HOME/.profile\fR 文件的处理,并使用文件 \fB/etc/suid_profile\fR(而非 \fBENV\fR 文件)。当有效 \fBuid\fR (\fBgid\fR) 不等于实际 \fBuid\fR (\fBgid\fR) 时,将启用此模式。禁用此模式会导致将有效 \fBuid\fR 和 \fBgid\fR 设置为实际 \fBuid\fR 和 \fBgid\fR。
       
  5397 .RE
       
  5398 
       
  5399 .sp
       
  5400 .ne 2
       
  5401 .mk
       
  5402 .na
       
  5403 \fB\fB-r\fR\fR
       
  5404 .ad
       
  5405 .sp .6
       
  5406 .RS 4n
       
  5407 启用受限 shell。此选项一旦设置便不能取消设置。
       
  5408 .RE
       
  5409 
       
  5410 .sp
       
  5411 .ne 2
       
  5412 .mk
       
  5413 .na
       
  5414 \fB\fB-s\fR\fR
       
  5415 .ad
       
  5416 .sp .6
       
  5417 .RS 4n
       
  5418 按字典顺序对位置参数进行排序。
       
  5419 .RE
       
  5420 
       
  5421 .sp
       
  5422 .ne 2
       
  5423 .mk
       
  5424 .na
       
  5425 \fB\fB-t\fR\fR
       
  5426 .ad
       
  5427 .sp .6
       
  5428 .RS 4n
       
  5429 已过时。读取和执行一个命令后退出。
       
  5430 .RE
       
  5431 
       
  5432 .sp
       
  5433 .ne 2
       
  5434 .mk
       
  5435 .na
       
  5436 \fB\fB-u\fR\fR
       
  5437 .ad
       
  5438 .sp .6
       
  5439 .RS 4n
       
  5440 替换时将 \fBunset\fR 参数视为错误。
       
  5441 .RE
       
  5442 
       
  5443 .sp
       
  5444 .ne 2
       
  5445 .mk
       
  5446 .na
       
  5447 \fB\fB-v\fR\fR
       
  5448 .ad
       
  5449 .sp .6
       
  5450 .RS 4n
       
  5451 在读取 shell 输入行时输出这些行。
       
  5452 .RE
       
  5453 
       
  5454 .sp
       
  5455 .ne 2
       
  5456 .mk
       
  5457 .na
       
  5458 \fB\fB-x\fR\fR
       
  5459 .ad
       
  5460 .sp .6
       
  5461 .RS 4n
       
  5462 在执行命令及其参数时输出这些命令及其参数。
       
  5463 .RE
       
  5464 
       
  5465 .sp
       
  5466 .ne 2
       
  5467 .mk
       
  5468 .na
       
  5469 \fB\fB--\fR\fR
       
  5470 .ad
       
  5471 .sp .6
       
  5472 .RS 4n
       
  5473 不更改任何选项。在将 \fB$1\fR 设置为以 \fB-\fR 开头的值时,此命令非常有用。如果此选项后没有任何参数,则取消设置位置参数。
       
  5474 .RE
       
  5475 
       
  5476 作为一项已过时的功能,如果第一个 \fIarg\fR 为 -,则会禁用 \fB-x\fR 和 \fB-v\fR 选项,并将下一个 \fIarg\fR 视为第一个参数。使用 \fB+\fR(而非 \fB-\fR)将导致禁用这些选项。此外,还可以在调用 shell 时使用这些选项。当前选项集可在 \fB$-\fR 中找到。除非指定了 \fB-A\fR,否则其余参数均为位置参数,并按照 \fB$1 $2 ... 的顺序进行分配。\fR如果未指定参数,则在标准输出中输出所有变量的名称和值。
       
  5477 .RE
       
  5478 
       
  5479 .sp
       
  5480 .ne 2
       
  5481 .mk
       
  5482 .na
       
  5483 \fB\fB+shift\fR \fB[\fR\fIn\fR\fB]\fR\fR
       
  5484 .ad
       
  5485 .sp .6
       
  5486 .RS 4n
       
  5487 \fB$\fR\fIn\fR\fB+1 ...\fR 中的位置参数重命名为 \fB$1 ...\fR,缺省的 \fIn\fR 为 \fB1\fR。参数 \fIn\fR 可以为任何算术表达式,此算术表达式的计算结果为小于或等于 \fB$#\fR 的非负数字。
       
  5488 .RE
       
  5489 
       
  5490 .sp
       
  5491 .ne 2
       
  5492 .mk
       
  5493 .na
       
  5494 \fB\fB+trap\fR \fB-p\fR \fB[\fR\fIaction\fR\fB]\fR \fB[\fR\fIsig\fR\fB] ...\fR\fR
       
  5495 .ad
       
  5496 .sp .6
       
  5497 .RS 4n
       
  5498 \fB-p\fR 选项导致输出与参数指定的每个陷阱相关联的陷阱操作,并进行相应引用。否则,当 shell 接收信号 \fIsig\fR 时,则会处理 \fIaction\fR,就像它是 \fBeval\fR 的参数一样。可以以编号或信号名称的形式指定每个 \fIsig\fR。陷阱命令按照信号编号的顺序执行。尝试对输入到当前 shell 时忽略的信号设置陷阱将不起作用。如果省略了 \fIaction\fR,并且第一个 \fIsig\fR 为编号,或者如果 \fIaction\fR 为 \fB-\fR,则会将每个 \fIsig\fR 的陷阱重置为其原始值。如果 \fIaction\fR 为空字符串,shell 及其调用的命令将忽略此信号。如果 \fIsig\fR 为 \fBERR\fR,当命令的退出状态为\fB非零\fR时,将执行 \fIaction\fR。如果 \fIsig\fR 为 \fBDEBUG\fR,则会在每个命令之前执行 \fIaction\fR。当运行 \fIaction\fR 时,变量 \fB\&.sh.command\fR 包含当前命令行的内容。如果 \fIsig\fR 为 \fB0\fR 或 \fBEXIT\fR,并且在使用 \fBfunction\fR \fIname\fR 语法定义的函数主体内执行陷阱语句,则会在此函数完成后执行命令 \fIaction\fR。对于在任何函数外部设置的陷阱,如果 \fIsig\fR 为 \fB0\fR 或 \fBEXIT\fR,则会在退出时从 shell 执行命令 \fIaction\fR。如果 \fIsig\fR 为 \fBKEYBD\fR,则会在 \fBemacs\fR、\fBgmacs\fR 或 \fBvi\fR 模式下读取键时执行 \fIaction\fR。不带参数的 \fBtrap\fR 命令输出与各信号编号关联的命令的列表。
       
  5499 .RE
       
  5500 
       
  5501 .sp
       
  5502 .ne 2
       
  5503 .mk
       
  5504 .na
       
  5505 \fB\fBtrue\fR\fR
       
  5506 .ad
       
  5507 .sp .6
       
  5508 .RS 4n
       
  5509 不执行任何操作,退出 \fB0\fR。与 while 一起用于无限循环。
       
  5510 .RE
       
  5511 
       
  5512 .sp
       
  5513 .ne 2
       
  5514 .mk
       
  5515 .na
       
  5516 \fB\fB++typeset [\(+-AHflabnprtux ] [ \(+-EFLRZi[\fR\fIn\fR\fB] ] [\fR \fIvname\fR\fB[=\fR\fIvalue\fR \fB] ]\fR\fR
       
  5517 .ad
       
  5518 .sp .6
       
  5519 .RS 4n
       
  5520 设置 shell 变量和函数的属性及值。当在使用 \fBfunction\fR \fIname\fR 语法定义的函数内部调用时,将创建一个新的 \fIvname\fR 变量实例,并在此函数完成时恢复变量的值和类型。 
       
  5521 .sp
       
  5522 使用 \fB+\fR(而非 \fB-\fR)将导致禁用这些选项。如果未指定 \fIvname\fR 参数,则输出变量的 \fIvname\fR(以及可选 \fIvalue\fR)的列表。使用 \fB+\fR(而非 \fB-\fR)可防止输出值。\fB-p\fR 选项导致在每个名称(而非选项名称)之前输出后跟有选项字母的 \fBtypeset\fR。如果指定了除 \fB-p\fR 以外的任何选项,则仅输出具有所有指定选项的变量。否则输出具有属性的所有变量的 \fIvname\fR 和 \fIattributes\fR。
       
  5523 .sp
       
  5524 可以指定下列属性列表:
       
  5525 .sp
       
  5526 .ne 2
       
  5527 .mk
       
  5528 .na
       
  5529 \fB\fB-a\fR\fR
       
  5530 .ad
       
  5531 .RS 6n
       
  5532 .rt  
       
  5533 将 \fIvname\fR 声明为索引数组。这是可选属性(除非用于复合变量赋值)。
       
  5534 .RE
       
  5535 
       
  5536 .sp
       
  5537 .ne 2
       
  5538 .mk
       
  5539 .na
       
  5540 \fB\fB-A\fR\fR
       
  5541 .ad
       
  5542 .RS 6n
       
  5543 .rt  
       
  5544 将 \fIvname\fR 声明为关联数组。下标是字符串,而不是算术表达式。
       
  5545 .RE
       
  5546 
       
  5547 .sp
       
  5548 .ne 2
       
  5549 .mk
       
  5550 .na
       
  5551 \fB\fB-b\fR\fR
       
  5552 .ad
       
  5553 .RS 6n
       
  5554 .rt  
       
  5555 此变量可保存任意字节数目的数据。数据可以是文本或二进制数据。此变量的值通过数据的 \fBbase64\fR 编码表示。如果还指定了 \fB-Z\fR,缓冲区中的数据大小(以字节为单位)则由与 \fB-Z\fR 关联的大小确定。如果分配的 \fBbase64\fR 字符串导致生成更多数据,则会截断此数据。否则,则会使用值为零的字节填充此数据。\fBprintf\fR 格式 \fB%B\fR 可用于输出此缓冲区中的实际数据,而非数据的 \fBbase64\fR 编码。
       
  5556 .RE
       
  5557 
       
  5558 .sp
       
  5559 .ne 2
       
  5560 .mk
       
  5561 .na
       
  5562 \fB\fB-E\fR\fR
       
  5563 .ad
       
  5564 .RS 6n
       
  5565 .rt  
       
  5566 将 \fIvname\fR 声明为双精度浮点数。如果 \fIn\fR 为\fB非零\fR,则定义扩展 \fIvname\fR 时使用的有效数字的数目。否则使用 10 个有效数字。
       
  5567 .RE
       
  5568 
       
  5569 .sp
       
  5570 .ne 2
       
  5571 .mk
       
  5572 .na
       
  5573 \fB\fB-f\fR\fR
       
  5574 .ad
       
  5575 .RS 6n
       
  5576 .rt  
       
  5577 这些名称引用函数名称,而非变量名称。不会进行赋值,其他有效选项仅包括 \fB-t\fR、\fB-u\fR 和 \fB-x\fR。\fB-t\fR 选项对此函数启用执行跟踪。\fB-u\fR 选项导致将此函数标记为未定义。搜索 \fBFPATH\fR 变量,以便在引用函数时查找函数定义。如果指定了除 \fB-f\fR 以外的选项,则会在标准输出中显示函数定义。如果指定了 \fB+f\fR,则会显示一个行,此行包含后跟有一条 shell 注释的函数名称,此注释包含行号以及定义此函数所在的文件的路径名(如果有)。
       
  5578 .sp
       
  5579 \fB-i\fR 属性无法与 \fB-f\fR 一起指定。
       
  5580 .RE
       
  5581 
       
  5582 .sp
       
  5583 .ne 2
       
  5584 .mk
       
  5585 .na
       
  5586 \fB\fB-F\fR\fR
       
  5587 .ad
       
  5588 .RS 6n
       
  5589 .rt  
       
  5590 将 \fIvname\fR 声明为双精度浮点数。如果 \fIn\fR 为\fB非零\fR,则定义扩展 \fIvname\fR 时使用的小数点后面的小数位数。否则使用小数点后面的 10 个小数位数。
       
  5591 .RE
       
  5592 
       
  5593 .sp
       
  5594 .ne 2
       
  5595 .mk
       
  5596 .na
       
  5597 \fB\fB-H\fR\fR
       
  5598 .ad
       
  5599 .RS 6n
       
  5600 .rt  
       
  5601 此选项提供非 UNIX 计算机上的 UNIX 到主机名文件的映射。
       
  5602 .RE
       
  5603 
       
  5604 .sp
       
  5605 .ne 2
       
  5606 .mk
       
  5607 .na
       
  5608 \fB\fB-i\fR\fR
       
  5609 .ad
       
  5610 .RS 6n
       
  5611 .rt  
       
  5612 将要在内部表示的 \fIvname\fR 声明为整数。当指定为整数时,赋值右侧将作为算术表达式计算。如果 \fIn\fR 为\fB非零\fR,则会定义输出算术基数,否则输出基数为 10。
       
  5613 .sp
       
  5614 \fB-i\fR 属性不能与 \fB-R\fR、\fB-L\fR、\fB-Z\fR 或 \fB-f\fR 一起指定。
       
  5615 .RE
       
  5616 
       
  5617 .sp
       
  5618 .ne 2
       
  5619 .mk
       
  5620 .na
       
  5621 \fB\fB-l\fR\fR
       
  5622 .ad
       
  5623 .RS 6n
       
  5624 .rt  
       
  5625 所有大写字符都将转换为小写字符。禁用大写字母选项 \fB-u\fR。
       
  5626 .RE
       
  5627 
       
  5628 .sp
       
  5629 .ne 2
       
  5630 .mk
       
  5631 .na
       
  5632 \fB\fB-L\fR\fR
       
  5633 .ad
       
  5634 .RS 6n
       
  5635 .rt  
       
  5636 向左调整 \fIvalue\fR,并删除其中的前导空格。如果 \fIn\fR 为\fB非零\fR,则定义字段宽度,否则根据第一个赋值的值的宽度确定字段宽度。如果为此变量赋值,则会根据需要使用空格填充此值的右侧或者截断此值,使其适合此字段。禁用 \fB-R\fR 选项。
       
  5637 .sp
       
  5638 \fB-i\fR 属性无法与 \fB-L\fR 一起指定。
       
  5639 .RE
       
  5640 
       
  5641 .sp
       
  5642 .ne 2
       
  5643 .mk
       
  5644 .na
       
  5645 \fB\fB-n\fR\fR
       
  5646 .ad
       
  5647 .RS 6n
       
  5648 .rt  
       
  5649 将 \fIvname\fR 声明为对某个变量的引用,此变量的名称根据变量 \fIvname\fR 的值定义。这通常用于引用函数中其名称作为参数传递的变量。
       
  5650 .RE
       
  5651 
       
  5652 .sp
       
  5653 .ne 2
       
  5654 .mk
       
  5655 .na
       
  5656 \fB\fB-R\fR\fR
       
  5657 .ad
       
  5658 .RS 6n
       
  5659 .rt  
       
  5660 向右调整,并使用前导空格填充。如果 \fIn\fR 为\fB非零\fR,则定义字段宽度,否则根据第一个赋值的值的宽度确定字段宽度。如果重新为此变量赋值,则会使用空格填充此字段的左侧,或者截断此字段的末尾。禁用 \fB-L\fR 选项。
       
  5661 .sp
       
  5662 \fB-i\fR 属性无法与 \fB-R\fR 一起指定。
       
  5663 .RE
       
  5664 
       
  5665 .sp
       
  5666 .ne 2
       
  5667 .mk
       
  5668 .na
       
  5669 \fB\fB-r\fR\fR
       
  5670 .ad
       
  5671 .RS 6n
       
  5672 .rt  
       
  5673 指定 \fIvname\fR 标记为只读,后续赋值不能更改这些名称。
       
  5674 .RE
       
  5675 
       
  5676 .sp
       
  5677 .ne 2
       
  5678 .mk
       
  5679 .na
       
  5680 \fB\fB-t\fR\fR
       
  5681 .ad
       
  5682 .RS 6n
       
  5683 .rt  
       
  5684 标记变量。用户可以定义标记,对 shell 而言,这些标记没有任何特殊意义。
       
  5685 .RE
       
  5686 
       
  5687 .sp
       
  5688 .ne 2
       
  5689 .mk
       
  5690 .na
       
  5691 \fB\fB-u\fR\fR
       
  5692 .ad
       
  5693 .RS 6n
       
  5694 .rt  
       
  5695 所有小写字符都将转换为大写字符。禁用小写字母选项 \fB-l\fR。
       
  5696 .RE
       
  5697 
       
  5698 .sp
       
  5699 .ne 2
       
  5700 .mk
       
  5701 .na
       
  5702 \fB\fB-x\fR\fR
       
  5703 .ad
       
  5704 .RS 6n
       
  5705 .rt  
       
  5706 标记指定 \fIvname\fR,以便自动导出到随后执行的命令的环境。无法导出其名称包含 . 的变量。
       
  5707 .RE
       
  5708 
       
  5709 .sp
       
  5710 .ne 2
       
  5711 .mk
       
  5712 .na
       
  5713 \fB\fB-Z\fR\fR
       
  5714 .ad
       
  5715 .RS 6n
       
  5716 .rt  
       
  5717 如果第一个非空字符为数字,并且未设置 \fB-L\fR 选项,则会向右调整,并使用前导零进行填充。如果同时设置了 \fB-L\fR 选项,则删除前导零。如果 \fIn\fR 为\fB非零\fR,则定义字段宽度,否则根据第一个赋值的值的宽度确定字段宽度。
       
  5718 .sp
       
  5719 \fB-i\fR 属性无法与 \fB-Z\fR 一起指定。
       
  5720 .RE
       
  5721 
       
  5722 .RE
       
  5723 
       
  5724 .sp
       
  5725 .ne 2
       
  5726 .mk
       
  5727 .na
       
  5728 \fB\fBulimit [\fR\fB-HSacdfmnpstv\fR\fB] [\fR \fIlimit\fR\fB]\fR\fR
       
  5729 .ad
       
  5730 .sp .6
       
  5731 .RS 4n
       
  5732 设置或显示资源限制。许多系统都不支持一个或多个这些限制。如果指定了 \fIlimit\fR,则会设置指定资源的限制。\fIlimit\fR 的值可以是一个数字(采用随各资源指定的单位为单位),也可以为值 unlimited。如果指定了多种资源,则会在值之前输出限制名称及单位。
       
  5733 .sp
       
  5734 如果未指定任何选项,则采用 \fB-f\fR。
       
  5735 .sp
       
  5736 下面列出了一些可用的资源限制:
       
  5737 .sp
       
  5738 .ne 2
       
  5739 .mk
       
  5740 .na
       
  5741 \fB\fB-a\fR\fR
       
  5742 .ad
       
  5743 .RS 6n
       
  5744 .rt  
       
  5745 列出当前的所有资源限制。
       
  5746 .RE
       
  5747 
       
  5748 .sp
       
  5749 .ne 2
       
  5750 .mk
       
  5751 .na
       
  5752 \fB\fB-c\fR\fR
       
  5753 .ad
       
  5754 .RS 6n
       
  5755 .rt  
       
  5756 核心转储大小中的 512 字节块的数目。
       
  5757 .RE
       
  5758 
       
  5759 .sp
       
  5760 .ne 2
       
  5761 .mk
       
  5762 .na
       
  5763 \fB\fB-d\fR\fR
       
  5764 .ad
       
  5765 .RS 6n
       
  5766 .rt  
       
  5767 数据区域大小中的千字节数目。
       
  5768 .RE
       
  5769 
       
  5770 .sp
       
  5771 .ne 2
       
  5772 .mk
       
  5773 .na
       
  5774 \fB\fB-f\fR\fR
       
  5775 .ad
       
  5776 .RS 6n
       
  5777 .rt  
       
  5778 当前进程或子进程可写入的文件中的 512 字节块的数目(可以读取任意大小的文件)。
       
  5779 .RE
       
  5780 
       
  5781 .sp
       
  5782 .ne 2
       
  5783 .mk
       
  5784 .na
       
  5785 \fB\fB-H\fR\fR
       
  5786 .ad
       
  5787 .RS 6n
       
  5788 .rt  
       
  5789 指定指定资源的硬限制。
       
  5790 .sp
       
  5791 硬限制一旦设置便不能增加。
       
  5792 .sp
       
  5793 如果未指定 \fB-H\fR 和 \fB-S\fR 选项,此限制同时适用于两个选项。如果省略了 \fIlimit\fR,则会输出当前资源限制。此种情况下,除非指定 \fB-H\fR,否则将输出软限制。
       
  5794 .RE
       
  5795 
       
  5796 .sp
       
  5797 .ne 2
       
  5798 .mk
       
  5799 .na
       
  5800 \fB\fB-m\fR\fR
       
  5801 .ad
       
  5802 .RS 6n
       
  5803 .rt  
       
  5804 物理内存大小中的千字节数目。
       
  5805 .RE
       
  5806 
       
  5807 .sp
       
  5808 .ne 2
       
  5809 .mk
       
  5810 .na
       
  5811 \fB\fB-n\fR\fR
       
  5812 .ad
       
  5813 .RS 6n
       
  5814 .rt  
       
  5815 文件描述符数目加 1。
       
  5816 .RE
       
  5817 
       
  5818 .sp
       
  5819 .ne 2
       
  5820 .mk
       
  5821 .na
       
  5822 \fB\fB-p\fR\fR
       
  5823 .ad
       
  5824 .RS 6n
       
  5825 .rt  
       
  5826 用于管道缓冲的 512 字节块的数目。
       
  5827 .RE
       
  5828 
       
  5829 .sp
       
  5830 .ne 2
       
  5831 .mk
       
  5832 .na
       
  5833 \fB\fB-s\fR\fR
       
  5834 .ad
       
  5835 .RS 6n
       
  5836 .rt  
       
  5837 堆栈区域大小中的千字节数目。
       
  5838 .RE
       
  5839 
       
  5840 .sp
       
  5841 .ne 2
       
  5842 .mk
       
  5843 .na
       
  5844 \fB\fB-S\fR\fR
       
  5845 .ad
       
  5846 .RS 6n
       
  5847 .rt  
       
  5848 指定指定资源的软限制。
       
  5849 .sp
       
  5850 软限制最多可增加至硬限制的值。 
       
  5851 .sp
       
  5852 如果未指定 \fB-H\fR 和 \fB-S\fR 选项,此限制同时适用于两个选项。如果省略了 \fIlimit\fR,则会输出当前资源限制。此种情况下,除非指定 \fB-H\fR,否则将输出软限制。
       
  5853 .RE
       
  5854 
       
  5855 .sp
       
  5856 .ne 2
       
  5857 .mk
       
  5858 .na
       
  5859 \fB\fB-t\fR\fR
       
  5860 .ad
       
  5861 .RS 6n
       
  5862 .rt  
       
  5863 各进程使用的 CPU 秒数。
       
  5864 .RE
       
  5865 
       
  5866 .sp
       
  5867 .ne 2
       
  5868 .mk
       
  5869 .na
       
  5870 \fB\fB-v\fR\fR
       
  5871 .ad
       
  5872 .RS 6n
       
  5873 .rt  
       
  5874 用于虚拟内存的千字节数目。
       
  5875 .RE
       
  5876 
       
  5877 .RE
       
  5878 
       
  5879 .sp
       
  5880 .ne 2
       
  5881 .mk
       
  5882 .na
       
  5883 \fB\fBumask\fR \fB[\fR\fB-S\fR\fB]\fR\fB[\fR\fImask\fR\fB]\fR\fR
       
  5884 .ad
       
  5885 .sp .6
       
  5886 .RS 4n
       
  5887 用户文件创建掩码设置为 \fImask\fR。\fImask\fR 可以是八进制数字或符号值,如 \fBchmod\fR(1) 所述。 
       
  5888 .sp
       
  5889 如果指定了符号值,新 \fBumask\fR 值即为对以前的 \fBumask\fR 值的补数应用 \fImask\fR 的结果的补数。如果省略了 \fImask\fR,则会输出掩码的当前值。\fB-S\fR 选项导致将模式输出为符号值。否则输出八进制掩码。 
       
  5890 .sp
       
  5891 请参见 \fBumask\fR(2)
       
  5892 .RE
       
  5893 
       
  5894 .sp
       
  5895 .ne 2
       
  5896 .mk
       
  5897 .na
       
  5898 \fB\fB+unalias\fR \fB[\fR\fB-a\fR\fB]\fR \fIname\fR\fR
       
  5899 .ad
       
  5900 .sp .6
       
  5901 .RS 4n
       
  5902 从别名列表中删除 \fIname\fR 列表指定的别名。\fB-a\fR 选项导致取消设置所有别名。
       
  5903 .RE
       
  5904 
       
  5905 .sp
       
  5906 .ne 2
       
  5907 .mk
       
  5908 .na
       
  5909 \fB\fB+unset\fR \fB[\fR\fB-fnv\fR\fB]\fR \fIvname\fR\fR
       
  5910 .ad
       
  5911 .sp .6
       
  5912 .RS 4n
       
  5913 未分配 \fIvname\fR 列表指定的变量,即,已清除这些变量的值和属性。无法取消设置只读变量。如果设置了 \fB-f\fR 选项,名称则引用函数名称。如果设置了 \fB-v\fR 选项,名称则引用变量名称。\fB-f\fR 选项可覆盖 \fB-v\fR。如果设置了 \fB-n\fR,并且 \fIname\fR 为名称引用,则会取消设置 \fIname\fR(而非其引用的变量)。缺省值等效于 \fB-v\fR。取消设置 \fBLINENO\fR、\fBMAILCHECK\fR、\fBOPTARG\fR、\fBOPTIND\fR、\fBRANDOM\fR、\fBSECONDS\fR、\fBTMOUT\fR 和 \fB_\fR 将删除其特殊含义,即使在随后对这些变量赋值也是如此。
       
  5914 .RE
       
  5915 
       
  5916 .sp
       
  5917 .ne 2
       
  5918 .mk
       
  5919 .na
       
  5920 \fB\fBwait\fR \fB[\fR\fIjob\fR\fB]\fR\fR
       
  5921 .ad
       
  5922 .sp .6
       
  5923 .RS 4n
       
  5924 等待指定作业,并报告其终止状态。如果未指定 \fIjob\fR,则等待当前处于活动状态的所有子进程。如果指定了 \fIjob\fR,此命令的退出状态即为等待的最后一个进程的退出状态;否则为零。请参见 \fBJobs\fR 了解 \fIjob\fR 格式的说明。
       
  5925 .RE
       
  5926 
       
  5927 .sp
       
  5928 .ne 2
       
  5929 .mk
       
  5930 .na
       
  5931 \fB\fBwhence\fR \fB[\fR\fB-afpv\fR\fB]\fR \fIname ...\fR\fR
       
  5932 .ad
       
  5933 .sp .6
       
  5934 .RS 4n
       
  5935 对于每个 \fIname\fR,此命令指示将其用作命令名称时的解释方式。\fB-v\fR 选项生成更详细的报告。\fB-f\fR 选项跳过函数搜索。即使名称为别名、函数或保留字,\fB-p\fR 选项也会针对 \fIname\fR 进行路径搜索。\fB-a\fR 选项与 -v 选项相似,但前者导致报告指定名称的所有解释。
       
  5936 .RE
       
  5937 
       
  5938 .SS "调用"
       
  5939 .sp
       
  5940 .LP
       
  5941 如果使用 \fBexec\fR(2) 调用 shell,并且参数的第一个字符 0 (\fB$0\fR) 为 \fB-\fR,则假定此 shell 为登录 shell,并从 \fB/etc/profile\fR 读取命令,然后从当前目录的 .\fBprofile\fR 或 \fB$HOME/.profile\fR 中读取命令(如果存在任何一个文件)。接着,对于交互式 shell,首先从 \fB/etc/ksh.kshrc\fR 读取命令,然后从通过对环境变量 \fBENV\fR 的值执行参数扩展、命令替换和算术替换进行命名的文件中读取命令(如果存在此文件)。如果 \fB-s\fR 选项不存在,并且存在 \fIarg\fR 以及名为 \fIarg\fR 的文件,则会读取和执行此脚本。否则,如果第一个 \fIarg\fR 不包含 \fB/\fR,则会对第一个 \fIarg\fR 执行路径搜索,以便确定要执行的脚本的名称。脚本 \fIarg\fR 必须具有执行权限,并且忽略任何 \fBsetuid\fR 和 \fBsetgid\fR 设置。如果未在此路径中找到脚本,则会处理 \fIarg\fR,就像指定了内置命令或函数一样。 
       
  5942 .sp
       
  5943 .LP
       
  5944 然后按照说明读取命令,并且 shell 会在调用时解释下列选项:
       
  5945 .sp
       
  5946 .ne 2
       
  5947 .mk
       
  5948 .na
       
  5949 \fB\fB-c\fR\fR
       
  5950 .ad
       
  5951 .RS 15n
       
  5952 .rt  
       
  5953 如果存在 \fB-c\fR 选项,则从第一个 \fIarg\fR 读取命令。其余所有参数都将成为从 \fB0\fR 开始的位置参数。
       
  5954 .RE
       
  5955 
       
  5956 .sp
       
  5957 .ne 2
       
  5958 .mk
       
  5959 .na
       
  5960 \fB\fB-D\fR\fR
       
  5961 .ad
       
  5962 .RS 15n
       
  5963 .rt  
       
  5964 标准输出中将输出前面带有 \fB$\fR 且包含在双引号中的所有字符串的列表,并且 shell 退出。当语言环境不是 C 或 POSIX 时,此组字符串则会转换为相应语言。不会执行任何命令。
       
  5965 .RE
       
  5966 
       
  5967 .sp
       
  5968 .ne 2
       
  5969 .mk
       
  5970 .na
       
  5971 \fB\fB-i\fR\fR
       
  5972 .ad
       
  5973 .RS 15n
       
  5974 .rt  
       
  5975 如果存在 \fB-i\fR 选项,或者如果将 shell 输入和输出附加到终端(根据 \fBtcgetattr\fR(3C) 的指示),此 shell 则为交互式 shell。此种情况下,将忽略 \fBTERM\fR(因此,\fBkill 0\fR 不会中止交互式 shell),并捕获和忽略 \fBINTR\fR(因此,可以中断等待)。在所有情况下,shell 将忽略 \fBQUIT\fR。
       
  5976 .RE
       
  5977 
       
  5978 .sp
       
  5979 .ne 2
       
  5980 .mk
       
  5981 .na
       
  5982 \fB\fB-R\fR \fIfilename\fR\fR
       
  5983 .ad
       
  5984 .RS 15n
       
  5985 .rt  
       
  5986 \fB-R\fR \fIfilename\fR 选项用于生成交叉引用数据库,此数据库可供单独的实用程序用于查找变量和命令的定义及引用。
       
  5987 .RE
       
  5988 
       
  5989 .sp
       
  5990 .ne 2
       
  5991 .mk
       
  5992 .na
       
  5993 \fB\fB-r\fR\fR
       
  5994 .ad
       
  5995 .RS 15n
       
  5996 .rt  
       
  5997 如果存在 \fB-r\fR 选项,shell 则为受限 shell。
       
  5998 .RE
       
  5999 
       
  6000 .sp
       
  6001 .ne 2
       
  6002 .mk
       
  6003 .na
       
  6004 \fB\fB-s\fR\fR
       
  6005 .ad
       
  6006 .RS 15n
       
  6007 .rt  
       
  6008 如果存在 \fB-s\fR 选项,或者如果未保留任何参数,则从标准输入读取命令。Shell 输出(列出的\fB特殊命令\fR的输出除外)写入到文件描述符 2。
       
  6009 .RE
       
  6010 
       
  6011 .sp
       
  6012 .LP
       
  6013 其余选项和参数在 \fBset\fR 命令下说明。忽略作为第一个参数的可选 \fB-\fR。
       
  6014 .SS "仅适用于 \fBrksh\fR"
       
  6015 .sp
       
  6016 .LP
       
  6017 \fBrksh\fR 用于设置登录名和执行环境,其功能比标准 shell 的功能更受约束。
       
  6018 .sp
       
  6019 .LP
       
  6020 \fBrksh\fR 的操作与 \fBksh\fR 的操作相同,但前者不允许以下操作:
       
  6021 .RS +4
       
  6022 .TP
       
  6023 .ie t \(bu
       
  6024 .el o
       
  6025 取消设置受限选项
       
  6026 .RE
       
  6027 .RS +4
       
  6028 .TP
       
  6029 .ie t \(bu
       
  6030 .el o
       
  6031 更改目录。请参见 \fBcd\fR(1)。
       
  6032 .RE
       
  6033 .RS +4
       
  6034 .TP
       
  6035 .ie t \(bu
       
  6036 .el o
       
  6037 设置或取消设置 \fBSHELL\fR、\fBENV\fR、\fBFPATH\fR 或 \fBPATH\fR 的值或属性
       
  6038 .RE
       
  6039 .RS +4
       
  6040 .TP
       
  6041 .ie t \(bu
       
  6042 .el o
       
  6043 指定包含 \fB/\fR 的路径或命令名称。
       
  6044 .RE
       
  6045 .RS +4
       
  6046 .TP
       
  6047 .ie t \(bu
       
  6048 .el o
       
  6049 重定向输出(\fB>\fR、\fB>\fR\fB|\fR、\fB<>\fR 和 \fB>>\fR)。
       
  6050 .RE
       
  6051 .RS +4
       
  6052 .TP
       
  6053 .ie t \(bu
       
  6054 .el o
       
  6055 添加或删除内置命令。
       
  6056 .RE
       
  6057 .RS +4
       
  6058 .TP
       
  6059 .ie t \(bu
       
  6060 .el o
       
  6061 使用 \fBcommand\fR \fB-p\fR 调用命令。
       
  6062 .RE
       
  6063 .sp
       
  6064 .LP
       
  6065 在解释 .\fBprofile\fR 和 \fBENV\fR 文件后强制这些限制。
       
  6066 .sp
       
  6067 .LP
       
  6068 如果发现要执行的命令为 shell 过程,\fBrksh\fR 则会调用 \fBksh\fR 来执行此命令。因此,可以向最终用户提供有权访问标准 shell 的完整功能的 shell 过程,并强制有限的命令菜单。此方案假定最终用户没有同一目录的写入和执行权限。这些规则的实际结果是,通过执行保证的设置操作,并将用户保留在适当的目录(可能不是登录目录)中,.\fBprofile\fR 的写入者具有用户操作的完整控制权。系统管理员通常设置可由 \fBrksh\fR 安全调用的命令目录(例如,\fB/usr/rbin\fR)。 
       
  6069 .SH 用法
       
  6070 .sp
       
  6071 .LP
       
  6072 有关在遇到大小大于或等于 2 GB(2^31 字节)的文件时 \fBksh\fR 和 \fBrksh\fR 的行为的说明,请参见 \fBlargefile\fR(5)。
       
  6073 .SH 退出状态
       
  6074 .sp
       
  6075 .LP
       
  6076 将返回以下退出值:
       
  6077 .sp
       
  6078 .ne 2
       
  6079 .mk
       
  6080 .na
       
  6081 \fB\fB非零\fR\fR
       
  6082 .ad
       
  6083 .sp .6
       
  6084 .RS 4n
       
  6085 当 shell 检测到错误(如语法错误)时,返回\fB非零\fR。
       
  6086 .sp
       
  6087 如果以非交互方式使用 shell,除非子 shell 中出现错误(此种情况下将放弃子 shell),否则会放弃执行此 shell 文件。
       
  6088 .RE
       
  6089 
       
  6090 .sp
       
  6091 .ne 2
       
  6092 .mk
       
  6093 .na
       
  6094 \fB\fI执行的最后一个命令的退出状态\fR\fR
       
  6095 .ad
       
  6096 .sp .6
       
  6097 .RS 4n
       
  6098 返回执行的最后一个命令的退出状态。
       
  6099 .sp
       
  6100 通过输出命令或函数名称以及错误状态,报告 shell 检测到的运行时错误。如果出现错误的行号大于 1,则还会在命令或函数名称后面的方括号 (\fB[]\fR) 中输出此行号。
       
  6101 .sp
       
  6102 有关其他详细信息,请参见 \fBksh exit\fR 命令。
       
  6103 .RE
       
  6104 
       
  6105 .SH 文件
       
  6106 .sp
       
  6107 .ne 2
       
  6108 .mk
       
  6109 .na
       
  6110 \fB\fB/etc/profile\fR\fR
       
  6111 .ad
       
  6112 .sp .6
       
  6113 .RS 4n
       
  6114 系统初始化文件,针对 login shell 执行。
       
  6115 .RE
       
  6116 
       
  6117 .sp
       
  6118 .ne 2
       
  6119 .mk
       
  6120 .na
       
  6121 \fB\fB/etc/ksh.kshrc\fR\fR
       
  6122 .ad
       
  6123 .sp .6
       
  6124 .RS 4n
       
  6125 系统级启动文件,针对交互式 shell 执行。
       
  6126 .RE
       
  6127 
       
  6128 .sp
       
  6129 .ne 2
       
  6130 .mk
       
  6131 .na
       
  6132 \fB\fB$HOME/.profile\fR\fR
       
  6133 .ad
       
  6134 .sp .6
       
  6135 .RS 4n
       
  6136 专用初始化文件,在 \fB/etc/profile\fR 后针对登录 shell 执行。
       
  6137 .RE
       
  6138 
       
  6139 .sp
       
  6140 .ne 2
       
  6141 .mk
       
  6142 .na
       
  6143 \fB\fB$HOME/.kshrc\fR\fR
       
  6144 .ad
       
  6145 .sp .6
       
  6146 .RS 4n
       
  6147 缺省专用初始化文件,当未设置 \fBENV\fR 时,在 \fB/etc/ksh.kshrc\fR 后针对交互式 shell 执行。
       
  6148 .RE
       
  6149 
       
  6150 .sp
       
  6151 .ne 2
       
  6152 .mk
       
  6153 .na
       
  6154 \fB\fB/etc/suid-profile\fR\fR
       
  6155 .ad
       
  6156 .sp .6
       
  6157 .RS 4n
       
  6158 备用初始化文件,在实际和有效用户或组 ID 不匹配时代替专用初始化文件执行。
       
  6159 .RE
       
  6160 
       
  6161 .sp
       
  6162 .ne 2
       
  6163 .mk
       
  6164 .na
       
  6165 \fB\fB/dev/null\fR\fR
       
  6166 .ad
       
  6167 .sp .6
       
  6168 .RS 4n
       
  6169 空设备。
       
  6170 .RE
       
  6171 
       
  6172 .SH 作者
       
  6173 .sp
       
  6174 .LP
       
  6175 David Korn,\[email protected]\fR
       
  6176 .SH 属性
       
  6177 .sp
       
  6178 .LP
       
  6179 有关下列属性的描述,请参见 \fBattributes\fR(5):
       
  6180 .sp
       
  6181 
       
  6182 .sp
       
  6183 .TS
       
  6184 tab() box;
       
  6185 cw(2.75i) |cw(2.75i) 
       
  6186 lw(2.75i) |lw(2.75i) 
       
  6187 .
       
  6188 属性类型属性值
       
  6189 _
       
  6190 可用性system/core-os
       
  6191 _
       
  6192 接口稳定性参见下文。
       
  6193 .TE
       
  6194 
       
  6195 .sp
       
  6196 .LP
       
  6197 脚本接口是 "Uncommitted"(未确定)。环境变量、\fB\&.paths\fR 功能以及编辑模式是 Volatile(可变)接口。
       
  6198 .SH 另请参见
       
  6199 .sp
       
  6200 .LP
       
  6201 \fBcat\fR(1)、\fBcd\fR(1)、\fBchmod\fR(1)、\fBcut\fR(1)、\fBdate\fR(1)、\fBegrep\fR(1)、\fBecho\fR(1)、\fBegrep\fR(1)、\fBenv\fR(1)、\fBfgrep\fR(1)、\fBgrep\fR(1)、\fBlogin\fR(1)、\fBnewgrp\fR(1)、\fBpaste\fR(1)、\fBprintf\fR(1)、\fBshell_builtins\fR(1)、\fBstty\fR(1)、\fBtest\fR(1)、\fBumask\fR(1)、\fBvi\fR(1)、\fBdup\fR(2)、\fBexec\fR(2)、\fBfork\fR(2)、\fBioctl\fR(2)、\fBlseek\fR(2)、\fBpathconf\fR(2)、\fBpipe\fR(2)、\fBsysconf\fR(3C)、\fBulimit\fR(2)、\fBumask\fR(2)、\fBrand\fR(3C)、\fBtcgetattr\fR(3C)、\fBwait\fR(3C)、\fBa.out\fR(4)、\fBprofile\fR(4)、\fBattributes\fR(5)、\fBenviron\fR(5)、\fBlargefile\fR(5)、\fBstandards\fR(5)
       
  6202 .sp
       
  6203 .LP
       
  6204 由 Bolsky, Morris I. 和 Korn, David G. 合住的\fIThe New K rnS ell Comma d and P ogr mming Langu ge\fR,Prentice Hall 出版,1995。
       
  6205 .sp
       
  6206 .LP
       
  6207 \fIPOSIX-Part 2: Shell and Utilities, IEEE Std 1003.2-1992, ISO/IEC 9945-2\fR, IEEE, 1993.
       
  6208 .SH 附注
       
  6209 .sp
       
  6210 .LP
       
  6211 \fBksh\fR 脚本应选择 ISO C99、C++ 和 JAVA 语言的保留字所使用的名称空间之外的 shell 函数名称,以免与 \fBksh\fR 的将来改进冲突。
       
  6212 .sp
       
  6213 .LP
       
  6214 如果执行命令,并在搜索路径中原始命令所在目录之前的目录中安装同名命令,shell 会继续\fB执行\fR原始命令。使用 alias 命令的 \fB-t\fR 选项可以更正此情况。
       
  6215 .sp
       
  6216 .LP
       
  6217 某些很早的 shell 脚本包含插入记号 (\fB^\fR),并将其用作管道字符 (\fB|\fR) 的同义词。
       
  6218 .sp
       
  6219 .LP
       
  6220 在复合命令中使用 \fBhist\fR 内置命令会导致 whole 命令从历史文件中消失。
       
  6221 .sp
       
  6222 .LP
       
  6223 内置命令 \fB\&.\fR \fIfile\fR 在执行任何命令之前读取整个文件。文件中的 \fBalias\fR 和 \fBunalias\fR 命令不适用于该文件中定义的所有命令。
       
  6224 .sp
       
  6225 .LP
       
  6226 当作业正在等待前台进程时,不会处理陷阱。因此,在前台作业终止之前,不会执行 \fBCHLD\fR 中的陷阱。
       
  6227 .sp
       
  6228 .LP
       
  6229 最好在算术表达式中的逗号运算符后保留一个空格,以免在特定语言环境中将逗号解释为小数点字符。 
       
  6230 .sp
       
  6231 .LP
       
  6232 创建 \fB\&.paths\fR 文件可能存在一些限制,该文件可移植到其他操作系统中。
       
  6233 .sp
       
  6234 .LP
       
  6235 如果系统支持 64 位指令集,\fB/bin/ksh\fR 将执行 \fBksh\fR 的 64 位版本。