]>
Commit | Line | Data |
---|---|---|
1 | \input texinfo.tex @c -*- texinfo -*- | |
2 | @c %**start of header | |
3 | @setfilename bashref.info | |
4 | @settitle Bash Reference Manual | |
5 | ||
6 | @include version.texi | |
7 | @c %**end of header | |
8 | ||
9 | @copying | |
10 | This text is a brief description of the features that are present in | |
11 | the Bash shell (version @value{VERSION}, @value{UPDATED}). | |
12 | ||
13 | This is Edition @value{EDITION}, last updated @value{UPDATED}, | |
14 | of @cite{The GNU Bash Reference Manual}, | |
15 | for @code{Bash}, Version @value{VERSION}. | |
16 | ||
17 | Copyright @copyright{} 1988--2022 Free Software Foundation, Inc. | |
18 | ||
19 | @quotation | |
20 | Permission is granted to copy, distribute and/or modify this document | |
21 | under the terms of the GNU Free Documentation License, Version 1.3 or | |
22 | any later version published by the Free Software Foundation; with no | |
23 | Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. | |
24 | A copy of the license is included in the section entitled | |
25 | ``GNU Free Documentation License''. | |
26 | @end quotation | |
27 | @end copying | |
28 | ||
29 | @defcodeindex bt | |
30 | @defcodeindex rw | |
31 | @set BashFeatures | |
32 | ||
33 | @dircategory Basics | |
34 | @direntry | |
35 | * Bash: (bash). The GNU Bourne-Again SHell. | |
36 | @end direntry | |
37 | ||
38 | @finalout | |
39 | ||
40 | @titlepage | |
41 | @title Bash Reference Manual | |
42 | @subtitle Reference Documentation for Bash | |
43 | @subtitle Edition @value{EDITION}, for @code{Bash} Version @value{VERSION}. | |
44 | @subtitle @value{UPDATED-MONTH} | |
45 | @author Chet Ramey, Case Western Reserve University | |
46 | @author Brian Fox, Free Software Foundation | |
47 | ||
48 | @page | |
49 | @vskip 0pt plus 1filll | |
50 | @insertcopying | |
51 | ||
52 | @end titlepage | |
53 | ||
54 | @contents | |
55 | ||
56 | @ifnottex | |
57 | @node Top, Introduction, (dir), (dir) | |
58 | @top Bash Features | |
59 | ||
60 | This text is a brief description of the features that are present in | |
61 | the Bash shell (version @value{VERSION}, @value{UPDATED}). | |
62 | The Bash home page is @url{http://www.gnu.org/software/bash/}. | |
63 | ||
64 | This is Edition @value{EDITION}, last updated @value{UPDATED}, | |
65 | of @cite{The GNU Bash Reference Manual}, | |
66 | for @code{Bash}, Version @value{VERSION}. | |
67 | ||
68 | Bash contains features that appear in other popular shells, and some | |
69 | features that only appear in Bash. Some of the shells that Bash has | |
70 | borrowed concepts from are the Bourne Shell (@file{sh}), the Korn Shell | |
71 | (@file{ksh}), and the C-shell (@file{csh} and its successor, | |
72 | @file{tcsh}). The following menu breaks the features up into | |
73 | categories, noting which features were inspired by other shells and | |
74 | which are specific to Bash. | |
75 | ||
76 | This manual is meant as a brief introduction to features found in | |
77 | Bash. The Bash manual page should be used as the definitive | |
78 | reference on shell behavior. | |
79 | ||
80 | @menu | |
81 | * Introduction:: An introduction to the shell. | |
82 | * Definitions:: Some definitions used in the rest of this | |
83 | manual. | |
84 | * Basic Shell Features:: The shell "building blocks". | |
85 | * Shell Builtin Commands:: Commands that are a part of the shell. | |
86 | * Shell Variables:: Variables used or set by Bash. | |
87 | * Bash Features:: Features found only in Bash. | |
88 | * Job Control:: What job control is and how Bash allows you | |
89 | to use it. | |
90 | * Command Line Editing:: Chapter describing the command line | |
91 | editing features. | |
92 | * Using History Interactively:: Command History Expansion | |
93 | * Installing Bash:: How to build and install Bash on your system. | |
94 | * Reporting Bugs:: How to report bugs in Bash. | |
95 | * Major Differences From The Bourne Shell:: A terse list of the differences | |
96 | between Bash and historical | |
97 | versions of /bin/sh. | |
98 | * GNU Free Documentation License:: Copying and sharing this documentation. | |
99 | * Indexes:: Various indexes for this manual. | |
100 | @end menu | |
101 | @end ifnottex | |
102 | ||
103 | @node Introduction | |
104 | @chapter Introduction | |
105 | @menu | |
106 | * What is Bash?:: A short description of Bash. | |
107 | * What is a shell?:: A brief introduction to shells. | |
108 | @end menu | |
109 | ||
110 | @node What is Bash? | |
111 | @section What is Bash? | |
112 | ||
113 | Bash is the shell, or command language interpreter, | |
114 | for the @sc{gnu} operating system. | |
115 | The name is an acronym for the @samp{Bourne-Again SHell}, | |
116 | a pun on Stephen Bourne, the author of the direct ancestor of | |
117 | the current Unix shell @code{sh}, | |
118 | which appeared in the Seventh Edition Bell Labs Research version | |
119 | of Unix. | |
120 | ||
121 | Bash is largely compatible with @code{sh} and incorporates useful | |
122 | features from the Korn shell @code{ksh} and the C shell @code{csh}. | |
123 | It is intended to be a conformant implementation of the @sc{ieee} | |
124 | @sc{posix} Shell and Tools portion of the @sc{ieee} @sc{posix} | |
125 | specification (@sc{ieee} Standard 1003.1). | |
126 | It offers functional improvements over @code{sh} for both interactive and | |
127 | programming use. | |
128 | ||
129 | While the @sc{gnu} operating system provides other shells, including | |
130 | a version of @code{csh}, Bash is the default shell. | |
131 | Like other @sc{gnu} software, Bash is quite portable. It currently runs | |
132 | on nearly every version of Unix and a few other operating systems @minus{} | |
133 | independently-supported ports exist for @sc{ms-dos}, @sc{os/2}, | |
134 | and Windows platforms. | |
135 | ||
136 | @node What is a shell? | |
137 | @section What is a shell? | |
138 | ||
139 | At its base, a shell is simply a macro processor that executes | |
140 | commands. The term macro processor means functionality where text | |
141 | and symbols are expanded to create larger expressions. | |
142 | ||
143 | A Unix shell is both a command interpreter and a programming | |
144 | language. As a command interpreter, the shell provides the user | |
145 | interface to the rich set of @sc{gnu} utilities. The programming | |
146 | language features allow these utilities to be combined. | |
147 | Files containing commands can be created, and become | |
148 | commands themselves. These new commands have the same status as | |
149 | system commands in directories such as @file{/bin}, allowing users | |
150 | or groups to establish custom environments to automate their common | |
151 | tasks. | |
152 | ||
153 | Shells may be used interactively or non-interactively. In | |
154 | interactive mode, they accept input typed from the keyboard. | |
155 | When executing non-interactively, shells execute commands read | |
156 | from a file. | |
157 | ||
158 | A shell allows execution of @sc{gnu} commands, both synchronously and | |
159 | asynchronously. | |
160 | The shell waits for synchronous commands to complete before accepting | |
161 | more input; asynchronous commands continue to execute in parallel | |
162 | with the shell while it reads and executes additional commands. | |
163 | The @dfn{redirection} constructs permit | |
164 | fine-grained control of the input and output of those commands. | |
165 | Moreover, the shell allows control over the contents of commands' | |
166 | environments. | |
167 | ||
168 | Shells also provide a small set of built-in | |
169 | commands (@dfn{builtins}) implementing functionality impossible | |
170 | or inconvenient to obtain via separate utilities. | |
171 | For example, @code{cd}, @code{break}, @code{continue}, and | |
172 | @code{exec} cannot be implemented outside of the shell because | |
173 | they directly manipulate the shell itself. | |
174 | The @code{history}, @code{getopts}, @code{kill}, or @code{pwd} | |
175 | builtins, among others, could be implemented in separate utilities, | |
176 | but they are more convenient to use as builtin commands. | |
177 | All of the shell builtins are described in | |
178 | subsequent sections. | |
179 | ||
180 | While executing commands is essential, most of the power (and | |
181 | complexity) of shells is due to their embedded programming | |
182 | languages. Like any high-level language, the shell provides | |
183 | variables, flow control constructs, quoting, and functions. | |
184 | ||
185 | Shells offer features geared specifically for | |
186 | interactive use rather than to augment the programming language. | |
187 | These interactive features include job control, command line | |
188 | editing, command history and aliases. Each of these features is | |
189 | described in this manual. | |
190 | ||
191 | @node Definitions | |
192 | @chapter Definitions | |
193 | These definitions are used throughout the remainder of this manual. | |
194 | ||
195 | @table @code | |
196 | ||
197 | @item POSIX | |
198 | @cindex POSIX | |
199 | A family of open system standards based on Unix. Bash | |
200 | is primarily concerned with the Shell and Utilities portion of the | |
201 | @sc{posix} 1003.1 standard. | |
202 | ||
203 | @item blank | |
204 | A space or tab character. | |
205 | ||
206 | @item builtin | |
207 | @cindex builtin | |
208 | A command that is implemented internally by the shell itself, rather | |
209 | than by an executable program somewhere in the file system. | |
210 | ||
211 | @item control operator | |
212 | @cindex control operator | |
213 | A @code{token} that performs a control function. It is a @code{newline} | |
214 | or one of the following: | |
215 | @samp{||}, @samp{&&}, @samp{&}, @samp{;}, @samp{;;}, @samp{;&}, @samp{;;&}, | |
216 | @samp{|}, @samp{|&}, @samp{(}, or @samp{)}. | |
217 | ||
218 | @item exit status | |
219 | @cindex exit status | |
220 | The value returned by a command to its caller. The value is restricted | |
221 | to eight bits, so the maximum value is 255. | |
222 | ||
223 | @item field | |
224 | @cindex field | |
225 | A unit of text that is the result of one of the shell expansions. After | |
226 | expansion, when executing a command, the resulting fields are used as | |
227 | the command name and arguments. | |
228 | ||
229 | @item filename | |
230 | @cindex filename | |
231 | A string of characters used to identify a file. | |
232 | ||
233 | @item job | |
234 | @cindex job | |
235 | A set of processes comprising a pipeline, and any processes descended | |
236 | from it, that are all in the same process group. | |
237 | ||
238 | @item job control | |
239 | @cindex job control | |
240 | A mechanism by which users can selectively stop (suspend) and restart | |
241 | (resume) execution of processes. | |
242 | ||
243 | @item metacharacter | |
244 | @cindex metacharacter | |
245 | A character that, when unquoted, separates words. A metacharacter is | |
246 | a @code{space}, @code{tab}, @code{newline}, or one of the following characters: | |
247 | @samp{|}, @samp{&}, @samp{;}, @samp{(}, @samp{)}, @samp{<}, or | |
248 | @samp{>}. | |
249 | ||
250 | @item name | |
251 | @cindex name | |
252 | @cindex identifier | |
253 | A @code{word} consisting solely of letters, numbers, and underscores, | |
254 | and beginning with a letter or underscore. @code{Name}s are used as | |
255 | shell variable and function names. | |
256 | Also referred to as an @code{identifier}. | |
257 | ||
258 | @item operator | |
259 | @cindex operator, shell | |
260 | A @code{control operator} or a @code{redirection operator}. | |
261 | @xref{Redirections}, for a list of redirection operators. | |
262 | Operators contain at least one unquoted @code{metacharacter}. | |
263 | ||
264 | @item process group | |
265 | @cindex process group | |
266 | A collection of related processes each having the same process | |
267 | group @sc{id}. | |
268 | ||
269 | @item process group ID | |
270 | @cindex process group ID | |
271 | A unique identifier that represents a @code{process group} | |
272 | during its lifetime. | |
273 | ||
274 | @item reserved word | |
275 | @cindex reserved word | |
276 | A @code{word} that has a special meaning to the shell. Most reserved | |
277 | words introduce shell flow control constructs, such as @code{for} and | |
278 | @code{while}. | |
279 | ||
280 | @item return status | |
281 | @cindex return status | |
282 | A synonym for @code{exit status}. | |
283 | ||
284 | @item signal | |
285 | @cindex signal | |
286 | A mechanism by which a process may be notified by the kernel | |
287 | of an event occurring in the system. | |
288 | ||
289 | @item special builtin | |
290 | @cindex special builtin | |
291 | A shell builtin command that has been classified as special by the | |
292 | @sc{posix} standard. | |
293 | ||
294 | @item token | |
295 | @cindex token | |
296 | A sequence of characters considered a single unit by the shell. | |
297 | It is either a @code{word} or an @code{operator}. | |
298 | ||
299 | @item word | |
300 | @cindex word | |
301 | A sequence of characters treated as a unit by the shell. | |
302 | Words may not include unquoted @code{metacharacters}. | |
303 | @end table | |
304 | ||
305 | @node Basic Shell Features | |
306 | @chapter Basic Shell Features | |
307 | @cindex Bourne shell | |
308 | ||
309 | Bash is an acronym for @samp{Bourne-Again SHell}. | |
310 | The Bourne shell is | |
311 | the traditional Unix shell originally written by Stephen Bourne. | |
312 | All of the Bourne shell builtin commands are available in Bash, | |
313 | The rules for evaluation and quoting are taken from the @sc{posix} | |
314 | specification for the `standard' Unix shell. | |
315 | ||
316 | This chapter briefly summarizes the shell's `building blocks': | |
317 | commands, control structures, shell functions, shell @i{parameters}, | |
318 | shell expansions, | |
319 | @i{redirections}, which are a way to direct input and output from | |
320 | and to named files, and how the shell executes commands. | |
321 | ||
322 | @menu | |
323 | * Shell Syntax:: What your input means to the shell. | |
324 | * Shell Commands:: The types of commands you can use. | |
325 | * Shell Functions:: Grouping commands by name. | |
326 | * Shell Parameters:: How the shell stores values. | |
327 | * Shell Expansions:: How Bash expands parameters and the various | |
328 | expansions available. | |
329 | * Redirections:: A way to control where input and output go. | |
330 | * Executing Commands:: What happens when you run a command. | |
331 | * Shell Scripts:: Executing files of shell commands. | |
332 | @end menu | |
333 | ||
334 | @node Shell Syntax | |
335 | @section Shell Syntax | |
336 | @menu | |
337 | * Shell Operation:: The basic operation of the shell. | |
338 | * Quoting:: How to remove the special meaning from characters. | |
339 | * Comments:: How to specify comments. | |
340 | @end menu | |
341 | ||
342 | When the shell reads input, it proceeds through a | |
343 | sequence of operations. If the input indicates the beginning of a | |
344 | comment, the shell ignores the comment symbol (@samp{#}), and the rest | |
345 | of that line. | |
346 | ||
347 | Otherwise, roughly speaking, the shell reads its input and | |
348 | divides the input into words and operators, employing the quoting rules | |
349 | to select which meanings to assign various words and characters. | |
350 | ||
351 | The shell then parses these tokens into commands and other constructs, | |
352 | removes the special meaning of certain words or characters, expands | |
353 | others, redirects input and output as needed, executes the specified | |
354 | command, waits for the command's exit status, and makes that exit status | |
355 | available for further inspection or processing. | |
356 | ||
357 | @node Shell Operation | |
358 | @subsection Shell Operation | |
359 | ||
360 | The following is a brief description of the shell's operation when it | |
361 | reads and executes a command. Basically, the shell does the | |
362 | following: | |
363 | ||
364 | @enumerate | |
365 | @item | |
366 | Reads its input from a file (@pxref{Shell Scripts}), from a string | |
367 | supplied as an argument to the @option{-c} invocation option | |
368 | (@pxref{Invoking Bash}), or from the user's terminal. | |
369 | ||
370 | @item | |
371 | Breaks the input into words and operators, obeying the quoting rules | |
372 | described in @ref{Quoting}. These tokens are separated by | |
373 | @code{metacharacters}. Alias expansion is performed by this step | |
374 | (@pxref{Aliases}). | |
375 | ||
376 | @item | |
377 | Parses the tokens into simple and compound commands | |
378 | (@pxref{Shell Commands}). | |
379 | ||
380 | @item | |
381 | Performs the various shell expansions (@pxref{Shell Expansions}), breaking | |
382 | the expanded tokens into lists of filenames (@pxref{Filename Expansion}) | |
383 | and commands and arguments. | |
384 | ||
385 | @item | |
386 | Performs any necessary redirections (@pxref{Redirections}) and removes | |
387 | the redirection operators and their operands from the argument list. | |
388 | ||
389 | @item | |
390 | Executes the command (@pxref{Executing Commands}). | |
391 | ||
392 | @item | |
393 | Optionally waits for the command to complete and collects its exit | |
394 | status (@pxref{Exit Status}). | |
395 | ||
396 | @end enumerate | |
397 | ||
398 | @node Quoting | |
399 | @subsection Quoting | |
400 | @cindex quoting | |
401 | @menu | |
402 | * Escape Character:: How to remove the special meaning from a single | |
403 | character. | |
404 | * Single Quotes:: How to inhibit all interpretation of a sequence | |
405 | of characters. | |
406 | * Double Quotes:: How to suppress most of the interpretation of a | |
407 | sequence of characters. | |
408 | * ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings. | |
409 | * Locale Translation:: How to translate strings into different languages. | |
410 | @end menu | |
411 | ||
412 | Quoting is used to remove the special meaning of certain | |
413 | characters or words to the shell. Quoting can be used to | |
414 | disable special treatment for special characters, to prevent | |
415 | reserved words from being recognized as such, and to prevent | |
416 | parameter expansion. | |
417 | ||
418 | Each of the shell metacharacters (@pxref{Definitions}) | |
419 | has special meaning to the shell and must be quoted if it is to | |
420 | represent itself. | |
421 | When the command history expansion facilities are being used | |
422 | (@pxref{History Interaction}), the | |
423 | @dfn{history expansion} character, usually @samp{!}, must be quoted | |
424 | to prevent history expansion. @xref{Bash History Facilities}, for | |
425 | more details concerning history expansion. | |
426 | ||
427 | There are three quoting mechanisms: the | |
428 | @dfn{escape character}, single quotes, and double quotes. | |
429 | ||
430 | @node Escape Character | |
431 | @subsubsection Escape Character | |
432 | A non-quoted backslash @samp{\} is the Bash escape character. | |
433 | It preserves the literal value of the next character that follows, | |
434 | with the exception of @code{newline}. If a @code{\newline} pair | |
435 | appears, and the backslash itself is not quoted, the @code{\newline} | |
436 | is treated as a line continuation (that is, it is removed from | |
437 | the input stream and effectively ignored). | |
438 | ||
439 | @node Single Quotes | |
440 | @subsubsection Single Quotes | |
441 | ||
442 | Enclosing characters in single quotes (@samp{'}) preserves the literal value | |
443 | of each character within the quotes. A single quote may not occur | |
444 | between single quotes, even when preceded by a backslash. | |
445 | ||
446 | @node Double Quotes | |
447 | @subsubsection Double Quotes | |
448 | ||
449 | Enclosing characters in double quotes (@samp{"}) preserves the literal value | |
450 | of all characters within the quotes, with the exception of | |
451 | @samp{$}, @samp{`}, @samp{\}, | |
452 | and, when history expansion is enabled, @samp{!}. | |
453 | When the shell is in | |
454 | @sc{posix} mode (@pxref{Bash POSIX Mode}), | |
455 | the @samp{!} has no special meaning | |
456 | within double quotes, even when history expansion is enabled. | |
457 | The characters @samp{$} and @samp{`} | |
458 | retain their special meaning within double quotes (@pxref{Shell Expansions}). | |
459 | The backslash retains its special meaning only when followed by one of | |
460 | the following characters: | |
461 | @samp{$}, @samp{`}, @samp{"}, @samp{\}, or @code{newline}. | |
462 | Within double quotes, backslashes that are followed by one of these | |
463 | characters are removed. Backslashes preceding characters without a | |
464 | special meaning are left unmodified. | |
465 | A double quote may be quoted within double quotes by preceding it with | |
466 | a backslash. | |
467 | If enabled, history expansion will be performed unless an @samp{!} | |
468 | appearing in double quotes is escaped using a backslash. | |
469 | The backslash preceding the @samp{!} is not removed. | |
470 | ||
471 | The special parameters @samp{*} and @samp{@@} have special meaning | |
472 | when in double quotes (@pxref{Shell Parameter Expansion}). | |
473 | ||
474 | @node ANSI-C Quoting | |
475 | @subsubsection ANSI-C Quoting | |
476 | @cindex quoting, ANSI | |
477 | ||
478 | Character sequences of the form $'@var{string}' are treated as a special | |
479 | kind of single quotes. | |
480 | The sequence expands to @var{string}, with backslash-escaped characters | |
481 | in @var{string} replaced as specified by the ANSI C standard. | |
482 | Backslash escape sequences, if present, are decoded as follows: | |
483 | ||
484 | @table @code | |
485 | @item \a | |
486 | alert (bell) | |
487 | @item \b | |
488 | backspace | |
489 | @item \e | |
490 | @itemx \E | |
491 | an escape character (not ANSI C) | |
492 | @item \f | |
493 | form feed | |
494 | @item \n | |
495 | newline | |
496 | @item \r | |
497 | carriage return | |
498 | @item \t | |
499 | horizontal tab | |
500 | @item \v | |
501 | vertical tab | |
502 | @item \\ | |
503 | backslash | |
504 | @item \' | |
505 | single quote | |
506 | @item \" | |
507 | double quote | |
508 | @item \? | |
509 | question mark | |
510 | @item \@var{nnn} | |
511 | the eight-bit character whose value is the octal value @var{nnn} | |
512 | (one to three octal digits) | |
513 | @item \x@var{HH} | |
514 | the eight-bit character whose value is the hexadecimal value @var{HH} | |
515 | (one or two hex digits) | |
516 | @item \u@var{HHHH} | |
517 | the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value | |
518 | @var{HHHH} (one to four hex digits) | |
519 | @item \U@var{HHHHHHHH} | |
520 | the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value | |
521 | @var{HHHHHHHH} (one to eight hex digits) | |
522 | @item \c@var{x} | |
523 | a control-@var{x} character | |
524 | @end table | |
525 | ||
526 | @noindent | |
527 | The expanded result is single-quoted, as if the dollar sign had not | |
528 | been present. | |
529 | ||
530 | @node Locale Translation | |
531 | @subsubsection Locale-Specific Translation | |
532 | @cindex localization | |
533 | @cindex internationalization | |
534 | @cindex native languages | |
535 | @cindex translation, native languages | |
536 | @menu | |
537 | * Creating Internationalized Scripts:: How to use translations and different | |
538 | languages in your scripts. | |
539 | @end menu | |
540 | ||
541 | Prefixing a double-quoted string with a dollar sign (@samp{$}), such | |
542 | as @verb{|$"hello, world"|}, | |
543 | will cause the string to be translated according to the current locale. | |
544 | The @code{gettext} infrastructure performs the lookup and | |
545 | translation, using the @code{LC_MESSAGES}, @code{TEXTDOMAINDIR}, | |
546 | and @code{TEXTDOMAIN} shell variables, as explained below. | |
547 | See the gettext documentation for additional details not covered here. | |
548 | If the current locale is @code{C} or @code{POSIX}, | |
549 | if there are no translations available, | |
550 | of if the string is not translated, | |
551 | the dollar sign is ignored. | |
552 | Since this is a form of double quoting, the string remains double-quoted | |
553 | by default, whether or not it is translated and replaced. | |
554 | If the @code{noexpand_translation} option is enabled | |
555 | using the @code{shopt} builtin (@pxref{The Shopt Builtin}), | |
556 | translated strings are single-quoted instead of double-quoted. | |
557 | ||
558 | The rest of this section is a brief overview of how you use gettext to | |
559 | create translations for strings in a shell script named @var{scriptname}. | |
560 | There are more details in the gettext documentation. | |
561 | ||
562 | @node Creating Internationalized Scripts | |
563 | @cindex internationalized scripts | |
564 | @cindex string translations | |
565 | Once you've marked the strings in your script | |
566 | that you want to translate using $"...", | |
567 | you create a gettext "template" file using the command | |
568 | ||
569 | @example | |
570 | bash --dump-po-strings @var{scriptname} > @var{domain}.pot | |
571 | @end example | |
572 | ||
573 | @noindent | |
574 | The @var{domain} is your @dfn{message domain}. | |
575 | It's just an arbitrary string that's used to identify the files gettext | |
576 | needs, like a package or script name. | |
577 | It needs to be unique among all | |
578 | the message domains on systems where you install the translations, so | |
579 | gettext knows which translations correspond to your script. | |
580 | You'll use the template file to create translations for each target language. | |
581 | The template file conventionally has the suffix @samp{.pot}. | |
582 | ||
583 | You copy this template file to a separate file for each target language | |
584 | you want to support (called "PO" files, which use the suffix @samp{.po}). | |
585 | PO files use various naming conventions, but | |
586 | when you are working to translate a template file into a particular | |
587 | language, you first copy the template file to a file whose name is the | |
588 | language you want to target, with the @samp{.po} suffix. | |
589 | For instance, the Spanish translations of your strings would be | |
590 | in a file named @samp{es.po}, and to get started using a message | |
591 | domain named "example," you would run | |
592 | ||
593 | @example | |
594 | cp example.pot es.po | |
595 | @end example | |
596 | ||
597 | @noindent | |
598 | Ultimately, PO files are often named @var{domain}.po and installed in | |
599 | directories that contain multiple translation files for a particular language. | |
600 | ||
601 | Whichever naming convention you choose, you will need to translate the | |
602 | strings in the PO files into the appropriate languages. | |
603 | This has to be done manually. | |
604 | ||
605 | When you have the translations and PO files complete, you'll use the | |
606 | gettext tools to produce what are called "MO" files, which are compiled | |
607 | versions of the PO files the gettext tools use to look up translations | |
608 | efficiently. | |
609 | MO files are also called "message catalog" files. | |
610 | You use the @command{msgfmt} program to do this. | |
611 | For instance, if you had a file with Spanish translations, you could run | |
612 | ||
613 | @example | |
614 | msgfmt -o es.mo es.po | |
615 | @end example | |
616 | ||
617 | @noindent | |
618 | to produce the corresponding MO file. | |
619 | ||
620 | Once you have the MO files, you decide where to install them and use the | |
621 | @code{TEXTDOMAINDIR} shell variable to tell the gettext tools where they are. | |
622 | Make sure to use the same message domain to name the MO files | |
623 | as you did for the PO files when you install them. | |
624 | ||
625 | @vindex LANG | |
626 | @vindex LC_MESSAGES | |
627 | @vindex TEXTDOMAIN | |
628 | @vindex TEXTDOMAINDIR | |
629 | Your users will use the @env{LANG} or @env{LC_MESSAGES} shell variables to | |
630 | select the desired language. | |
631 | ||
632 | You set the @env{TEXTDOMAIN} variable to the script's message domain. | |
633 | As above, you use the message domain to name your translation files. | |
634 | ||
635 | You, or possibly your users, set the @env{TEXTDOMAINDIR} variable to the | |
636 | name of a directory where the message catalog files are stored. | |
637 | If you install the message files into the system's standard message catalog | |
638 | directory, you don't need to worry about this variable. | |
639 | ||
640 | The directory where the message catalog files are stored varies between | |
641 | systems. | |
642 | Some use the message catalog selected by the @env{LC_MESSAGES} | |
643 | shell variable. | |
644 | Others create the name of the message catalog from the value of the | |
645 | @env{TEXTDOMAIN} shell variable, possibly adding the @samp{.mo} suffix. | |
646 | If you use the @env{TEXTDOMAIN} variable, you may need to set the | |
647 | @env{TEXTDOMAINDIR} variable to the location of the message catalog files, | |
648 | as above. | |
649 | It's common to use both variables in this fashion: | |
650 | @env{$TEXTDOMAINDIR}/@env{$LC_MESSAGES}/LC_MESSAGES/@env{$TEXTDOMAIN}.mo. | |
651 | ||
652 | If you used that last convention, and you wanted to store the message | |
653 | catalog files with Spanish (es) and Esperanto (eo) translations into a | |
654 | local directory you use for custom translation files, you could run | |
655 | ||
656 | @example | |
657 | TEXTDOMAIN=example | |
658 | TEXTDOMAINDIR=/usr/local/share/locale | |
659 | ||
660 | cp es.mo $@{TEXTDOMAINDIR@}/es/LC_MESSAGES/$@{TEXTDOMAIN@}.mo | |
661 | cp eo.mo $@{TEXTDOMAINDIR@}/eo/LC_MESSAGES/$@{TEXTDOMAIN@}.mo | |
662 | @end example | |
663 | ||
664 | When all of this is done, and the message catalog files containing the | |
665 | compiled translations are installed in the correct location, | |
666 | your users will be able to see translated strings | |
667 | in any of the supported languages by setting the @env{LANG} or | |
668 | @env{LC_MESSAGES} environment variables before running your script. | |
669 | ||
670 | @node Comments | |
671 | @subsection Comments | |
672 | @cindex comments, shell | |
673 | ||
674 | In a non-interactive shell, or an interactive shell in which the | |
675 | @code{interactive_comments} option to the @code{shopt} | |
676 | builtin is enabled (@pxref{The Shopt Builtin}), | |
677 | a word beginning with @samp{#} | |
678 | causes that word and all remaining characters on that line to | |
679 | be ignored. An interactive shell without the @code{interactive_comments} | |
680 | option enabled does not allow comments. The @code{interactive_comments} | |
681 | option is on by default in interactive shells. | |
682 | @xref{Interactive Shells}, for a description of what makes | |
683 | a shell interactive. | |
684 | ||
685 | @node Shell Commands | |
686 | @section Shell Commands | |
687 | @cindex commands, shell | |
688 | ||
689 | A simple shell command such as @code{echo a b c} consists of the command | |
690 | itself followed by arguments, separated by spaces. | |
691 | ||
692 | More complex shell commands are composed of simple commands arranged together | |
693 | in a variety of ways: in a pipeline in which the output of one command | |
694 | becomes the input of a second, in a loop or conditional construct, or in | |
695 | some other grouping. | |
696 | ||
697 | @menu | |
698 | * Reserved Words:: Words that have special meaning to the shell. | |
699 | * Simple Commands:: The most common type of command. | |
700 | * Pipelines:: Connecting the input and output of several | |
701 | commands. | |
702 | * Lists:: How to execute commands sequentially. | |
703 | * Compound Commands:: Shell commands for control flow. | |
704 | * Coprocesses:: Two-way communication between commands. | |
705 | * GNU Parallel:: Running commands in parallel. | |
706 | @end menu | |
707 | ||
708 | @node Reserved Words | |
709 | @subsection Reserved Words | |
710 | @cindex reserved words | |
711 | ||
712 | Reserved words are words that have special meaning to the shell. | |
713 | They are used to begin and end the shell's compound commands. | |
714 | ||
715 | The following words are recognized as reserved when unquoted and | |
716 | the first word of a command (see below for exceptions): | |
717 | ||
718 | @multitable @columnfractions .1 .1 .1 .1 .12 .1 | |
719 | @item @code{if} @tab @code{then} @tab @code{elif} | |
720 | @tab @code{else} @tab @code{fi} @tab @code{time} | |
721 | @item @code{for} @tab @code{in} @tab @code{until} | |
722 | @tab @code{while} @tab @code{do} @tab @code{done} | |
723 | @item @code{case} @tab @code{esac} @tab @code{coproc} | |
724 | @tab @code{select} @tab @code{function} | |
725 | @item @code{@{} @tab @code{@}} @tab @code{[[} @tab @code{]]} @tab @code{!} | |
726 | @end multitable | |
727 | ||
728 | @noindent | |
729 | @code{in} is recognized as a reserved word if it is the third word of a | |
730 | @code{case} or @code{select} command. | |
731 | @code{in} and @code{do} are recognized as reserved | |
732 | words if they are the third word in a @code{for} command. | |
733 | ||
734 | @node Simple Commands | |
735 | @subsection Simple Commands | |
736 | @cindex commands, simple | |
737 | ||
738 | A simple command is the kind of command encountered most often. | |
739 | It's just a sequence of words separated by @code{blank}s, terminated | |
740 | by one of the shell's control operators (@pxref{Definitions}). The | |
741 | first word generally specifies a command to be executed, with the | |
742 | rest of the words being that command's arguments. | |
743 | ||
744 | The return status (@pxref{Exit Status}) of a simple command is | |
745 | its exit status as provided | |
746 | by the @sc{posix} 1003.1 @code{waitpid} function, or 128+@var{n} if | |
747 | the command was terminated by signal @var{n}. | |
748 | ||
749 | @node Pipelines | |
750 | @subsection Pipelines | |
751 | @cindex pipeline | |
752 | @cindex commands, pipelines | |
753 | ||
754 | A @code{pipeline} is a sequence of one or more commands separated by | |
755 | one of the control operators @samp{|} or @samp{|&}. | |
756 | ||
757 | @rwindex time | |
758 | @rwindex ! | |
759 | @cindex command timing | |
760 | The format for a pipeline is | |
761 | @example | |
762 | [time [-p]] [!] @var{command1} [ | or |& @var{command2} ] @dots{} | |
763 | @end example | |
764 | ||
765 | @noindent | |
766 | The output of each command in the pipeline is connected via a pipe | |
767 | to the input of the next command. | |
768 | That is, each command reads the previous command's output. This | |
769 | connection is performed before any redirections specified by | |
770 | @var{command1}. | |
771 | ||
772 | If @samp{|&} is used, @var{command1}'s standard error, in addition to | |
773 | its standard output, is connected to | |
774 | @var{command2}'s standard input through the pipe; | |
775 | it is shorthand for @code{2>&1 |}. | |
776 | This implicit redirection of the standard error to the standard output is | |
777 | performed after any redirections specified by @var{command1}. | |
778 | ||
779 | The reserved word @code{time} causes timing statistics | |
780 | to be printed for the pipeline once it finishes. | |
781 | The statistics currently consist of elapsed (wall-clock) time and | |
782 | user and system time consumed by the command's execution. | |
783 | The @option{-p} option changes the output format to that specified | |
784 | by @sc{posix}. | |
785 | When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}), | |
786 | it does not recognize @code{time} as a reserved word if the next | |
787 | token begins with a @samp{-}. | |
788 | The @env{TIMEFORMAT} variable may be set to a format string that | |
789 | specifies how the timing information should be displayed. | |
790 | @xref{Bash Variables}, for a description of the available formats. | |
791 | The use of @code{time} as a reserved word permits the timing of | |
792 | shell builtins, shell functions, and pipelines. An external | |
793 | @code{time} command cannot time these easily. | |
794 | ||
795 | When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}), @code{time} | |
796 | may be followed by a newline. In this case, the shell displays the | |
797 | total user and system time consumed by the shell and its children. | |
798 | The @env{TIMEFORMAT} variable may be used to specify the format of | |
799 | the time information. | |
800 | ||
801 | If the pipeline is not executed asynchronously (@pxref{Lists}), the | |
802 | shell waits for all commands in the pipeline to complete. | |
803 | ||
804 | Each command in a multi-command pipeline, | |
805 | where pipes are created, | |
806 | is executed in its own @dfn{subshell}, which is a | |
807 | separate process (@pxref{Command Execution Environment}). | |
808 | If the @code{lastpipe} option is enabled using the @code{shopt} builtin | |
809 | (@pxref{The Shopt Builtin}), | |
810 | the last element of a pipeline may be run by the shell process | |
811 | when job control is not active. | |
812 | ||
813 | The exit | |
814 | status of a pipeline is the exit status of the last command in the | |
815 | pipeline, unless the @code{pipefail} option is enabled | |
816 | (@pxref{The Set Builtin}). | |
817 | If @code{pipefail} is enabled, the pipeline's return status is the | |
818 | value of the last (rightmost) command to exit with a non-zero status, | |
819 | or zero if all commands exit successfully. | |
820 | If the reserved word @samp{!} precedes the pipeline, the | |
821 | exit status is the logical negation of the exit status as described | |
822 | above. | |
823 | The shell waits for all commands in the pipeline to terminate before | |
824 | returning a value. | |
825 | ||
826 | @node Lists | |
827 | @subsection Lists of Commands | |
828 | @cindex commands, lists | |
829 | ||
830 | A @code{list} is a sequence of one or more pipelines separated by one | |
831 | of the operators @samp{;}, @samp{&}, @samp{&&}, or @samp{||}, | |
832 | and optionally terminated by one of @samp{;}, @samp{&}, or a | |
833 | @code{newline}. | |
834 | ||
835 | Of these list operators, @samp{&&} and @samp{||} | |
836 | have equal precedence, followed by @samp{;} and @samp{&}, | |
837 | which have equal precedence. | |
838 | ||
839 | A sequence of one or more newlines may appear in a @code{list} | |
840 | to delimit commands, equivalent to a semicolon. | |
841 | ||
842 | If a command is terminated by the control operator @samp{&}, | |
843 | the shell executes the command asynchronously in a subshell. | |
844 | This is known as executing the command in the @dfn{background}, | |
845 | and these are referred to as @dfn{asynchronous} commands. | |
846 | The shell does not wait for the command to finish, and the return | |
847 | status is 0 (true). | |
848 | When job control is not active (@pxref{Job Control}), | |
849 | the standard input for asynchronous commands, in the absence of any | |
850 | explicit redirections, is redirected from @code{/dev/null}. | |
851 | ||
852 | Commands separated by a @samp{;} are executed sequentially; the shell | |
853 | waits for each command to terminate in turn. The return status is the | |
854 | exit status of the last command executed. | |
855 | ||
856 | @sc{and} and @sc{or} lists are sequences of one or more pipelines | |
857 | separated by the control operators @samp{&&} and @samp{||}, | |
858 | respectively. @sc{and} and @sc{or} lists are executed with left | |
859 | associativity. | |
860 | ||
861 | An @sc{and} list has the form | |
862 | @example | |
863 | @var{command1} && @var{command2} | |
864 | @end example | |
865 | ||
866 | @noindent | |
867 | @var{command2} is executed if, and only if, @var{command1} | |
868 | returns an exit status of zero (success). | |
869 | ||
870 | An @sc{or} list has the form | |
871 | @example | |
872 | @var{command1} || @var{command2} | |
873 | @end example | |
874 | ||
875 | @noindent | |
876 | @var{command2} is executed if, and only if, @var{command1} | |
877 | returns a non-zero exit status. | |
878 | ||
879 | The return status of | |
880 | @sc{and} and @sc{or} lists is the exit status of the last command | |
881 | executed in the list. | |
882 | ||
883 | @node Compound Commands | |
884 | @subsection Compound Commands | |
885 | @cindex commands, compound | |
886 | ||
887 | @menu | |
888 | * Looping Constructs:: Shell commands for iterative action. | |
889 | * Conditional Constructs:: Shell commands for conditional execution. | |
890 | * Command Grouping:: Ways to group commands. | |
891 | @end menu | |
892 | ||
893 | Compound commands are the shell programming language constructs. | |
894 | Each construct begins with a reserved word or control operator and is | |
895 | terminated by a corresponding reserved word or operator. | |
896 | Any redirections (@pxref{Redirections}) associated with a compound command | |
897 | apply to all commands within that compound command unless explicitly overridden. | |
898 | ||
899 | In most cases a list of commands in a compound command's description may be | |
900 | separated from the rest of the command by one or more newlines, and may be | |
901 | followed by a newline in place of a semicolon. | |
902 | ||
903 | Bash provides looping constructs, conditional commands, and mechanisms | |
904 | to group commands and execute them as a unit. | |
905 | ||
906 | @node Looping Constructs | |
907 | @subsubsection Looping Constructs | |
908 | @cindex commands, looping | |
909 | ||
910 | Bash supports the following looping constructs. | |
911 | ||
912 | Note that wherever a @samp{;} appears in the description of a | |
913 | command's syntax, it may be replaced with one or more newlines. | |
914 | ||
915 | @table @code | |
916 | @item until | |
917 | @rwindex until | |
918 | @rwindex do | |
919 | @rwindex done | |
920 | The syntax of the @code{until} command is: | |
921 | ||
922 | @example | |
923 | until @var{test-commands}; do @var{consequent-commands}; done | |
924 | @end example | |
925 | ||
926 | Execute @var{consequent-commands} as long as | |
927 | @var{test-commands} has an exit status which is not zero. | |
928 | The return status is the exit status of the last command executed | |
929 | in @var{consequent-commands}, or zero if none was executed. | |
930 | ||
931 | @item while | |
932 | @rwindex while | |
933 | The syntax of the @code{while} command is: | |
934 | ||
935 | @example | |
936 | while @var{test-commands}; do @var{consequent-commands}; done | |
937 | @end example | |
938 | ||
939 | Execute @var{consequent-commands} as long as | |
940 | @var{test-commands} has an exit status of zero. | |
941 | The return status is the exit status of the last command executed | |
942 | in @var{consequent-commands}, or zero if none was executed. | |
943 | ||
944 | @item for | |
945 | @rwindex for | |
946 | The syntax of the @code{for} command is: | |
947 | ||
948 | @example | |
949 | for @var{name} [ [in [@var{words} @dots{}] ] ; ] do @var{commands}; done | |
950 | @end example | |
951 | ||
952 | Expand @var{words} (@pxref{Shell Expansions}), and execute @var{commands} | |
953 | once for each member | |
954 | in the resultant list, with @var{name} bound to the current member. | |
955 | If @samp{in @var{words}} is not present, the @code{for} command | |
956 | executes the @var{commands} once for each positional parameter that is | |
957 | set, as if @samp{in "$@@"} had been specified | |
958 | (@pxref{Special Parameters}). | |
959 | ||
960 | The return status is the exit status of the last command that executes. | |
961 | If there are no items in the expansion of @var{words}, no commands are | |
962 | executed, and the return status is zero. | |
963 | ||
964 | An alternate form of the @code{for} command is also supported: | |
965 | ||
966 | @example | |
967 | for (( @var{expr1} ; @var{expr2} ; @var{expr3} )) ; do @var{commands} ; done | |
968 | @end example | |
969 | ||
970 | First, the arithmetic expression @var{expr1} is evaluated according | |
971 | to the rules described below (@pxref{Shell Arithmetic}). | |
972 | The arithmetic expression @var{expr2} is then evaluated repeatedly | |
973 | until it evaluates to zero. | |
974 | Each time @var{expr2} evaluates to a non-zero value, @var{commands} are | |
975 | executed and the arithmetic expression @var{expr3} is evaluated. | |
976 | If any expression is omitted, it behaves as if it evaluates to 1. | |
977 | The return value is the exit status of the last command in @var{commands} | |
978 | that is executed, or false if any of the expressions is invalid. | |
979 | @end table | |
980 | ||
981 | The @code{break} and @code{continue} builtins (@pxref{Bourne Shell Builtins}) | |
982 | may be used to control loop execution. | |
983 | ||
984 | @node Conditional Constructs | |
985 | @subsubsection Conditional Constructs | |
986 | @cindex commands, conditional | |
987 | ||
988 | @table @code | |
989 | @item if | |
990 | @rwindex if | |
991 | @rwindex then | |
992 | @rwindex else | |
993 | @rwindex elif | |
994 | @rwindex fi | |
995 | The syntax of the @code{if} command is: | |
996 | ||
997 | @example | |
998 | if @var{test-commands}; then | |
999 | @var{consequent-commands}; | |
1000 | [elif @var{more-test-commands}; then | |
1001 | @var{more-consequents};] | |
1002 | [else @var{alternate-consequents};] | |
1003 | fi | |
1004 | @end example | |
1005 | ||
1006 | The @var{test-commands} list is executed, and if its return status is zero, | |
1007 | the @var{consequent-commands} list is executed. | |
1008 | If @var{test-commands} returns a non-zero status, each @code{elif} list | |
1009 | is executed in turn, and if its exit status is zero, | |
1010 | the corresponding @var{more-consequents} is executed and the | |
1011 | command completes. | |
1012 | If @samp{else @var{alternate-consequents}} is present, and | |
1013 | the final command in the final @code{if} or @code{elif} clause | |
1014 | has a non-zero exit status, then @var{alternate-consequents} is executed. | |
1015 | The return status is the exit status of the last command executed, or | |
1016 | zero if no condition tested true. | |
1017 | ||
1018 | @item case | |
1019 | @rwindex case | |
1020 | @rwindex in | |
1021 | @rwindex esac | |
1022 | The syntax of the @code{case} command is: | |
1023 | ||
1024 | @example | |
1025 | case @var{word} in | |
1026 | [ [(] @var{pattern} [| @var{pattern}]@dots{}) @var{command-list} ;;]@dots{} | |
1027 | esac | |
1028 | @end example | |
1029 | ||
1030 | @code{case} will selectively execute the @var{command-list} corresponding to | |
1031 | the first @var{pattern} that matches @var{word}. | |
1032 | The match is performed according | |
1033 | to the rules described below in @ref{Pattern Matching}. | |
1034 | If the @code{nocasematch} shell option | |
1035 | (see the description of @code{shopt} in @ref{The Shopt Builtin}) | |
1036 | is enabled, the match is performed without regard to the case | |
1037 | of alphabetic characters. | |
1038 | The @samp{|} is used to separate multiple patterns, and the @samp{)} | |
1039 | operator terminates a pattern list. | |
1040 | A list of patterns and an associated command-list is known | |
1041 | as a @var{clause}. | |
1042 | ||
1043 | Each clause must be terminated with @samp{;;}, @samp{;&}, or @samp{;;&}. | |
1044 | The @var{word} undergoes tilde expansion, parameter expansion, command | |
1045 | substitution, arithmetic expansion, and quote removal | |
1046 | (@pxref{Shell Parameter Expansion}) | |
1047 | before matching is attempted. | |
1048 | Each @var{pattern} undergoes tilde expansion, parameter expansion, | |
1049 | command substitution, arithmetic expansion, process substitution, and | |
1050 | quote removal. | |
1051 | ||
1052 | There may be an arbitrary number of @code{case} clauses, each terminated | |
1053 | by a @samp{;;}, @samp{;&}, or @samp{;;&}. | |
1054 | The first pattern that matches determines the | |
1055 | command-list that is executed. | |
1056 | It's a common idiom to use @samp{*} as the final pattern to define the | |
1057 | default case, since that pattern will always match. | |
1058 | ||
1059 | Here is an example using @code{case} in a script that could be used to | |
1060 | describe one interesting feature of an animal: | |
1061 | ||
1062 | @example | |
1063 | echo -n "Enter the name of an animal: " | |
1064 | read ANIMAL | |
1065 | echo -n "The $ANIMAL has " | |
1066 | case $ANIMAL in | |
1067 | horse | dog | cat) echo -n "four";; | |
1068 | man | kangaroo ) echo -n "two";; | |
1069 | *) echo -n "an unknown number of";; | |
1070 | esac | |
1071 | echo " legs." | |
1072 | @end example | |
1073 | ||
1074 | @noindent | |
1075 | ||
1076 | If the @samp{;;} operator is used, no subsequent matches are attempted after | |
1077 | the first pattern match. | |
1078 | Using @samp{;&} in place of @samp{;;} causes execution to continue with | |
1079 | the @var{command-list} associated with the next clause, if any. | |
1080 | Using @samp{;;&} in place of @samp{;;} causes the shell to test the patterns | |
1081 | in the next clause, if any, and execute any associated @var{command-list} | |
1082 | on a successful match, | |
1083 | continuing the case statement execution as if the pattern list had not matched. | |
1084 | ||
1085 | The return status is zero if no @var{pattern} is matched. Otherwise, the | |
1086 | return status is the exit status of the @var{command-list} executed. | |
1087 | ||
1088 | @item select | |
1089 | @rwindex select | |
1090 | ||
1091 | The @code{select} construct allows the easy generation of menus. | |
1092 | It has almost the same syntax as the @code{for} command: | |
1093 | ||
1094 | @example | |
1095 | select @var{name} [in @var{words} @dots{}]; do @var{commands}; done | |
1096 | @end example | |
1097 | ||
1098 | The list of words following @code{in} is expanded, generating a list | |
1099 | of items, and the set of expanded words is printed on the standard | |
1100 | error output stream, each preceded by a number. If the | |
1101 | @samp{in @var{words}} is omitted, the positional parameters are printed, | |
1102 | as if @samp{in "$@@"} had been specified. | |
1103 | @code{select} then displays the @env{PS3} | |
1104 | prompt and reads a line from the standard input. | |
1105 | If the line consists of a number corresponding to one of the displayed | |
1106 | words, then the value of @var{name} is set to that word. | |
1107 | If the line is empty, the words and prompt are displayed again. | |
1108 | If @code{EOF} is read, the @code{select} command completes and returns 1. | |
1109 | Any other value read causes @var{name} to be set to null. | |
1110 | The line read is saved in the variable @env{REPLY}. | |
1111 | ||
1112 | The @var{commands} are executed after each selection until a | |
1113 | @code{break} command is executed, at which | |
1114 | point the @code{select} command completes. | |
1115 | ||
1116 | Here is an example that allows the user to pick a filename from the | |
1117 | current directory, and displays the name and index of the file | |
1118 | selected. | |
1119 | ||
1120 | @example | |
1121 | select fname in *; | |
1122 | do | |
1123 | echo you picked $fname \($REPLY\) | |
1124 | break; | |
1125 | done | |
1126 | @end example | |
1127 | ||
1128 | @item ((@dots{})) | |
1129 | @example | |
1130 | (( @var{expression} )) | |
1131 | @end example | |
1132 | ||
1133 | The arithmetic @var{expression} is evaluated according to the rules | |
1134 | described below (@pxref{Shell Arithmetic}). | |
1135 | The @var{expression} undergoes the same expansions | |
1136 | as if it were within double quotes, | |
1137 | but double quote characters in @var{expression} are not treated specially | |
1138 | are removed. | |
1139 | If the value of the expression is non-zero, the return status is 0; | |
1140 | otherwise the return status is 1. | |
1141 | ||
1142 | ||
1143 | @item [[@dots{}]] | |
1144 | @rwindex [[ | |
1145 | @rwindex ]] | |
1146 | @example | |
1147 | [[ @var{expression} ]] | |
1148 | @end example | |
1149 | ||
1150 | Return a status of 0 or 1 depending on the evaluation of | |
1151 | the conditional expression @var{expression}. | |
1152 | Expressions are composed of the primaries described below in | |
1153 | @ref{Bash Conditional Expressions}. | |
1154 | The words between the @code{[[} and @code{]]} do not undergo word splitting | |
1155 | and filename expansion. | |
1156 | The shell performs tilde expansion, parameter and | |
1157 | variable expansion, arithmetic expansion, command substitution, process | |
1158 | substitution, and quote removal on those words | |
1159 | (the expansions that would occur if the words were enclosed in double quotes). | |
1160 | Conditional operators such as @samp{-f} must be unquoted to be recognized | |
1161 | as primaries. | |
1162 | ||
1163 | When used with @code{[[}, the @samp{<} and @samp{>} operators sort | |
1164 | lexicographically using the current locale. | |
1165 | ||
1166 | When the @samp{==} and @samp{!=} operators are used, the string to the | |
1167 | right of the operator is considered a pattern and matched according | |
1168 | to the rules described below in @ref{Pattern Matching}, | |
1169 | as if the @code{extglob} shell option were enabled. | |
1170 | The @samp{=} operator is identical to @samp{==}. | |
1171 | If the @code{nocasematch} shell option | |
1172 | (see the description of @code{shopt} in @ref{The Shopt Builtin}) | |
1173 | is enabled, the match is performed without regard to the case | |
1174 | of alphabetic characters. | |
1175 | The return value is 0 if the string matches (@samp{==}) or does not | |
1176 | match (@samp{!=}) the pattern, and 1 otherwise. | |
1177 | ||
1178 | If you quote any part of the pattern, | |
1179 | using any of the shell's quoting mechanisms, | |
1180 | the quoted portion is matched literally. | |
1181 | This means every character in the quoted portion matches itself, | |
1182 | instead of having any special pattern matching meaning. | |
1183 | ||
1184 | An additional binary operator, @samp{=~}, is available, with the same | |
1185 | precedence as @samp{==} and @samp{!=}. | |
1186 | When you use @samp{=~}, the string to the right of the operator is considered | |
1187 | a @sc{posix} extended regular expression pattern and matched accordingly | |
1188 | (using the @sc{posix} @code{regcomp} and @code{regexec} interfaces | |
1189 | usually described in @i{regex}(3)). | |
1190 | The return value is 0 if the string matches the pattern, and 1 if it does not. | |
1191 | If the regular expression is syntactically incorrect, the conditional | |
1192 | expression returns 2. | |
1193 | If the @code{nocasematch} shell option | |
1194 | (see the description of @code{shopt} in @ref{The Shopt Builtin}) | |
1195 | is enabled, the match is performed without regard to the case | |
1196 | of alphabetic characters. | |
1197 | ||
1198 | You can quote any part of the pattern | |
1199 | to force the quoted portion to be matched literally | |
1200 | instead of as a regular expression (see above). | |
1201 | If the pattern is stored in a shell variable, quoting the variable | |
1202 | expansion forces the entire pattern to be matched literally. | |
1203 | ||
1204 | The pattern will match if it matches any part of the string. | |
1205 | If you want to force the pattern to match the entire string, | |
1206 | anchor the pattern using the @samp{^} and @samp{$} regular expression | |
1207 | operators. | |
1208 | ||
1209 | For example, the following will match a line | |
1210 | (stored in the shell variable @code{line}) | |
1211 | if there is a sequence of characters anywhere in the value consisting of | |
1212 | any number, including zero, of | |
1213 | characters in the @code{space} character class, | |
1214 | immediately followed by zero or one instances of @samp{a}, | |
1215 | then a @samp{b}: | |
1216 | ||
1217 | @example | |
1218 | [[ $line =~ [[:space:]]*(a)?b ]] | |
1219 | @end example | |
1220 | ||
1221 | @noindent | |
1222 | That means values for @code{line} like | |
1223 | @samp{aab}, @samp{ aaaaaab}, @samp{xaby}, and @samp{ ab} | |
1224 | will all match, | |
1225 | as will a line containing a @samp{b} anywhere in its value. | |
1226 | ||
1227 | If you want to match a character that's special to the regular expression | |
1228 | grammar (@samp{^$|[]()\.*+?}), it has to be quoted to remove its special | |
1229 | meaning. | |
1230 | This means that in the pattern @samp{xxx.txt}, the @samp{.} matches any | |
1231 | character in the string (its usual regular expression meaning), but in the | |
1232 | pattern @samp{"xxx.txt"}, it can only match a literal @samp{.}. | |
1233 | ||
1234 | Likewise, if you want to include a character in your pattern that has a | |
1235 | special meaning to the regular expression grammar, you must make sure it's | |
1236 | not quoted. | |
1237 | If you want to anchor a pattern at the beginning or end of the string, | |
1238 | for instance, you cannot quote the @samp{^} or @samp{$} | |
1239 | characters using any form of shell quoting. | |
1240 | ||
1241 | If you want to match @samp{initial string} at the start of a line, | |
1242 | the following will work: | |
1243 | @example | |
1244 | [[ $line =~ ^"initial string" ]] | |
1245 | @end example | |
1246 | @noindent | |
1247 | but this will not: | |
1248 | @example | |
1249 | [[ $line =~ "^initial string" ]] | |
1250 | @end example | |
1251 | @noindent | |
1252 | because in the second example the @samp{^} is quoted and doesn't have its | |
1253 | usual special meaning. | |
1254 | ||
1255 | It is sometimes difficult to specify a regular expression properly | |
1256 | without using quotes, or to keep track of the quoting used by regular | |
1257 | expressions while paying attention to | |
1258 | shell quoting and the shell's quote removal. | |
1259 | Storing the regular expression in a shell variable is often a useful | |
1260 | way to avoid problems with quoting characters that are special to the | |
1261 | shell. | |
1262 | For example, the following is equivalent to the pattern used above: | |
1263 | ||
1264 | @example | |
1265 | pattern='[[:space:]]*(a)?b' | |
1266 | [[ $line =~ $pattern ]] | |
1267 | @end example | |
1268 | ||
1269 | Shell programmers should take special care with backslashes, since | |
1270 | backslashes are used by both the shell and regular expressions to remove | |
1271 | the special meaning from the following character. | |
1272 | This means that after the shell's word expansions complete | |
1273 | (@pxref{Shell Expansions}), | |
1274 | any backslashes remaining in parts of the pattern | |
1275 | that were originally not quoted can remove the | |
1276 | special meaning of pattern characters. | |
1277 | If any part of the pattern is quoted, the shell does its best to ensure that | |
1278 | the regular expression treats those remaining backslashes as literal, | |
1279 | if they appeared in a quoted portion. | |
1280 | ||
1281 | The following two sets of commands are @emph{not} equivalent: | |
1282 | ||
1283 | @example | |
1284 | pattern='\.' | |
1285 | ||
1286 | [[ . =~ $pattern ]] | |
1287 | [[ . =~ \. ]] | |
1288 | ||
1289 | [[ . =~ "$pattern" ]] | |
1290 | [[ . =~ '\.' ]] | |
1291 | @end example | |
1292 | ||
1293 | @noindent | |
1294 | The first two matches will succeed, but the second two will not, because | |
1295 | in the second two the backslash will be part of the pattern to be matched. | |
1296 | In the first two examples, the pattern passed to the regular expression | |
1297 | parser is @samp{\.}. The backslash removes the special meaning from | |
1298 | @samp{.}, so the literal @samp{.} matches. | |
1299 | In the second two examples, the pattern passed to the regular expression | |
1300 | parser has the backslash quoted (e.g., @samp{\\\.}), which will not match | |
1301 | the string, since it does not contain a backslash. | |
1302 | If the string in the first examples were anything other than @samp{.}, say | |
1303 | @samp{a}, the pattern would not match, because the quoted @samp{.} in the | |
1304 | pattern loses its special meaning of matching any single character. | |
1305 | ||
1306 | Bracket expressions in regular expressions can be sources of errors as well, | |
1307 | since characters that are normally special in regular expressions | |
1308 | lose their special meanings between brackets. | |
1309 | However, you can use bracket expressions to match special pattern characters | |
1310 | without quoting them, so they are sometimes useful for this purpose. | |
1311 | ||
1312 | Though it might seem like a strange way to write it, the following pattern | |
1313 | will match a @samp{.} in the string: | |
1314 | ||
1315 | @example | |
1316 | [[ . =~ [.] ]] | |
1317 | @end example | |
1318 | ||
1319 | The shell performs any word expansions before passing the pattern | |
1320 | to the regular expression functions, | |
1321 | so you can assume that the shell's quoting takes precedence. | |
1322 | As noted above, the regular expression parser will interpret any | |
1323 | unquoted backslashes remaining in the pattern after shell expansion | |
1324 | according to its own rules. | |
1325 | The intention is to avoid making shell programmers quote things twice | |
1326 | as much as possible, so shell quoting should be sufficient to quote | |
1327 | special pattern characters where that's necessary. | |
1328 | ||
1329 | The array variable @code{BASH_REMATCH} records which parts of the string | |
1330 | matched the pattern. | |
1331 | The element of @code{BASH_REMATCH} with index 0 contains the portion of | |
1332 | the string matching the entire regular expression. | |
1333 | Substrings matched by parenthesized subexpressions within the regular | |
1334 | expression are saved in the remaining @code{BASH_REMATCH} indices. | |
1335 | The element of @code{BASH_REMATCH} with index @var{n} is the portion of the | |
1336 | string matching the @var{n}th parenthesized subexpression. | |
1337 | ||
1338 | Bash sets | |
1339 | @code{BASH_REMATCH} | |
1340 | in the global scope; declaring it as a local variable will lead to | |
1341 | unexpected results. | |
1342 | ||
1343 | Expressions may be combined using the following operators, listed | |
1344 | in decreasing order of precedence: | |
1345 | ||
1346 | @table @code | |
1347 | @item ( @var{expression} ) | |
1348 | Returns the value of @var{expression}. | |
1349 | This may be used to override the normal precedence of operators. | |
1350 | ||
1351 | @item ! @var{expression} | |
1352 | True if @var{expression} is false. | |
1353 | ||
1354 | @item @var{expression1} && @var{expression2} | |
1355 | True if both @var{expression1} and @var{expression2} are true. | |
1356 | ||
1357 | @item @var{expression1} || @var{expression2} | |
1358 | True if either @var{expression1} or @var{expression2} is true. | |
1359 | @end table | |
1360 | ||
1361 | @noindent | |
1362 | The @code{&&} and @code{||} operators do not evaluate @var{expression2} if the | |
1363 | value of @var{expression1} is sufficient to determine the return | |
1364 | value of the entire conditional expression. | |
1365 | @end table | |
1366 | ||
1367 | @node Command Grouping | |
1368 | @subsubsection Grouping Commands | |
1369 | @cindex commands, grouping | |
1370 | ||
1371 | Bash provides two ways to group a list of commands to be executed | |
1372 | as a unit. When commands are grouped, redirections may be applied | |
1373 | to the entire command list. For example, the output of all the | |
1374 | commands in the list may be redirected to a single stream. | |
1375 | ||
1376 | @table @code | |
1377 | @item () | |
1378 | @example | |
1379 | ( @var{list} ) | |
1380 | @end example | |
1381 | ||
1382 | Placing a list of commands between parentheses forces the shell to create | |
1383 | a subshell (@pxref{Command Execution Environment}), and each | |
1384 | of the commands in @var{list} is executed in that subshell environment. | |
1385 | Since the @var{list} is executed in a subshell, variable assignments do not | |
1386 | remain in effect after the subshell completes. | |
1387 | ||
1388 | @item @{@} | |
1389 | @rwindex @{ | |
1390 | @rwindex @} | |
1391 | @example | |
1392 | @{ @var{list}; @} | |
1393 | @end example | |
1394 | ||
1395 | Placing a list of commands between curly braces causes the list to | |
1396 | be executed in the current shell context. No subshell is created. | |
1397 | The semicolon (or newline) following @var{list} is required. | |
1398 | @end table | |
1399 | ||
1400 | In addition to the creation of a subshell, there is a subtle difference | |
1401 | between these two constructs due to historical reasons. The braces | |
1402 | are reserved words, so they must be separated from the @var{list} | |
1403 | by @code{blank}s or other shell metacharacters. | |
1404 | The parentheses are operators, and are | |
1405 | recognized as separate tokens by the shell even if they are not separated | |
1406 | from the @var{list} by whitespace. | |
1407 | ||
1408 | The exit status of both of these constructs is the exit status of | |
1409 | @var{list}. | |
1410 | ||
1411 | @node Coprocesses | |
1412 | @subsection Coprocesses | |
1413 | @cindex coprocess | |
1414 | ||
1415 | A @code{coprocess} is a shell command preceded by the @code{coproc} | |
1416 | reserved word. | |
1417 | A coprocess is executed asynchronously in a subshell, as if the command | |
1418 | had been terminated with the @samp{&} control operator, with a two-way pipe | |
1419 | established between the executing shell and the coprocess. | |
1420 | ||
1421 | The syntax for a coprocess is: | |
1422 | ||
1423 | @example | |
1424 | coproc [@var{NAME}] @var{command} [@var{redirections}] | |
1425 | @end example | |
1426 | ||
1427 | @noindent | |
1428 | This creates a coprocess named @var{NAME}. | |
1429 | @var{command} may be either a simple command (@pxref{Simple Commands}) | |
1430 | or a compound command (@pxref{Compound Commands}). | |
1431 | @var{NAME} is a shell variable name. | |
1432 | If @var{NAME} is not supplied, the default name is @code{COPROC}. | |
1433 | ||
1434 | The recommended form to use for a coprocess is | |
1435 | ||
1436 | @example | |
1437 | coproc @var{NAME} @{ @var{command}; @} | |
1438 | @end example | |
1439 | ||
1440 | @noindent | |
1441 | This form is recommended because simple commands result in the coprocess | |
1442 | always being named @code{COPROC}, and it is simpler to use and more complete | |
1443 | than the other compound commands. | |
1444 | ||
1445 | There are other forms of coprocesses: | |
1446 | ||
1447 | @example | |
1448 | coproc @var{NAME} @var{compound-command} | |
1449 | coproc @var{compound-command} | |
1450 | coproc @var{simple-command} | |
1451 | @end example | |
1452 | ||
1453 | @noindent | |
1454 | If @var{command} is a compound command, @var{NAME} is optional. The | |
1455 | word following @code{coproc} determines whether that word is interpreted | |
1456 | as a variable name: it is interpreted as @var{NAME} if it is not a | |
1457 | reserved word that introduces a compound command. | |
1458 | If @var{command} is a simple command, @var{NAME} is not allowed; this | |
1459 | is to avoid confusion between @var{NAME} and the first word of the simple | |
1460 | command. | |
1461 | ||
1462 | When the coprocess is executed, the shell creates an array variable | |
1463 | (@pxref{Arrays}) | |
1464 | named @var{NAME} in the context of the executing shell. | |
1465 | The standard output of @var{command} | |
1466 | is connected via a pipe to a file descriptor in the executing shell, | |
1467 | and that file descriptor is assigned to @var{NAME}[0]. | |
1468 | The standard input of @var{command} | |
1469 | is connected via a pipe to a file descriptor in the executing shell, | |
1470 | and that file descriptor is assigned to @var{NAME}[1]. | |
1471 | This pipe is established before any redirections specified by the | |
1472 | command (@pxref{Redirections}). | |
1473 | The file descriptors can be utilized as arguments to shell commands | |
1474 | and redirections using standard word expansions. | |
1475 | Other than those created to execute command and process substitutions, | |
1476 | the file descriptors are not available in subshells. | |
1477 | ||
1478 | The process ID of the shell spawned to execute the coprocess is | |
1479 | available as the value of the variable @env{@var{NAME}_PID}. | |
1480 | The @code{wait} | |
1481 | builtin command may be used to wait for the coprocess to terminate. | |
1482 | ||
1483 | Since the coprocess is created as an asynchronous command, | |
1484 | the @code{coproc} command always returns success. | |
1485 | The return status of a coprocess is the exit status of @var{command}. | |
1486 | ||
1487 | @node GNU Parallel | |
1488 | @subsection GNU Parallel | |
1489 | ||
1490 | There are ways to run commands in parallel that are not built into Bash. | |
1491 | GNU Parallel is a tool to do just that. | |
1492 | ||
1493 | GNU Parallel, as its name suggests, can be used to build and run commands | |
1494 | in parallel. You may run the same command with different arguments, whether | |
1495 | they are filenames, usernames, hostnames, or lines read from files. GNU | |
1496 | Parallel provides shorthand references to many of the most common operations | |
1497 | (input lines, various portions of the input line, different ways to specify | |
1498 | the input source, and so on). Parallel can replace @code{xargs} or feed | |
1499 | commands from its input sources to several different instances of Bash. | |
1500 | ||
1501 | For a complete description, refer to the GNU Parallel documentation, which | |
1502 | is available at | |
1503 | @url{https://www.gnu.org/software/parallel/parallel_tutorial.html}. | |
1504 | ||
1505 | @node Shell Functions | |
1506 | @section Shell Functions | |
1507 | @cindex shell function | |
1508 | @cindex functions, shell | |
1509 | ||
1510 | Shell functions are a way to group commands for later execution | |
1511 | using a single name for the group. They are executed just like | |
1512 | a "regular" command. | |
1513 | When the name of a shell function is used as a simple command name, | |
1514 | the list of commands associated with that function name is executed. | |
1515 | Shell functions are executed in the current | |
1516 | shell context; no new process is created to interpret them. | |
1517 | ||
1518 | Functions are declared using this syntax: | |
1519 | @rwindex function | |
1520 | @example | |
1521 | @var{fname} () @var{compound-command} [ @var{redirections} ] | |
1522 | @end example | |
1523 | ||
1524 | or | |
1525 | ||
1526 | @example | |
1527 | function @var{fname} [()] @var{compound-command} [ @var{redirections} ] | |
1528 | @end example | |
1529 | ||
1530 | This defines a shell function named @var{fname}. The reserved | |
1531 | word @code{function} is optional. | |
1532 | If the @code{function} reserved | |
1533 | word is supplied, the parentheses are optional. | |
1534 | The @dfn{body} of the function is the compound command | |
1535 | @var{compound-command} (@pxref{Compound Commands}). | |
1536 | That command is usually a @var{list} enclosed between @{ and @}, but | |
1537 | may be any compound command listed above. | |
1538 | If the @code{function} reserved word is used, but the | |
1539 | parentheses are not supplied, the braces are recommended. | |
1540 | @var{compound-command} is executed whenever @var{fname} is specified as the | |
1541 | name of a simple command. | |
1542 | When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}), | |
1543 | @var{fname} must be a valid shell name and | |
1544 | may not be the same as one of the special builtins | |
1545 | (@pxref{Special Builtins}). | |
1546 | In default mode, a function name can be any unquoted shell word that does | |
1547 | not contain @samp{$}. | |
1548 | Any redirections (@pxref{Redirections}) associated with the shell function | |
1549 | are performed when the function is executed. | |
1550 | A function definition may be deleted using the @option{-f} option to the | |
1551 | @code{unset} builtin (@pxref{Bourne Shell Builtins}). | |
1552 | ||
1553 | The exit status of a function definition is zero unless a syntax error | |
1554 | occurs or a readonly function with the same name already exists. | |
1555 | When executed, the exit status of a function is the exit status of the | |
1556 | last command executed in the body. | |
1557 | ||
1558 | Note that for historical reasons, in the most common usage the curly braces | |
1559 | that surround the body of the function must be separated from the body by | |
1560 | @code{blank}s or newlines. | |
1561 | This is because the braces are reserved words and are only recognized | |
1562 | as such when they are separated from the command list | |
1563 | by whitespace or another shell metacharacter. | |
1564 | Also, when using the braces, the @var{list} must be terminated by a semicolon, | |
1565 | a @samp{&}, or a newline. | |
1566 | ||
1567 | When a function is executed, the arguments to the | |
1568 | function become the positional parameters | |
1569 | during its execution (@pxref{Positional Parameters}). | |
1570 | The special parameter @samp{#} that expands to the number of | |
1571 | positional parameters is updated to reflect the change. | |
1572 | Special parameter @code{0} is unchanged. | |
1573 | The first element of the @env{FUNCNAME} variable is set to the | |
1574 | name of the function while the function is executing. | |
1575 | ||
1576 | All other aspects of the shell execution | |
1577 | environment are identical between a function and its caller | |
1578 | with these exceptions: | |
1579 | the @env{DEBUG} and @env{RETURN} traps | |
1580 | are not inherited unless the function has been given the | |
1581 | @code{trace} attribute using the @code{declare} builtin or | |
1582 | the @code{-o functrace} option has been enabled with | |
1583 | the @code{set} builtin, | |
1584 | (in which case all functions inherit the @env{DEBUG} and @env{RETURN} traps), | |
1585 | and the @env{ERR} trap is not inherited unless the @code{-o errtrace} | |
1586 | shell option has been enabled. | |
1587 | @xref{Bourne Shell Builtins}, for the description of the | |
1588 | @code{trap} builtin. | |
1589 | ||
1590 | The @env{FUNCNEST} variable, if set to a numeric value greater | |
1591 | than 0, defines a maximum function nesting level. Function | |
1592 | invocations that exceed the limit cause the entire command to | |
1593 | abort. | |
1594 | ||
1595 | If the builtin command @code{return} | |
1596 | is executed in a function, the function completes and | |
1597 | execution resumes with the next command after the function | |
1598 | call. | |
1599 | Any command associated with the @code{RETURN} trap is executed | |
1600 | before execution resumes. | |
1601 | When a function completes, the values of the | |
1602 | positional parameters and the special parameter @samp{#} | |
1603 | are restored to the values they had prior to the function's | |
1604 | execution. If a numeric argument is given to @code{return}, | |
1605 | that is the function's return status; otherwise the function's | |
1606 | return status is the exit status of the last command executed | |
1607 | before the @code{return}. | |
1608 | ||
1609 | Variables local to the function may be declared with the | |
1610 | @code{local} builtin (@dfn{local variables}). | |
1611 | Ordinarily, variables and their values | |
1612 | are shared between a function and its caller. | |
1613 | These variables are visible only to | |
1614 | the function and the commands it invokes. This is particularly | |
1615 | important when a shell function calls other functions. | |
1616 | ||
1617 | In the following description, the @dfn{current scope} is a currently- | |
1618 | executing function. | |
1619 | Previous scopes consist of that function's caller and so on, | |
1620 | back to the "global" scope, where the shell is not executing | |
1621 | any shell function. | |
1622 | Consequently, a local variable at the current local scope is a variable | |
1623 | declared using the @code{local} or @code{declare} builtins in the | |
1624 | function that is currently executing. | |
1625 | ||
1626 | Local variables "shadow" variables with the same name declared at | |
1627 | previous scopes. For instance, a local variable declared in a function | |
1628 | hides a global variable of the same name: references and assignments | |
1629 | refer to the local variable, leaving the global variable unmodified. | |
1630 | When the function returns, the global variable is once again visible. | |
1631 | ||
1632 | The shell uses @dfn{dynamic scoping} to control a variable's visibility | |
1633 | within functions. | |
1634 | With dynamic scoping, visible variables and their values | |
1635 | are a result of the sequence of function calls that caused execution | |
1636 | to reach the current function. | |
1637 | The value of a variable that a function sees depends | |
1638 | on its value within its caller, if any, whether that caller is | |
1639 | the "global" scope or another shell function. | |
1640 | This is also the value that a local variable | |
1641 | declaration "shadows", and the value that is restored when the function | |
1642 | returns. | |
1643 | ||
1644 | For example, if a variable @env{var} is declared as local in function | |
1645 | @code{func1}, and @code{func1} calls another function @code{func2}, | |
1646 | references to @env{var} made from within @code{func2} will resolve to the | |
1647 | local variable @env{var} from @code{func1}, shadowing any global variable | |
1648 | named @env{var}. | |
1649 | ||
1650 | The following script demonstrates this behavior. | |
1651 | When executed, the script displays | |
1652 | ||
1653 | @example | |
1654 | In func2, var = func1 local | |
1655 | @end example | |
1656 | ||
1657 | @example | |
1658 | func1() | |
1659 | @{ | |
1660 | local var='func1 local' | |
1661 | func2 | |
1662 | @} | |
1663 | ||
1664 | func2() | |
1665 | @{ | |
1666 | echo "In func2, var = $var" | |
1667 | @} | |
1668 | ||
1669 | var=global | |
1670 | func1 | |
1671 | @end example | |
1672 | ||
1673 | The @code{unset} builtin also acts using the same dynamic scope: if a | |
1674 | variable is local to the current scope, @code{unset} will unset it; | |
1675 | otherwise the unset will refer to the variable found in any calling scope | |
1676 | as described above. | |
1677 | If a variable at the current local scope is unset, it will remain so | |
1678 | (appearing as unset) | |
1679 | until it is reset in that scope or until the function returns. | |
1680 | Once the function returns, any instance of the variable at a previous | |
1681 | scope will become visible. | |
1682 | If the unset acts on a variable at a previous scope, any instance of a | |
1683 | variable with that name that had been shadowed will become visible | |
1684 | (see below how @code{localvar_unset}shell option changes this behavior). | |
1685 | ||
1686 | Function names and definitions may be listed with the | |
1687 | @option{-f} option to the @code{declare} (@code{typeset}) | |
1688 | builtin command (@pxref{Bash Builtins}). | |
1689 | The @option{-F} option to @code{declare} or @code{typeset} | |
1690 | will list the function names only | |
1691 | (and optionally the source file and line number, if the @code{extdebug} | |
1692 | shell option is enabled). | |
1693 | Functions may be exported so that child shell processes | |
1694 | (those created when executing a separate shell invocation) | |
1695 | automatically have them defined with the | |
1696 | @option{-f} option to the @code{export} builtin | |
1697 | (@pxref{Bourne Shell Builtins}). | |
1698 | ||
1699 | Functions may be recursive. | |
1700 | The @code{FUNCNEST} variable may be used to limit the depth of the | |
1701 | function call stack and restrict the number of function invocations. | |
1702 | By default, no limit is placed on the number of recursive calls. | |
1703 | ||
1704 | @node Shell Parameters | |
1705 | @section Shell Parameters | |
1706 | @cindex parameters | |
1707 | @cindex variable, shell | |
1708 | @cindex shell variable | |
1709 | ||
1710 | @menu | |
1711 | * Positional Parameters:: The shell's command-line arguments. | |
1712 | * Special Parameters:: Parameters denoted by special characters. | |
1713 | @end menu | |
1714 | ||
1715 | A @dfn{parameter} is an entity that stores values. | |
1716 | It can be a @code{name}, a number, or one of the special characters | |
1717 | listed below. | |
1718 | A @dfn{variable} is a parameter denoted by a @code{name}. | |
1719 | A variable has a @code{value} and zero or more @code{attributes}. | |
1720 | Attributes are assigned using the @code{declare} builtin command | |
1721 | (see the description of the @code{declare} builtin in @ref{Bash Builtins}). | |
1722 | ||
1723 | A parameter is set if it has been assigned a value. The null string is | |
1724 | a valid value. Once a variable is set, it may be unset only by using | |
1725 | the @code{unset} builtin command. | |
1726 | ||
1727 | A variable may be assigned to by a statement of the form | |
1728 | @example | |
1729 | @var{name}=[@var{value}] | |
1730 | @end example | |
1731 | @noindent | |
1732 | If @var{value} | |
1733 | is not given, the variable is assigned the null string. All | |
1734 | @var{value}s undergo tilde expansion, parameter and variable expansion, | |
1735 | command substitution, arithmetic expansion, and quote | |
1736 | removal (@pxref{Shell Parameter Expansion}). | |
1737 | If the variable has its @code{integer} | |
1738 | attribute set, then @var{value} | |
1739 | is evaluated as an arithmetic expression even if the @code{$((@dots{}))} | |
1740 | expansion is not used (@pxref{Arithmetic Expansion}). | |
1741 | Word splitting and filename expansion are not performed. | |
1742 | Assignment statements may also appear as arguments to the | |
1743 | @code{alias}, | |
1744 | @code{declare}, @code{typeset}, @code{export}, @code{readonly}, | |
1745 | and @code{local} builtin commands (@dfn{declaration} commands). | |
1746 | When in @sc{posix} mode (@pxref{Bash POSIX Mode}), these builtins may appear | |
1747 | in a command after one or more instances of the @code{command} builtin | |
1748 | and retain these assignment statement properties. | |
1749 | ||
1750 | In the context where an assignment statement is assigning a value | |
1751 | to a shell variable or array index (@pxref{Arrays}), the @samp{+=} | |
1752 | operator can be used to | |
1753 | append to or add to the variable's previous value. | |
1754 | This includes arguments to builtin commands such as @code{declare} that | |
1755 | accept assignment statements (declaration commands). | |
1756 | When @samp{+=} is applied to a variable for which the @code{integer} attribute | |
1757 | has been set, @var{value} is evaluated as an arithmetic expression and | |
1758 | added to the variable's current value, which is also evaluated. | |
1759 | When @samp{+=} is applied to an array variable using compound assignment | |
1760 | (@pxref{Arrays}), the | |
1761 | variable's value is not unset (as it is when using @samp{=}), and new | |
1762 | values are appended to the array beginning at one greater than the array's | |
1763 | maximum index (for indexed arrays), or added as additional key-value pairs | |
1764 | in an associative array. | |
1765 | When applied to a string-valued variable, @var{value} is expanded and | |
1766 | appended to the variable's value. | |
1767 | ||
1768 | A variable can be assigned the @code{nameref} attribute using the | |
1769 | @option{-n} option to the @code{declare} or @code{local} builtin commands | |
1770 | (@pxref{Bash Builtins}) | |
1771 | to create a @dfn{nameref}, or a reference to another variable. | |
1772 | This allows variables to be manipulated indirectly. | |
1773 | Whenever the nameref variable is referenced, assigned to, unset, or has | |
1774 | its attributes modified (other than using or changing the nameref | |
1775 | attribute itself), the | |
1776 | operation is actually performed on the variable specified by the nameref | |
1777 | variable's value. | |
1778 | A nameref is commonly used within shell functions to refer to a variable | |
1779 | whose name is passed as an argument to the function. | |
1780 | For instance, if a variable name is passed to a shell function as its first | |
1781 | argument, running | |
1782 | @example | |
1783 | declare -n ref=$1 | |
1784 | @end example | |
1785 | @noindent | |
1786 | inside the function creates a nameref variable @env{ref} whose value is | |
1787 | the variable name passed as the first argument. | |
1788 | References and assignments to @env{ref}, and changes to its attributes, | |
1789 | are treated as references, assignments, and attribute modifications | |
1790 | to the variable whose name was passed as @code{$1}. | |
1791 | ||
1792 | If the control variable in a @code{for} loop has the nameref attribute, | |
1793 | the list of words can be a list of shell variables, and a name reference | |
1794 | will be established for each word in the list, in turn, when the loop is | |
1795 | executed. | |
1796 | Array variables cannot be given the nameref attribute. | |
1797 | However, nameref variables can reference array variables and subscripted | |
1798 | array variables. | |
1799 | Namerefs can be unset using the @option{-n} option to the @code{unset} builtin | |
1800 | (@pxref{Bourne Shell Builtins}). | |
1801 | Otherwise, if @code{unset} is executed with the name of a nameref variable | |
1802 | as an argument, the variable referenced by the nameref variable will be unset. | |
1803 | ||
1804 | @node Positional Parameters | |
1805 | @subsection Positional Parameters | |
1806 | @cindex parameters, positional | |
1807 | ||
1808 | A @dfn{positional parameter} is a parameter denoted by one or more | |
1809 | digits, other than the single digit @code{0}. Positional parameters are | |
1810 | assigned from the shell's arguments when it is invoked, | |
1811 | and may be reassigned using the @code{set} builtin command. | |
1812 | Positional parameter @code{N} may be referenced as @code{$@{N@}}, or | |
1813 | as @code{$N} when @code{N} consists of a single digit. | |
1814 | Positional parameters may not be assigned to with assignment statements. | |
1815 | The @code{set} and @code{shift} builtins are used to set and | |
1816 | unset them (@pxref{Shell Builtin Commands}). | |
1817 | The positional parameters are | |
1818 | temporarily replaced when a shell function is executed | |
1819 | (@pxref{Shell Functions}). | |
1820 | ||
1821 | When a positional parameter consisting of more than a single | |
1822 | digit is expanded, it must be enclosed in braces. | |
1823 | ||
1824 | @node Special Parameters | |
1825 | @subsection Special Parameters | |
1826 | @cindex parameters, special | |
1827 | ||
1828 | The shell treats several parameters specially. These parameters may | |
1829 | only be referenced; assignment to them is not allowed. | |
1830 | ||
1831 | @vtable @code | |
1832 | ||
1833 | @item * | |
1834 | @vindex $* | |
1835 | ($*) Expands to the positional parameters, starting from one. | |
1836 | When the expansion is not within double quotes, each positional parameter | |
1837 | expands to a separate word. | |
1838 | In contexts where it is performed, those words | |
1839 | are subject to further word splitting and filename expansion. | |
1840 | When the expansion occurs within double quotes, it expands to a single word | |
1841 | with the value of each parameter separated by the first character of the | |
1842 | @env{IFS} special variable. That is, @code{"$*"} is equivalent | |
1843 | to @code{"$1@var{c}$2@var{c}@dots{}"}, where @var{c} | |
1844 | is the first character of the value of the @code{IFS} | |
1845 | variable. | |
1846 | If @env{IFS} is unset, the parameters are separated by spaces. | |
1847 | If @env{IFS} is null, the parameters are joined without intervening | |
1848 | separators. | |
1849 | ||
1850 | @item @@ | |
1851 | @vindex $@@ | |
1852 | ($@@) Expands to the positional parameters, starting from one. | |
1853 | In contexts where word splitting is performed, this expands each | |
1854 | positional parameter to a separate word; if not within double | |
1855 | quotes, these words are subject to word splitting. | |
1856 | In contexts where word splitting is not performed, | |
1857 | this expands to a single word | |
1858 | with each positional parameter separated by a space. | |
1859 | When the | |
1860 | expansion occurs within double quotes, and word splitting is performed, | |
1861 | each parameter expands to a | |
1862 | separate word. That is, @code{"$@@"} is equivalent to | |
1863 | @code{"$1" "$2" @dots{}}. | |
1864 | If the double-quoted expansion occurs within a word, the expansion of | |
1865 | the first parameter is joined with the beginning part of the original | |
1866 | word, and the expansion of the last parameter is joined with the last | |
1867 | part of the original word. | |
1868 | When there are no positional parameters, @code{"$@@"} and | |
1869 | @code{$@@} | |
1870 | expand to nothing (i.e., they are removed). | |
1871 | ||
1872 | @item # | |
1873 | @vindex $# | |
1874 | ($#) Expands to the number of positional parameters in decimal. | |
1875 | ||
1876 | @item ? | |
1877 | @vindex $? | |
1878 | ($?) Expands to the exit status of the most recently executed foreground | |
1879 | pipeline. | |
1880 | ||
1881 | @item - | |
1882 | @vindex $- | |
1883 | ($-, a hyphen.) Expands to the current option flags as specified upon | |
1884 | invocation, by the @code{set} | |
1885 | builtin command, or those set by the shell itself | |
1886 | (such as the @option{-i} option). | |
1887 | ||
1888 | @item $ | |
1889 | @vindex $$ | |
1890 | ($$) Expands to the process @sc{id} of the shell. In a subshell, it | |
1891 | expands to the process @sc{id} of the invoking shell, not the subshell. | |
1892 | ||
1893 | @item ! | |
1894 | @vindex $! | |
1895 | ($!) Expands to the process @sc{id} of the job most recently placed into the | |
1896 | background, whether executed as an asynchronous command or using | |
1897 | the @code{bg} builtin (@pxref{Job Control Builtins}). | |
1898 | ||
1899 | @item 0 | |
1900 | @vindex $0 | |
1901 | ($0) Expands to the name of the shell or shell script. This is set at | |
1902 | shell initialization. If Bash is invoked with a file of commands | |
1903 | (@pxref{Shell Scripts}), @code{$0} is set to the name of that file. | |
1904 | If Bash is started with the @option{-c} option (@pxref{Invoking Bash}), | |
1905 | then @code{$0} is set to the first argument after the string to be | |
1906 | executed, if one is present. Otherwise, it is set | |
1907 | to the filename used to invoke Bash, as given by argument zero. | |
1908 | @end vtable | |
1909 | ||
1910 | @node Shell Expansions | |
1911 | @section Shell Expansions | |
1912 | @cindex expansion | |
1913 | ||
1914 | Expansion is performed on the command line after it has been split into | |
1915 | @code{token}s. There are seven kinds of expansion performed: | |
1916 | ||
1917 | @itemize @bullet | |
1918 | @item brace expansion | |
1919 | @item tilde expansion | |
1920 | @item parameter and variable expansion | |
1921 | @item command substitution | |
1922 | @item arithmetic expansion | |
1923 | @item word splitting | |
1924 | @item filename expansion | |
1925 | @end itemize | |
1926 | ||
1927 | @menu | |
1928 | * Brace Expansion:: Expansion of expressions within braces. | |
1929 | * Tilde Expansion:: Expansion of the ~ character. | |
1930 | * Shell Parameter Expansion:: How Bash expands variables to their values. | |
1931 | * Command Substitution:: Using the output of a command as an argument. | |
1932 | * Arithmetic Expansion:: How to use arithmetic in shell expansions. | |
1933 | * Process Substitution:: A way to write and read to and from a | |
1934 | command. | |
1935 | * Word Splitting:: How the results of expansion are split into separate | |
1936 | arguments. | |
1937 | * Filename Expansion:: A shorthand for specifying filenames matching patterns. | |
1938 | * Quote Removal:: How and when quote characters are removed from | |
1939 | words. | |
1940 | @end menu | |
1941 | ||
1942 | The order of expansions is: | |
1943 | brace expansion; | |
1944 | tilde expansion, parameter and variable expansion, arithmetic expansion, | |
1945 | and command substitution (done in a left-to-right fashion); | |
1946 | word splitting; | |
1947 | and filename expansion. | |
1948 | ||
1949 | On systems that can support it, there is an additional expansion | |
1950 | available: @dfn{process substitution}. | |
1951 | This is performed at the | |
1952 | same time as tilde, parameter, variable, and arithmetic expansion and | |
1953 | command substitution. | |
1954 | ||
1955 | After these expansions are performed, quote characters present in the | |
1956 | original word are removed unless they have been quoted themselves | |
1957 | (@dfn{quote removal}). | |
1958 | ||
1959 | Only brace expansion, word splitting, and filename expansion | |
1960 | can increase the number of words of the expansion; other expansions | |
1961 | expand a single word to a single word. | |
1962 | The only exceptions to this are the expansions of | |
1963 | @code{"$@@"} and @code{$*} (@pxref{Special Parameters}), and | |
1964 | @code{"$@{@var{name}[@@]@}"} and @code{$@{@var{name}[*]@}} | |
1965 | (@pxref{Arrays}). | |
1966 | ||
1967 | After all expansions, @code{quote removal} (@pxref{Quote Removal}) | |
1968 | is performed. | |
1969 | ||
1970 | @node Brace Expansion | |
1971 | @subsection Brace Expansion | |
1972 | @cindex brace expansion | |
1973 | @cindex expansion, brace | |
1974 | ||
1975 | Brace expansion is a mechanism by which arbitrary strings may be generated. | |
1976 | This mechanism is similar to | |
1977 | @dfn{filename expansion} (@pxref{Filename Expansion}), | |
1978 | but the filenames generated need not exist. | |
1979 | Patterns to be brace expanded take the form of an optional @var{preamble}, | |
1980 | followed by either a series of comma-separated strings or a sequence expression | |
1981 | between a pair of braces, | |
1982 | followed by an optional @var{postscript}. | |
1983 | The preamble is prefixed to each string contained within the braces, and | |
1984 | the postscript is then appended to each resulting string, expanding left | |
1985 | to right. | |
1986 | ||
1987 | Brace expansions may be nested. | |
1988 | The results of each expanded string are not sorted; left to right order | |
1989 | is preserved. | |
1990 | For example, | |
1991 | @example | |
1992 | bash$ echo a@{d,c,b@}e | |
1993 | ade ace abe | |
1994 | @end example | |
1995 | ||
1996 | A sequence expression takes the form @code{@{@var{x}..@var{y}[..@var{incr}]@}}, | |
1997 | where @var{x} and @var{y} are either integers or letters, | |
1998 | and @var{incr}, an optional increment, is an integer. | |
1999 | When integers are supplied, the expression expands to each number between | |
2000 | @var{x} and @var{y}, inclusive. | |
2001 | Supplied integers may be prefixed with @samp{0} to force each term to have the | |
2002 | same width. | |
2003 | When either @var{x} or @var{y} begins with a zero, the shell | |
2004 | attempts to force all generated terms to contain the same number of digits, | |
2005 | zero-padding where necessary. | |
2006 | When letters are supplied, the expression expands to each character | |
2007 | lexicographically between @var{x} and @var{y}, inclusive, | |
2008 | using the default C locale. | |
2009 | Note that both @var{x} and @var{y} must be of the same type | |
2010 | (integer or letter). | |
2011 | When the increment is supplied, it is used as the difference between | |
2012 | each term. The default increment is 1 or -1 as appropriate. | |
2013 | ||
2014 | Brace expansion is performed before any other expansions, | |
2015 | and any characters special to other expansions are preserved | |
2016 | in the result. It is strictly textual. Bash | |
2017 | does not apply any syntactic interpretation to the context of the | |
2018 | expansion or the text between the braces. | |
2019 | ||
2020 | A correctly-formed brace expansion must contain unquoted opening | |
2021 | and closing braces, and at least one unquoted comma or a valid | |
2022 | sequence expression. | |
2023 | Any incorrectly formed brace expansion is left unchanged. | |
2024 | ||
2025 | A @{ or @samp{,} may be quoted with a backslash to prevent its | |
2026 | being considered part of a brace expression. | |
2027 | To avoid conflicts with parameter expansion, the string @samp{$@{} | |
2028 | is not considered eligible for brace expansion, | |
2029 | and inhibits brace expansion until the closing @samp{@}}. | |
2030 | ||
2031 | This construct is typically used as shorthand when the common | |
2032 | prefix of the strings to be generated is longer than in the | |
2033 | above example: | |
2034 | @example | |
2035 | mkdir /usr/local/src/bash/@{old,new,dist,bugs@} | |
2036 | @end example | |
2037 | or | |
2038 | @example | |
2039 | chown root /usr/@{ucb/@{ex,edit@},lib/@{ex?.?*,how_ex@}@} | |
2040 | @end example | |
2041 | ||
2042 | @node Tilde Expansion | |
2043 | @subsection Tilde Expansion | |
2044 | @cindex tilde expansion | |
2045 | @cindex expansion, tilde | |
2046 | ||
2047 | If a word begins with an unquoted tilde character (@samp{~}), all of the | |
2048 | characters up to the first unquoted slash (or all characters, | |
2049 | if there is no unquoted slash) are considered a @dfn{tilde-prefix}. | |
2050 | If none of the characters in the tilde-prefix are quoted, the | |
2051 | characters in the tilde-prefix following the tilde are treated as a | |
2052 | possible @dfn{login name}. | |
2053 | If this login name is the null string, the tilde is replaced with the | |
2054 | value of the @env{HOME} shell variable. | |
2055 | If @env{HOME} is unset, the home directory of the user executing the | |
2056 | shell is substituted instead. | |
2057 | Otherwise, the tilde-prefix is replaced with the home directory | |
2058 | associated with the specified login name. | |
2059 | ||
2060 | If the tilde-prefix is @samp{~+}, the value of | |
2061 | the shell variable @env{PWD} replaces the tilde-prefix. | |
2062 | If the tilde-prefix is @samp{~-}, the value of the shell variable | |
2063 | @env{OLDPWD}, if it is set, is substituted. | |
2064 | ||
2065 | If the characters following the tilde in the tilde-prefix consist of a | |
2066 | number @var{N}, optionally prefixed by a @samp{+} or a @samp{-}, | |
2067 | the tilde-prefix is replaced with the | |
2068 | corresponding element from the directory stack, as it would be displayed | |
2069 | by the @code{dirs} builtin invoked with the characters following tilde | |
2070 | in the tilde-prefix as an argument (@pxref{The Directory Stack}). | |
2071 | If the tilde-prefix, sans the tilde, consists of a number without a | |
2072 | leading @samp{+} or @samp{-}, @samp{+} is assumed. | |
2073 | ||
2074 | If the login name is invalid, or the tilde expansion fails, the word is | |
2075 | left unchanged. | |
2076 | ||
2077 | Each variable assignment is checked for unquoted tilde-prefixes immediately | |
2078 | following a @samp{:} or the first @samp{=}. | |
2079 | In these cases, tilde expansion is also performed. | |
2080 | Consequently, one may use filenames with tildes in assignments to | |
2081 | @env{PATH}, @env{MAILPATH}, and @env{CDPATH}, | |
2082 | and the shell assigns the expanded value. | |
2083 | ||
2084 | The following table shows how Bash treats unquoted tilde-prefixes: | |
2085 | ||
2086 | @table @code | |
2087 | @item ~ | |
2088 | The value of @code{$HOME} | |
2089 | @item ~/foo | |
2090 | @file{$HOME/foo} | |
2091 | ||
2092 | @item ~fred/foo | |
2093 | The subdirectory @code{foo} of the home directory of the user | |
2094 | @code{fred} | |
2095 | ||
2096 | @item ~+/foo | |
2097 | @file{$PWD/foo} | |
2098 | ||
2099 | @item ~-/foo | |
2100 | @file{$@{OLDPWD-'~-'@}/foo} | |
2101 | ||
2102 | @item ~@var{N} | |
2103 | The string that would be displayed by @samp{dirs +@var{N}} | |
2104 | ||
2105 | @item ~+@var{N} | |
2106 | The string that would be displayed by @samp{dirs +@var{N}} | |
2107 | ||
2108 | @item ~-@var{N} | |
2109 | The string that would be displayed by @samp{dirs -@var{N}} | |
2110 | @end table | |
2111 | ||
2112 | Bash also performs tilde expansion on words satisfying the conditions of | |
2113 | variable assignments (@pxref{Shell Parameters}) | |
2114 | when they appear as arguments to simple commands. | |
2115 | Bash does not do this, except for the declaration commands listed | |
2116 | above, when in @sc{posix} mode. | |
2117 | ||
2118 | @node Shell Parameter Expansion | |
2119 | @subsection Shell Parameter Expansion | |
2120 | @cindex parameter expansion | |
2121 | @cindex expansion, parameter | |
2122 | ||
2123 | The @samp{$} character introduces parameter expansion, | |
2124 | command substitution, or arithmetic expansion. The parameter name | |
2125 | or symbol to be expanded may be enclosed in braces, which | |
2126 | are optional but serve to protect the variable to be expanded from | |
2127 | characters immediately following it which could be | |
2128 | interpreted as part of the name. | |
2129 | ||
2130 | When braces are used, the matching ending brace is the first @samp{@}} | |
2131 | not escaped by a backslash or within a quoted string, and not within an | |
2132 | embedded arithmetic expansion, command substitution, or parameter | |
2133 | expansion. | |
2134 | ||
2135 | The basic form of parameter expansion is $@{@var{parameter}@}. | |
2136 | The value of @var{parameter} is substituted. | |
2137 | The @var{parameter} is a shell parameter as described above | |
2138 | (@pxref{Shell Parameters}) or an array reference (@pxref{Arrays}). | |
2139 | The braces are required when @var{parameter} | |
2140 | is a positional parameter with more than one digit, | |
2141 | or when @var{parameter} is followed by a character that is not to be | |
2142 | interpreted as part of its name. | |
2143 | ||
2144 | If the first character of @var{parameter} is an exclamation point (!), | |
2145 | and @var{parameter} is not a nameref, | |
2146 | it introduces a level of indirection. | |
2147 | Bash uses the value formed by expanding the rest of | |
2148 | @var{parameter} as the new @var{parameter}; this is then | |
2149 | expanded and that value is used in the rest of the expansion, rather | |
2150 | than the expansion of the original @var{parameter}. | |
2151 | This is known as @code{indirect expansion}. | |
2152 | The value is subject to tilde expansion, | |
2153 | parameter expansion, command substitution, and arithmetic expansion. | |
2154 | If @var{parameter} is a nameref, this expands to the name of the | |
2155 | variable referenced by @var{parameter} instead of performing the | |
2156 | complete indirect expansion. | |
2157 | The exceptions to this are the expansions of $@{!@var{prefix}*@} | |
2158 | and $@{!@var{name}[@@]@} | |
2159 | described below. | |
2160 | The exclamation point must immediately follow the left brace in order to | |
2161 | introduce indirection. | |
2162 | ||
2163 | In each of the cases below, @var{word} is subject to tilde expansion, | |
2164 | parameter expansion, command substitution, and arithmetic expansion. | |
2165 | ||
2166 | When not performing substring expansion, using the form described | |
2167 | below (e.g., @samp{:-}), Bash tests for a parameter that is unset or null. | |
2168 | Omitting the colon results in a test only for a parameter that is unset. | |
2169 | Put another way, if the colon is included, | |
2170 | the operator tests for both @var{parameter}'s existence and that its value | |
2171 | is not null; if the colon is omitted, the operator tests only for existence. | |
2172 | ||
2173 | @table @code | |
2174 | ||
2175 | @item $@{@var{parameter}:@minus{}@var{word}@} | |
2176 | If @var{parameter} is unset or null, the expansion of | |
2177 | @var{word} is substituted. Otherwise, the value of | |
2178 | @var{parameter} is substituted. | |
2179 | ||
2180 | @example | |
2181 | $ v=123 | |
2182 | $ echo $@{v-unset@} | |
2183 | 123 | |
2184 | @end example | |
2185 | ||
2186 | @item $@{@var{parameter}:=@var{word}@} | |
2187 | If @var{parameter} | |
2188 | is unset or null, the expansion of @var{word} | |
2189 | is assigned to @var{parameter}. | |
2190 | The value of @var{parameter} is then substituted. | |
2191 | Positional parameters and special parameters may not be assigned to | |
2192 | in this way. | |
2193 | ||
2194 | @example | |
2195 | $ var= | |
2196 | $ : $@{var:=DEFAULT@} | |
2197 | $ echo $var | |
2198 | DEFAULT | |
2199 | @end example | |
2200 | ||
2201 | @item $@{@var{parameter}:?@var{word}@} | |
2202 | If @var{parameter} | |
2203 | is null or unset, the expansion of @var{word} (or a message | |
2204 | to that effect if @var{word} | |
2205 | is not present) is written to the standard error and the shell, if it | |
2206 | is not interactive, exits. Otherwise, the value of @var{parameter} is | |
2207 | substituted. | |
2208 | ||
2209 | @example | |
2210 | $ var= | |
2211 | $ : $@{var:?var is unset or null@} | |
2212 | bash: var: var is unset or null | |
2213 | @end example | |
2214 | ||
2215 | @item $@{@var{parameter}:+@var{word}@} | |
2216 | If @var{parameter} | |
2217 | is null or unset, nothing is substituted, otherwise the expansion of | |
2218 | @var{word} is substituted. | |
2219 | ||
2220 | @example | |
2221 | $ var=123 | |
2222 | $ echo $@{var:+var is set and not null@} | |
2223 | var is set and not null | |
2224 | @end example | |
2225 | ||
2226 | @item $@{@var{parameter}:@var{offset}@} | |
2227 | @itemx $@{@var{parameter}:@var{offset}:@var{length}@} | |
2228 | This is referred to as Substring Expansion. | |
2229 | It expands to up to @var{length} characters of the value of @var{parameter} | |
2230 | starting at the character specified by @var{offset}. | |
2231 | If @var{parameter} is @samp{@@} or @samp{*}, an indexed array subscripted by | |
2232 | @samp{@@} or @samp{*}, or an associative array name, the results differ as | |
2233 | described below. | |
2234 | If @var{length} is omitted, it expands to the substring of the value of | |
2235 | @var{parameter} starting at the character specified by @var{offset} | |
2236 | and extending to the end of the value. | |
2237 | @var{length} and @var{offset} are arithmetic expressions | |
2238 | (@pxref{Shell Arithmetic}). | |
2239 | ||
2240 | If @var{offset} evaluates to a number less than zero, the value | |
2241 | is used as an offset in characters | |
2242 | from the end of the value of @var{parameter}. | |
2243 | If @var{length} evaluates to a number less than zero, | |
2244 | it is interpreted as an offset in characters | |
2245 | from the end of the value of @var{parameter} rather than | |
2246 | a number of characters, and the expansion is the characters between | |
2247 | @var{offset} and that result. | |
2248 | Note that a negative offset must be separated from the colon by at least | |
2249 | one space to avoid being confused with the @samp{:-} expansion. | |
2250 | ||
2251 | Here are some examples illustrating substring expansion on parameters and | |
2252 | subscripted arrays: | |
2253 | ||
2254 | @verbatim | |
2255 | $ string=01234567890abcdefgh | |
2256 | $ echo ${string:7} | |
2257 | 7890abcdefgh | |
2258 | $ echo ${string:7:0} | |
2259 | ||
2260 | $ echo ${string:7:2} | |
2261 | 78 | |
2262 | $ echo ${string:7:-2} | |
2263 | 7890abcdef | |
2264 | $ echo ${string: -7} | |
2265 | bcdefgh | |
2266 | $ echo ${string: -7:0} | |
2267 | ||
2268 | $ echo ${string: -7:2} | |
2269 | bc | |
2270 | $ echo ${string: -7:-2} | |
2271 | bcdef | |
2272 | $ set -- 01234567890abcdefgh | |
2273 | $ echo ${1:7} | |
2274 | 7890abcdefgh | |
2275 | $ echo ${1:7:0} | |
2276 | ||
2277 | $ echo ${1:7:2} | |
2278 | 78 | |
2279 | $ echo ${1:7:-2} | |
2280 | 7890abcdef | |
2281 | $ echo ${1: -7} | |
2282 | bcdefgh | |
2283 | $ echo ${1: -7:0} | |
2284 | ||
2285 | $ echo ${1: -7:2} | |
2286 | bc | |
2287 | $ echo ${1: -7:-2} | |
2288 | bcdef | |
2289 | $ array[0]=01234567890abcdefgh | |
2290 | $ echo ${array[0]:7} | |
2291 | 7890abcdefgh | |
2292 | $ echo ${array[0]:7:0} | |
2293 | ||
2294 | $ echo ${array[0]:7:2} | |
2295 | 78 | |
2296 | $ echo ${array[0]:7:-2} | |
2297 | 7890abcdef | |
2298 | $ echo ${array[0]: -7} | |
2299 | bcdefgh | |
2300 | $ echo ${array[0]: -7:0} | |
2301 | ||
2302 | $ echo ${array[0]: -7:2} | |
2303 | bc | |
2304 | $ echo ${array[0]: -7:-2} | |
2305 | bcdef | |
2306 | @end verbatim | |
2307 | ||
2308 | If @var{parameter} is @samp{@@} or @samp{*}, the result is @var{length} | |
2309 | positional parameters beginning at @var{offset}. | |
2310 | A negative @var{offset} is taken relative to one greater than the greatest | |
2311 | positional parameter, so an offset of -1 evaluates to the last positional | |
2312 | parameter. | |
2313 | It is an expansion error if @var{length} evaluates to a number less than zero. | |
2314 | ||
2315 | The following examples illustrate substring expansion using positional | |
2316 | parameters: | |
2317 | ||
2318 | @verbatim | |
2319 | $ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h | |
2320 | $ echo ${@:7} | |
2321 | 7 8 9 0 a b c d e f g h | |
2322 | $ echo ${@:7:0} | |
2323 | ||
2324 | $ echo ${@:7:2} | |
2325 | 7 8 | |
2326 | $ echo ${@:7:-2} | |
2327 | bash: -2: substring expression < 0 | |
2328 | $ echo ${@: -7:2} | |
2329 | b c | |
2330 | $ echo ${@:0} | |
2331 | ./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h | |
2332 | $ echo ${@:0:2} | |
2333 | ./bash 1 | |
2334 | $ echo ${@: -7:0} | |
2335 | ||
2336 | @end verbatim | |
2337 | ||
2338 | If @var{parameter} is an indexed array name subscripted | |
2339 | by @samp{@@} or @samp{*}, the result is the @var{length} | |
2340 | members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}. | |
2341 | A negative @var{offset} is taken relative to one greater than the maximum | |
2342 | index of the specified array. | |
2343 | It is an expansion error if @var{length} evaluates to a number less than zero. | |
2344 | ||
2345 | These examples show how you can use substring expansion with indexed | |
2346 | arrays: | |
2347 | ||
2348 | @verbatim | |
2349 | $ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h) | |
2350 | $ echo ${array[@]:7} | |
2351 | 7 8 9 0 a b c d e f g h | |
2352 | $ echo ${array[@]:7:2} | |
2353 | 7 8 | |
2354 | $ echo ${array[@]: -7:2} | |
2355 | b c | |
2356 | $ echo ${array[@]: -7:-2} | |
2357 | bash: -2: substring expression < 0 | |
2358 | $ echo ${array[@]:0} | |
2359 | 0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h | |
2360 | $ echo ${array[@]:0:2} | |
2361 | 0 1 | |
2362 | $ echo ${array[@]: -7:0} | |
2363 | ||
2364 | @end verbatim | |
2365 | ||
2366 | Substring expansion applied to an associative array produces undefined | |
2367 | results. | |
2368 | ||
2369 | Substring indexing is zero-based unless the positional parameters | |
2370 | are used, in which case the indexing starts at 1 by default. | |
2371 | If @var{offset} is 0, and the positional parameters are used, @code{$0} is | |
2372 | prefixed to the list. | |
2373 | ||
2374 | @item $@{!@var{prefix}*@} | |
2375 | @itemx $@{!@var{prefix}@@@} | |
2376 | Expands to the names of variables whose names begin with @var{prefix}, | |
2377 | separated by the first character of the @env{IFS} special variable. | |
2378 | When @samp{@@} is used and the expansion appears within double quotes, each | |
2379 | variable name expands to a separate word. | |
2380 | ||
2381 | @item $@{!@var{name}[@@]@} | |
2382 | @itemx $@{!@var{name}[*]@} | |
2383 | If @var{name} is an array variable, expands to the list of array indices | |
2384 | (keys) assigned in @var{name}. | |
2385 | If @var{name} is not an array, expands to 0 if @var{name} is set and null | |
2386 | otherwise. | |
2387 | When @samp{@@} is used and the expansion appears within double quotes, each | |
2388 | key expands to a separate word. | |
2389 | ||
2390 | @item $@{#@var{parameter}@} | |
2391 | The length in characters of the expanded value of @var{parameter} is | |
2392 | substituted. | |
2393 | If @var{parameter} is @samp{*} or @samp{@@}, the value substituted | |
2394 | is the number of positional parameters. | |
2395 | If @var{parameter} is an array name subscripted by @samp{*} or @samp{@@}, | |
2396 | the value substituted is the number of elements in the array. | |
2397 | If @var{parameter} | |
2398 | is an indexed array name subscripted by a negative number, that number is | |
2399 | interpreted as relative to one greater than the maximum index of | |
2400 | @var{parameter}, so negative indices count back from the end of the | |
2401 | array, and an index of -1 references the last element. | |
2402 | ||
2403 | @item $@{@var{parameter}#@var{word}@} | |
2404 | @itemx $@{@var{parameter}##@var{word}@} | |
2405 | The @var{word} | |
2406 | is expanded to produce a pattern and matched according to the rules | |
2407 | described below (@pxref{Pattern Matching}). If the pattern matches | |
2408 | the beginning of the expanded value of @var{parameter}, | |
2409 | then the result of the expansion is the expanded value of @var{parameter} | |
2410 | with the shortest matching pattern (the @samp{#} case) or the | |
2411 | longest matching pattern (the @samp{##} case) deleted. | |
2412 | If @var{parameter} is @samp{@@} or @samp{*}, | |
2413 | the pattern removal operation is applied to each positional | |
2414 | parameter in turn, and the expansion is the resultant list. | |
2415 | If @var{parameter} is an array variable subscripted with | |
2416 | @samp{@@} or @samp{*}, | |
2417 | the pattern removal operation is applied to each member of the | |
2418 | array in turn, and the expansion is the resultant list. | |
2419 | ||
2420 | @item $@{@var{parameter}%@var{word}@} | |
2421 | @itemx $@{@var{parameter}%%@var{word}@} | |
2422 | The @var{word} | |
2423 | is expanded to produce a pattern and matched according to the rules | |
2424 | described below (@pxref{Pattern Matching}). | |
2425 | If the pattern matches a trailing portion of the expanded value of | |
2426 | @var{parameter}, then the result of the expansion is the value of | |
2427 | @var{parameter} with the shortest matching pattern (the @samp{%} case) | |
2428 | or the longest matching pattern (the @samp{%%} case) deleted. | |
2429 | If @var{parameter} is @samp{@@} or @samp{*}, | |
2430 | the pattern removal operation is applied to each positional | |
2431 | parameter in turn, and the expansion is the resultant list. | |
2432 | If @var{parameter} | |
2433 | is an array variable subscripted with @samp{@@} or @samp{*}, | |
2434 | the pattern removal operation is applied to each member of the | |
2435 | array in turn, and the expansion is the resultant list. | |
2436 | ||
2437 | @item $@{@var{parameter}/@var{pattern}/@var{string}@} | |
2438 | @itemx $@{@var{parameter}//@var{pattern}/@var{string}@} | |
2439 | @itemx $@{@var{parameter}/#@var{pattern}/@var{string}@} | |
2440 | @itemx $@{@var{parameter}/%@var{pattern}/@var{string}@} | |
2441 | The @var{pattern} is expanded to produce a pattern just as in | |
2442 | filename expansion. | |
2443 | @var{Parameter} is expanded and the longest match of @var{pattern} | |
2444 | against its value is replaced with @var{string}. | |
2445 | @var{string} undergoes tilde expansion, parameter and variable expansion, | |
2446 | arithmetic expansion, command and process substitution, and quote removal. | |
2447 | The match is performed according to the rules described below | |
2448 | (@pxref{Pattern Matching}). | |
2449 | ||
2450 | In the first form above, only the first match is replaced. | |
2451 | If there are two slashes separating @var{parameter} and @var{pattern} | |
2452 | (the second form above), all matches of @var{pattern} are | |
2453 | replaced with @var{string}. | |
2454 | If @var{pattern} is preceded by @samp{#} (the third form above), | |
2455 | it must match at the beginning of the expanded value of @var{parameter}. | |
2456 | If @var{pattern} is preceded by @samp{%} (the fourth form above), | |
2457 | it must match at the end of the expanded value of @var{parameter}. | |
2458 | If the expansion of @var{string} is null, | |
2459 | matches of @var{pattern} are deleted. | |
2460 | If @var{string} is null, | |
2461 | matches of @var{pattern} are deleted | |
2462 | and the @samp{/} following @var{pattern} may be omitted. | |
2463 | ||
2464 | If the @code{patsub_replacement} shell option is enabled using @code{shopt}, | |
2465 | any unquoted instances of @samp{&} in @var{string} are replaced with the | |
2466 | matching portion of @var{pattern}. | |
2467 | This is intended to duplicate a common @code{sed} idiom. | |
2468 | ||
2469 | Quoting any part of @var{string} inhibits replacement in the | |
2470 | expansion of the quoted portion, including replacement strings stored | |
2471 | in shell variables. | |
2472 | Backslash will escape @samp{&} in @var{string}; the backslash is removed | |
2473 | in order to permit a literal @samp{&} in the replacement string. | |
2474 | Users should take care if @var{string} is double-quoted to avoid | |
2475 | unwanted interactions between the backslash and double-quoting, since | |
2476 | backslash has special meaning within double quotes. | |
2477 | Pattern substitution performs the check for unquoted @samp{&} after | |
2478 | expanding @var{string}, | |
2479 | so users should ensure to properly quote any occurrences of @samp{&} | |
2480 | they want to be taken literally in the replacement | |
2481 | and ensure any instances of @samp{&} they want to be replaced are unquoted. | |
2482 | ||
2483 | For instance, | |
2484 | ||
2485 | @example | |
2486 | var=abcdef | |
2487 | rep='& ' | |
2488 | echo $@{var/abc/& @} | |
2489 | echo "$@{var/abc/& @}" | |
2490 | echo $@{var/abc/$rep@} | |
2491 | echo "$@{var/abc/$rep@}" | |
2492 | @end example | |
2493 | ||
2494 | @noindent | |
2495 | will display four lines of "abc def", while | |
2496 | ||
2497 | @example | |
2498 | var=abcdef | |
2499 | rep='& ' | |
2500 | echo $@{var/abc/\& @} | |
2501 | echo "$@{var/abc/\& @}" | |
2502 | echo $@{var/abc/"& "@} | |
2503 | echo $@{var/abc/"$rep"@} | |
2504 | @end example | |
2505 | ||
2506 | @noindent | |
2507 | will display four lines of "& def". | |
2508 | Like the pattern removal operators, double quotes surrounding the | |
2509 | replacement string quote the expanded characters, while double quotes | |
2510 | enclosing the entire parameter substitution do not, since | |
2511 | the expansion is performed in a | |
2512 | context that doesn't take any enclosing double quotes into account. | |
2513 | ||
2514 | Since backslash can escape @samp{&}, it can also escape a backslash in | |
2515 | the replacement string. | |
2516 | This means that @samp{\\} will insert a literal | |
2517 | backslash into the replacement, so these two @code{echo} commands | |
2518 | ||
2519 | @example | |
2520 | var=abcdef | |
2521 | rep='\\&xyz' | |
2522 | echo $@{var/abc/\\&xyz@} | |
2523 | echo $@{var/abc/$rep@} | |
2524 | @end example | |
2525 | ||
2526 | @noindent | |
2527 | will both output @samp{\abcxyzdef}. | |
2528 | ||
2529 | It should rarely be necessary to enclose only @var{string} in double | |
2530 | quotes. | |
2531 | ||
2532 | If the @code{nocasematch} shell option | |
2533 | (see the description of @code{shopt} in @ref{The Shopt Builtin}) | |
2534 | is enabled, the match is performed without regard to the case | |
2535 | of alphabetic characters. | |
2536 | If @var{parameter} is @samp{@@} or @samp{*}, | |
2537 | the substitution operation is applied to each positional | |
2538 | parameter in turn, and the expansion is the resultant list. | |
2539 | If @var{parameter} | |
2540 | is an array variable subscripted with @samp{@@} or @samp{*}, | |
2541 | the substitution operation is applied to each member of the | |
2542 | array in turn, and the expansion is the resultant list. | |
2543 | ||
2544 | @item $@{@var{parameter}^@var{pattern}@} | |
2545 | @itemx $@{@var{parameter}^^@var{pattern}@} | |
2546 | @itemx $@{@var{parameter},@var{pattern}@} | |
2547 | @itemx $@{@var{parameter},,@var{pattern}@} | |
2548 | This expansion modifies the case of alphabetic characters in @var{parameter}. | |
2549 | The @var{pattern} is expanded to produce a pattern just as in | |
2550 | filename expansion. | |
2551 | Each character in the expanded value of @var{parameter} is tested against | |
2552 | @var{pattern}, and, if it matches the pattern, its case is converted. | |
2553 | The pattern should not attempt to match more than one character. | |
2554 | ||
2555 | The @samp{^} operator converts lowercase letters matching @var{pattern} | |
2556 | to uppercase; the @samp{,} operator converts matching uppercase letters | |
2557 | to lowercase. | |
2558 | The @samp{^^} and @samp{,,} expansions convert each matched character in the | |
2559 | expanded value; the @samp{^} and @samp{,} expansions match and convert only | |
2560 | the first character in the expanded value. | |
2561 | If @var{pattern} is omitted, it is treated like a @samp{?}, which matches | |
2562 | every character. | |
2563 | ||
2564 | If @var{parameter} is @samp{@@} or @samp{*}, | |
2565 | the case modification operation is applied to each positional | |
2566 | parameter in turn, and the expansion is the resultant list. | |
2567 | If @var{parameter} | |
2568 | is an array variable subscripted with @samp{@@} or @samp{*}, | |
2569 | the case modification operation is applied to each member of the | |
2570 | array in turn, and the expansion is the resultant list. | |
2571 | ||
2572 | @item $@{@var{parameter}@@@var{operator}@} | |
2573 | The expansion is either a transformation of the value of @var{parameter} | |
2574 | or information about @var{parameter} itself, depending on the value of | |
2575 | @var{operator}. Each @var{operator} is a single letter: | |
2576 | ||
2577 | @table @code | |
2578 | @item U | |
2579 | The expansion is a string that is the value of @var{parameter} with lowercase | |
2580 | alphabetic characters converted to uppercase. | |
2581 | @item u | |
2582 | The expansion is a string that is the value of @var{parameter} with the first | |
2583 | character converted to uppercase, if it is alphabetic. | |
2584 | @item L | |
2585 | The expansion is a string that is the value of @var{parameter} with uppercase | |
2586 | alphabetic characters converted to lowercase. | |
2587 | @item Q | |
2588 | The expansion is a string that is the value of @var{parameter} quoted in a | |
2589 | format that can be reused as input. | |
2590 | @item E | |
2591 | The expansion is a string that is the value of @var{parameter} with backslash | |
2592 | escape sequences expanded as with the @code{$'@dots{}'} quoting mechanism. | |
2593 | @item P | |
2594 | The expansion is a string that is the result of expanding the value of | |
2595 | @var{parameter} as if it were a prompt string (@pxref{Controlling the Prompt}). | |
2596 | @item A | |
2597 | The expansion is a string in the form of | |
2598 | an assignment statement or @code{declare} command that, if | |
2599 | evaluated, will recreate @var{parameter} with its attributes and value. | |
2600 | @item K | |
2601 | Produces a possibly-quoted version of the value of @var{parameter}, | |
2602 | except that it prints the values of | |
2603 | indexed and associative arrays as a sequence of quoted key-value pairs | |
2604 | (@pxref{Arrays}). | |
2605 | @item a | |
2606 | The expansion is a string consisting of flag values representing | |
2607 | @var{parameter}'s attributes. | |
2608 | @item k | |
2609 | Like the @samp{K} transformation, but expands the keys and values of | |
2610 | indexed and associative arrays to separate words after word splitting. | |
2611 | @end table | |
2612 | ||
2613 | If @var{parameter} is @samp{@@} or @samp{*}, | |
2614 | the operation is applied to each positional | |
2615 | parameter in turn, and the expansion is the resultant list. | |
2616 | If @var{parameter} | |
2617 | is an array variable subscripted with @samp{@@} or @samp{*}, | |
2618 | the operation is applied to each member of the | |
2619 | array in turn, and the expansion is the resultant list. | |
2620 | ||
2621 | The result of the expansion is subject to word splitting and filename | |
2622 | expansion as described below. | |
2623 | @end table | |
2624 | ||
2625 | @node Command Substitution | |
2626 | @subsection Command Substitution | |
2627 | @cindex command substitution | |
2628 | ||
2629 | Command substitution allows the output of a command to replace | |
2630 | the command itself. | |
2631 | Command substitution occurs when a command is enclosed as follows: | |
2632 | @example | |
2633 | $(@var{command}) | |
2634 | @end example | |
2635 | @noindent | |
2636 | or | |
2637 | @example | |
2638 | `@var{command}` | |
2639 | @end example | |
2640 | ||
2641 | @noindent | |
2642 | Bash performs the expansion by executing @var{command} in a subshell environment | |
2643 | and replacing the command substitution with the standard output of the | |
2644 | command, with any trailing newlines deleted. | |
2645 | Embedded newlines are not deleted, but they may be removed during | |
2646 | word splitting. | |
2647 | The command substitution @code{$(cat @var{file})} can be | |
2648 | replaced by the equivalent but faster @code{$(< @var{file})}. | |
2649 | ||
2650 | When the old-style backquote form of substitution is used, | |
2651 | backslash retains its literal meaning except when followed by | |
2652 | @samp{$}, @samp{`}, or @samp{\}. | |
2653 | The first backquote not preceded by a backslash terminates the | |
2654 | command substitution. | |
2655 | When using the @code{$(@var{command})} form, all characters between | |
2656 | the parentheses make up the command; none are treated specially. | |
2657 | ||
2658 | Command substitutions may be nested. To nest when using the backquoted | |
2659 | form, escape the inner backquotes with backslashes. | |
2660 | ||
2661 | If the substitution appears within double quotes, word splitting and | |
2662 | filename expansion are not performed on the results. | |
2663 | ||
2664 | @node Arithmetic Expansion | |
2665 | @subsection Arithmetic Expansion | |
2666 | @cindex expansion, arithmetic | |
2667 | @cindex arithmetic expansion | |
2668 | ||
2669 | Arithmetic expansion allows the evaluation of an arithmetic expression | |
2670 | and the substitution of the result. The format for arithmetic expansion is: | |
2671 | ||
2672 | @example | |
2673 | $(( @var{expression} )) | |
2674 | @end example | |
2675 | ||
2676 | The @var{expression} undergoes the same expansions | |
2677 | as if it were within double quotes, | |
2678 | but double quote characters in @var{expression} are not treated specially | |
2679 | and are removed. | |
2680 | All tokens in the expression undergo parameter and variable expansion, | |
2681 | command substitution, and quote removal. | |
2682 | The result is treated as the arithmetic expression to be evaluated. | |
2683 | Arithmetic expansions may be nested. | |
2684 | ||
2685 | The evaluation is performed according to the rules listed below | |
2686 | (@pxref{Shell Arithmetic}). | |
2687 | If the expression is invalid, Bash prints a message indicating | |
2688 | failure to the standard error and no substitution occurs. | |
2689 | ||
2690 | @node Process Substitution | |
2691 | @subsection Process Substitution | |
2692 | @cindex process substitution | |
2693 | ||
2694 | Process substitution allows a process's input or output to be | |
2695 | referred to using a filename. | |
2696 | It takes the form of | |
2697 | @example | |
2698 | <(@var{list}) | |
2699 | @end example | |
2700 | @noindent | |
2701 | or | |
2702 | @example | |
2703 | >(@var{list}) | |
2704 | @end example | |
2705 | @noindent | |
2706 | The process @var{list} is run asynchronously, and its input or output | |
2707 | appears as a filename. | |
2708 | This filename is | |
2709 | passed as an argument to the current command as the result of the | |
2710 | expansion. | |
2711 | If the @code{>(@var{list})} form is used, writing to | |
2712 | the file will provide input for @var{list}. If the | |
2713 | @code{<(@var{list})} form is used, the file passed as an | |
2714 | argument should be read to obtain the output of @var{list}. | |
2715 | Note that no space may appear between the @code{<} or @code{>} | |
2716 | and the left parenthesis, otherwise the construct would be interpreted | |
2717 | as a redirection. | |
2718 | Process substitution is supported on systems that support named | |
2719 | pipes (@sc{fifo}s) or the @file{/dev/fd} method of naming open files. | |
2720 | ||
2721 | When available, process substitution is performed simultaneously with | |
2722 | parameter and variable expansion, command substitution, and arithmetic | |
2723 | expansion. | |
2724 | ||
2725 | @node Word Splitting | |
2726 | @subsection Word Splitting | |
2727 | @cindex word splitting | |
2728 | ||
2729 | The shell scans the results of parameter expansion, command substitution, | |
2730 | and arithmetic expansion that did not occur within double quotes for | |
2731 | word splitting. | |
2732 | ||
2733 | The shell treats each character of @env{$IFS} as a delimiter, and splits | |
2734 | the results of the other expansions into words using these characters | |
2735 | as field terminators. | |
2736 | If @env{IFS} is unset, or its value is exactly @code{<space><tab><newline>}, | |
2737 | the default, then sequences of | |
2738 | @code{ <space>}, @code{<tab>}, and @code{<newline>} | |
2739 | at the beginning and end of the results of the previous | |
2740 | expansions are ignored, and any sequence of @env{IFS} | |
2741 | characters not at the beginning or end serves to delimit words. | |
2742 | If @env{IFS} has a value other than the default, then sequences of | |
2743 | the whitespace characters @code{space}, @code{tab}, and @code{newline} | |
2744 | are ignored at the beginning and end of the | |
2745 | word, as long as the whitespace character is in the | |
2746 | value of @env{IFS} (an @env{IFS} whitespace character). | |
2747 | Any character in @env{IFS} that is not @env{IFS} | |
2748 | whitespace, along with any adjacent @env{IFS} | |
2749 | whitespace characters, delimits a field. A sequence of @env{IFS} | |
2750 | whitespace characters is also treated as a delimiter. | |
2751 | If the value of @env{IFS} is null, no word splitting occurs. | |
2752 | ||
2753 | Explicit null arguments (@code{""} or @code{''}) are retained | |
2754 | and passed to commands as empty strings. | |
2755 | Unquoted implicit null arguments, resulting from the expansion of | |
2756 | parameters that have no values, are removed. | |
2757 | If a parameter with no value is expanded within double quotes, a | |
2758 | null argument results and is retained | |
2759 | and passed to a command as an empty string. | |
2760 | When a quoted null argument appears as part of a word whose expansion is | |
2761 | non-null, the null argument is removed. | |
2762 | That is, the word | |
2763 | @code{-d''} becomes @code{-d} after word splitting and | |
2764 | null argument removal. | |
2765 | ||
2766 | Note that if no expansion occurs, no splitting | |
2767 | is performed. | |
2768 | ||
2769 | @node Filename Expansion | |
2770 | @subsection Filename Expansion | |
2771 | @menu | |
2772 | * Pattern Matching:: How the shell matches patterns. | |
2773 | @end menu | |
2774 | @cindex expansion, filename | |
2775 | @cindex expansion, pathname | |
2776 | @cindex filename expansion | |
2777 | @cindex pathname expansion | |
2778 | ||
2779 | After word splitting, unless the @option{-f} option has been set | |
2780 | (@pxref{The Set Builtin}), Bash scans each word for the characters | |
2781 | @samp{*}, @samp{?}, and @samp{[}. | |
2782 | If one of these characters appears, and is not quoted, then the word is | |
2783 | regarded as a @var{pattern}, | |
2784 | and replaced with an alphabetically sorted list of | |
2785 | filenames matching the pattern (@pxref{Pattern Matching}). | |
2786 | If no matching filenames are found, | |
2787 | and the shell option @code{nullglob} is disabled, the word is left | |
2788 | unchanged. | |
2789 | If the @code{nullglob} option is set, and no matches are found, the word | |
2790 | is removed. | |
2791 | If the @code{failglob} shell option is set, and no matches are found, | |
2792 | an error message is printed and the command is not executed. | |
2793 | If the shell option @code{nocaseglob} is enabled, the match is performed | |
2794 | without regard to the case of alphabetic characters. | |
2795 | ||
2796 | When a pattern is used for filename expansion, the character @samp{.} | |
2797 | at the start of a filename or immediately following a slash | |
2798 | must be matched explicitly, unless the shell option @code{dotglob} is set. | |
2799 | In order to match the filenames @samp{.} and @samp{..}, | |
2800 | the pattern must begin with @samp{.} (for example, @samp{.?}), | |
2801 | even if @code{dotglob} is set. | |
2802 | If the @code{globskipdots} shell option is enabled, the filenames | |
2803 | @samp{.} and @samp{..} are never matched, even if the pattern begins | |
2804 | with a @samp{.}. | |
2805 | When not matching filenames, the @samp{.} character is not treated specially. | |
2806 | ||
2807 | When matching a filename, the slash character must always be | |
2808 | matched explicitly by a slash in the pattern, but in other matching | |
2809 | contexts it can be matched by a special pattern character as described | |
2810 | below (@pxref{Pattern Matching}). | |
2811 | ||
2812 | See the description of @code{shopt} in @ref{The Shopt Builtin}, | |
2813 | for a description of the @code{nocaseglob}, @code{nullglob}, | |
2814 | @code{globskipdots}, | |
2815 | @code{failglob}, and @code{dotglob} options. | |
2816 | ||
2817 | The @env{GLOBIGNORE} | |
2818 | shell variable may be used to restrict the set of file names matching a | |
2819 | pattern. If @env{GLOBIGNORE} | |
2820 | is set, each matching file name that also matches one of the patterns in | |
2821 | @env{GLOBIGNORE} is removed from the list of matches. | |
2822 | If the @code{nocaseglob} option is set, the matching against the patterns in | |
2823 | @env{GLOBIGNORE} is performed without regard to case. | |
2824 | The filenames | |
2825 | @file{.} and @file{..} | |
2826 | are always ignored when @env{GLOBIGNORE} | |
2827 | is set and not null. | |
2828 | However, setting @env{GLOBIGNORE} to a non-null value has the effect of | |
2829 | enabling the @code{dotglob} | |
2830 | shell option, so all other filenames beginning with a | |
2831 | @samp{.} will match. | |
2832 | To get the old behavior of ignoring filenames beginning with a | |
2833 | @samp{.}, make @samp{.*} one of the patterns in @env{GLOBIGNORE}. | |
2834 | The @code{dotglob} option is disabled when @env{GLOBIGNORE} | |
2835 | is unset. | |
2836 | ||
2837 | @node Pattern Matching | |
2838 | @subsubsection Pattern Matching | |
2839 | @cindex pattern matching | |
2840 | @cindex matching, pattern | |
2841 | ||
2842 | Any character that appears in a pattern, other than the special pattern | |
2843 | characters described below, matches itself. | |
2844 | The @sc{nul} character may not occur in a pattern. | |
2845 | A backslash escapes the following character; the | |
2846 | escaping backslash is discarded when matching. | |
2847 | The special pattern characters must be quoted if they are to be matched | |
2848 | literally. | |
2849 | ||
2850 | The special pattern characters have the following meanings: | |
2851 | @table @code | |
2852 | @item * | |
2853 | Matches any string, including the null string. | |
2854 | When the @code{globstar} shell option is enabled, and @samp{*} is used in | |
2855 | a filename expansion context, two adjacent @samp{*}s used as a single | |
2856 | pattern will match all files and zero or more directories and | |
2857 | subdirectories. | |
2858 | If followed by a @samp{/}, two adjacent @samp{*}s will match only | |
2859 | directories and subdirectories. | |
2860 | @item ? | |
2861 | Matches any single character. | |
2862 | @item [@dots{}] | |
2863 | Matches any one of the enclosed characters. A pair of characters | |
2864 | separated by a hyphen denotes a @var{range expression}; | |
2865 | any character that falls between those two characters, inclusive, | |
2866 | using the current locale's collating sequence and character set, | |
2867 | is matched. If the first character following the | |
2868 | @samp{[} is a @samp{!} or a @samp{^} | |
2869 | then any character not enclosed is matched. A @samp{@minus{}} | |
2870 | may be matched by including it as the first or last character | |
2871 | in the set. A @samp{]} may be matched by including it as the first | |
2872 | character in the set. | |
2873 | The sorting order of characters in range expressions, | |
2874 | and the characters included in the range, | |
2875 | are determined by | |
2876 | the current locale and the values of the | |
2877 | @env{LC_COLLATE} and @env{LC_ALL} shell variables, if set. | |
2878 | ||
2879 | For example, in the default C locale, @samp{[a-dx-z]} is equivalent to | |
2880 | @samp{[abcdxyz]}. Many locales sort characters in dictionary order, and in | |
2881 | these locales @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]}; | |
2882 | it might be equivalent to @samp{[aBbCcDdxYyZz]}, for example. To obtain | |
2883 | the traditional interpretation of ranges in bracket expressions, you can | |
2884 | force the use of the C locale by setting the @env{LC_COLLATE} or | |
2885 | @env{LC_ALL} environment variable to the value @samp{C}, or enable the | |
2886 | @code{globasciiranges} shell option. | |
2887 | ||
2888 | Within @samp{[} and @samp{]}, @dfn{character classes} can be specified | |
2889 | using the syntax | |
2890 | @code{[:}@var{class}@code{:]}, where @var{class} is one of the | |
2891 | following classes defined in the @sc{posix} standard: | |
2892 | @example | |
2893 | alnum alpha ascii blank cntrl digit graph lower | |
2894 | print punct space upper word xdigit | |
2895 | @end example | |
2896 | @noindent | |
2897 | A character class matches any character belonging to that class. | |
2898 | The @code{word} character class matches letters, digits, and the character | |
2899 | @samp{_}. | |
2900 | ||
2901 | Within @samp{[} and @samp{]}, an @dfn{equivalence class} can be | |
2902 | specified using the syntax @code{[=}@var{c}@code{=]}, which | |
2903 | matches all characters with the same collation weight (as defined | |
2904 | by the current locale) as the character @var{c}. | |
2905 | ||
2906 | Within @samp{[} and @samp{]}, the syntax @code{[.}@var{symbol}@code{.]} | |
2907 | matches the collating symbol @var{symbol}. | |
2908 | @end table | |
2909 | ||
2910 | If the @code{extglob} shell option is enabled using the @code{shopt} | |
2911 | builtin, the shell recognizes several extended pattern matching operators. | |
2912 | In the following description, a @var{pattern-list} is a list of one | |
2913 | or more patterns separated by a @samp{|}. | |
2914 | When matching filenames, the @code{dotglob} shell option determines | |
2915 | the set of filenames that are tested, as described above. | |
2916 | Composite patterns may be formed using one or more of the following | |
2917 | sub-patterns: | |
2918 | ||
2919 | @table @code | |
2920 | @item ?(@var{pattern-list}) | |
2921 | Matches zero or one occurrence of the given patterns. | |
2922 | ||
2923 | @item *(@var{pattern-list}) | |
2924 | Matches zero or more occurrences of the given patterns. | |
2925 | ||
2926 | @item +(@var{pattern-list}) | |
2927 | Matches one or more occurrences of the given patterns. | |
2928 | ||
2929 | @item @@(@var{pattern-list}) | |
2930 | Matches one of the given patterns. | |
2931 | ||
2932 | @item !(@var{pattern-list}) | |
2933 | Matches anything except one of the given patterns. | |
2934 | @end table | |
2935 | ||
2936 | The @code{extglob} option changes the behavior of the parser, since the | |
2937 | parentheses are normally treated as operators with syntactic meaning. | |
2938 | To ensure that extended matching patterns are parsed correctly, make sure | |
2939 | that @code{extglob} is enabled before parsing constructs containing the | |
2940 | patterns, including shell functions and command substitutions. | |
2941 | ||
2942 | When matching filenames, the @code{dotglob} shell option determines | |
2943 | the set of filenames that are tested: | |
2944 | when @code{dotglob} is enabled, the set of filenames includes all files | |
2945 | beginning with @samp{.}, but the filenames | |
2946 | @samp{.} and @samp{..} must be matched by a | |
2947 | pattern or sub-pattern that begins with a dot; | |
2948 | when it is disabled, the set does not | |
2949 | include any filenames beginning with ``.'' unless the pattern | |
2950 | or sub-pattern begins with a @samp{.}. | |
2951 | As above, @samp{.} only has a special meaning when matching filenames. | |
2952 | ||
2953 | Complicated extended pattern matching against long strings is slow, | |
2954 | especially when the patterns contain alternations and the strings | |
2955 | contain multiple matches. | |
2956 | Using separate matches against shorter strings, or using arrays of | |
2957 | strings instead of a single long string, may be faster. | |
2958 | ||
2959 | @node Quote Removal | |
2960 | @subsection Quote Removal | |
2961 | ||
2962 | After the preceding expansions, all unquoted occurrences of the | |
2963 | characters @samp{\}, @samp{'}, and @samp{"} that did not | |
2964 | result from one of the above expansions are removed. | |
2965 | ||
2966 | @node Redirections | |
2967 | @section Redirections | |
2968 | @cindex redirection | |
2969 | ||
2970 | Before a command is executed, its input and output | |
2971 | may be @dfn{redirected} | |
2972 | using a special notation interpreted by the shell. | |
2973 | @dfn{Redirection} allows commands' file handles to be | |
2974 | duplicated, opened, closed, | |
2975 | made to refer to different files, | |
2976 | and can change the files the command reads from and writes to. | |
2977 | Redirection may also be used to modify file handles in the | |
2978 | current shell execution environment. The following redirection | |
2979 | operators may precede or appear anywhere within a | |
2980 | simple command or may follow a command. | |
2981 | Redirections are processed in the order they appear, from | |
2982 | left to right. | |
2983 | ||
2984 | Each redirection that may be preceded by a file descriptor number | |
2985 | may instead be preceded by a word of the form @{@var{varname}@}. | |
2986 | In this case, for each redirection operator except | |
2987 | >&- and <&-, the shell will allocate a file descriptor greater | |
2988 | than 10 and assign it to @{@var{varname}@}. If >&- or <&- is preceded | |
2989 | by @{@var{varname}@}, the value of @var{varname} defines the file | |
2990 | descriptor to close. | |
2991 | If @{@var{varname}@} is supplied, the redirection persists beyond | |
2992 | the scope of the command, allowing the shell programmer to manage | |
2993 | the file descriptor's lifetime manually. | |
2994 | The @code{varredir_close} shell option manages this behavior | |
2995 | (@pxref{The Shopt Builtin}). | |
2996 | ||
2997 | In the following descriptions, if the file descriptor number is | |
2998 | omitted, and the first character of the redirection operator is | |
2999 | @samp{<}, the redirection refers to the standard input (file | |
3000 | descriptor 0). If the first character of the redirection operator | |
3001 | is @samp{>}, the redirection refers to the standard output (file | |
3002 | descriptor 1). | |
3003 | ||
3004 | The word following the redirection operator in the following | |
3005 | descriptions, unless otherwise noted, is subjected to brace expansion, | |
3006 | tilde expansion, parameter expansion, command substitution, arithmetic | |
3007 | expansion, quote removal, filename expansion, and word splitting. | |
3008 | If it expands to more than one word, Bash reports an error. | |
3009 | ||
3010 | Note that the order of redirections is significant. For example, | |
3011 | the command | |
3012 | @example | |
3013 | ls > @var{dirlist} 2>&1 | |
3014 | @end example | |
3015 | @noindent | |
3016 | directs both standard output (file descriptor 1) and standard error | |
3017 | (file descriptor 2) to the file @var{dirlist}, while the command | |
3018 | @example | |
3019 | ls 2>&1 > @var{dirlist} | |
3020 | @end example | |
3021 | @noindent | |
3022 | directs only the standard output to file @var{dirlist}, | |
3023 | because the standard error was made a copy of the standard output | |
3024 | before the standard output was redirected to @var{dirlist}. | |
3025 | ||
3026 | Bash handles several filenames specially when they are used in | |
3027 | redirections, as described in the following table. | |
3028 | If the operating system on which Bash is running provides these | |
3029 | special files, bash will use them; otherwise it will emulate them | |
3030 | internally with the behavior described below. | |
3031 | ||
3032 | @table @code | |
3033 | @item /dev/fd/@var{fd} | |
3034 | If @var{fd} is a valid integer, file descriptor @var{fd} is duplicated. | |
3035 | ||
3036 | @item /dev/stdin | |
3037 | File descriptor 0 is duplicated. | |
3038 | ||
3039 | @item /dev/stdout | |
3040 | File descriptor 1 is duplicated. | |
3041 | ||
3042 | @item /dev/stderr | |
3043 | File descriptor 2 is duplicated. | |
3044 | ||
3045 | @item /dev/tcp/@var{host}/@var{port} | |
3046 | If @var{host} is a valid hostname or Internet address, and @var{port} | |
3047 | is an integer port number or service name, Bash attempts to open | |
3048 | the corresponding TCP socket. | |
3049 | ||
3050 | @item /dev/udp/@var{host}/@var{port} | |
3051 | If @var{host} is a valid hostname or Internet address, and @var{port} | |
3052 | is an integer port number or service name, Bash attempts to open | |
3053 | the corresponding UDP socket. | |
3054 | @end table | |
3055 | ||
3056 | A failure to open or create a file causes the redirection to fail. | |
3057 | ||
3058 | Redirections using file descriptors greater than 9 should be used with | |
3059 | care, as they may conflict with file descriptors the shell uses | |
3060 | internally. | |
3061 | ||
3062 | @subsection Redirecting Input | |
3063 | Redirection of input causes the file whose name results from | |
3064 | the expansion of @var{word} | |
3065 | to be opened for reading on file descriptor @code{n}, | |
3066 | or the standard input (file descriptor 0) if @code{n} | |
3067 | is not specified. | |
3068 | ||
3069 | The general format for redirecting input is: | |
3070 | @example | |
3071 | [@var{n}]<@var{word} | |
3072 | @end example | |
3073 | ||
3074 | @subsection Redirecting Output | |
3075 | Redirection of output causes the file whose name results from | |
3076 | the expansion of @var{word} | |
3077 | to be opened for writing on file descriptor @var{n}, | |
3078 | or the standard output (file descriptor 1) if @var{n} | |
3079 | is not specified. If the file does not exist it is created; | |
3080 | if it does exist it is truncated to zero size. | |
3081 | ||
3082 | The general format for redirecting output is: | |
3083 | @example | |
3084 | [@var{n}]>[|]@var{word} | |
3085 | @end example | |
3086 | ||
3087 | If the redirection operator is @samp{>}, and the @code{noclobber} | |
3088 | option to the @code{set} builtin has been enabled, the redirection | |
3089 | will fail if the file whose name results from the expansion of | |
3090 | @var{word} exists and is a regular file. | |
3091 | If the redirection operator is @samp{>|}, or the redirection operator is | |
3092 | @samp{>} and the @code{noclobber} option is not enabled, the redirection | |
3093 | is attempted even if the file named by @var{word} exists. | |
3094 | ||
3095 | @subsection Appending Redirected Output | |
3096 | Redirection of output in this fashion | |
3097 | causes the file whose name results from | |
3098 | the expansion of @var{word} | |
3099 | to be opened for appending on file descriptor @var{n}, | |
3100 | or the standard output (file descriptor 1) if @var{n} | |
3101 | is not specified. If the file does not exist it is created. | |
3102 | ||
3103 | The general format for appending output is: | |
3104 | @example | |
3105 | [@var{n}]>>@var{word} | |
3106 | @end example | |
3107 | ||
3108 | @subsection Redirecting Standard Output and Standard Error | |
3109 | This construct allows both the | |
3110 | standard output (file descriptor 1) and | |
3111 | the standard error output (file descriptor 2) | |
3112 | to be redirected to the file whose name is the | |
3113 | expansion of @var{word}. | |
3114 | ||
3115 | There are two formats for redirecting standard output and | |
3116 | standard error: | |
3117 | @example | |
3118 | &>@var{word} | |
3119 | @end example | |
3120 | @noindent | |
3121 | and | |
3122 | @example | |
3123 | >&@var{word} | |
3124 | @end example | |
3125 | @noindent | |
3126 | Of the two forms, the first is preferred. | |
3127 | This is semantically equivalent to | |
3128 | @example | |
3129 | >@var{word} 2>&1 | |
3130 | @end example | |
3131 | When using the second form, @var{word} may not expand to a number or | |
3132 | @samp{-}. If it does, other redirection operators apply | |
3133 | (see Duplicating File Descriptors below) for compatibility reasons. | |
3134 | ||
3135 | @subsection Appending Standard Output and Standard Error | |
3136 | This construct allows both the | |
3137 | standard output (file descriptor 1) and | |
3138 | the standard error output (file descriptor 2) | |
3139 | to be appended to the file whose name is the | |
3140 | expansion of @var{word}. | |
3141 | ||
3142 | The format for appending standard output and standard error is: | |
3143 | @example | |
3144 | &>>@var{word} | |
3145 | @end example | |
3146 | @noindent | |
3147 | This is semantically equivalent to | |
3148 | @example | |
3149 | >>@var{word} 2>&1 | |
3150 | @end example | |
3151 | (see Duplicating File Descriptors below). | |
3152 | ||
3153 | @subsection Here Documents | |
3154 | This type of redirection instructs the shell to read input from the | |
3155 | current source until a line containing only @var{word} | |
3156 | (with no trailing blanks) is seen. All of | |
3157 | the lines read up to that point are then used as the standard | |
3158 | input (or file descriptor @var{n} if @var{n} is specified) for a command. | |
3159 | ||
3160 | The format of here-documents is: | |
3161 | @example | |
3162 | [@var{n}]<<[@minus{}]@var{word} | |
3163 | @var{here-document} | |
3164 | @var{delimiter} | |
3165 | @end example | |
3166 | ||
3167 | No parameter and variable expansion, command substitution, | |
3168 | arithmetic expansion, or filename expansion is performed on | |
3169 | @var{word}. If any part of @var{word} is quoted, the | |
3170 | @var{delimiter} is the result of quote removal on @var{word}, | |
3171 | and the lines in the here-document are not expanded. | |
3172 | If @var{word} is unquoted, | |
3173 | all lines of the here-document are subjected to | |
3174 | parameter expansion, command substitution, and arithmetic expansion, | |
3175 | the character sequence @code{\newline} is ignored, and @samp{\} | |
3176 | must be used to quote the characters | |
3177 | @samp{\}, @samp{$}, and @samp{`}. | |
3178 | ||
3179 | If the redirection operator is @samp{<<-}, | |
3180 | then all leading tab characters are stripped from input lines and the | |
3181 | line containing @var{delimiter}. | |
3182 | This allows here-documents within shell scripts to be indented in a | |
3183 | natural fashion. | |
3184 | ||
3185 | @subsection Here Strings | |
3186 | A variant of here documents, the format is: | |
3187 | @example | |
3188 | [@var{n}]<<< @var{word} | |
3189 | @end example | |
3190 | ||
3191 | The @var{word} undergoes | |
3192 | tilde expansion, parameter and variable expansion, | |
3193 | command substitution, arithmetic expansion, and quote removal. | |
3194 | Filename expansion and word splitting are not performed. | |
3195 | The result is supplied as a single string, | |
3196 | with a newline appended, | |
3197 | to the command on its | |
3198 | standard input (or file descriptor @var{n} if @var{n} is specified). | |
3199 | ||
3200 | @subsection Duplicating File Descriptors | |
3201 | The redirection operator | |
3202 | @example | |
3203 | [@var{n}]<&@var{word} | |
3204 | @end example | |
3205 | @noindent | |
3206 | is used to duplicate input file descriptors. | |
3207 | If @var{word} | |
3208 | expands to one or more digits, the file descriptor denoted by @var{n} | |
3209 | is made to be a copy of that file descriptor. | |
3210 | If the digits in @var{word} do not specify a file descriptor open for | |
3211 | input, a redirection error occurs. | |
3212 | If @var{word} | |
3213 | evaluates to @samp{-}, file descriptor @var{n} is closed. | |
3214 | If @var{n} is not specified, the standard input (file descriptor 0) is used. | |
3215 | ||
3216 | The operator | |
3217 | @example | |
3218 | [@var{n}]>&@var{word} | |
3219 | @end example | |
3220 | @noindent | |
3221 | is used similarly to duplicate output file descriptors. If | |
3222 | @var{n} is not specified, the standard output (file descriptor 1) is used. | |
3223 | If the digits in @var{word} do not specify a file descriptor open for | |
3224 | output, a redirection error occurs. | |
3225 | If @var{word} | |
3226 | evaluates to @samp{-}, file descriptor @var{n} is closed. | |
3227 | As a special case, if @var{n} is omitted, and @var{word} does not | |
3228 | expand to one or more digits or @samp{-}, the standard output and standard | |
3229 | error are redirected as described previously. | |
3230 | ||
3231 | @subsection Moving File Descriptors | |
3232 | The redirection operator | |
3233 | @example | |
3234 | [@var{n}]<&@var{digit}- | |
3235 | @end example | |
3236 | @noindent | |
3237 | moves the file descriptor @var{digit} to file descriptor @var{n}, | |
3238 | or the standard input (file descriptor 0) if @var{n} is not specified. | |
3239 | @var{digit} is closed after being duplicated to @var{n}. | |
3240 | ||
3241 | Similarly, the redirection operator | |
3242 | @example | |
3243 | [@var{n}]>&@var{digit}- | |
3244 | @end example | |
3245 | @noindent | |
3246 | moves the file descriptor @var{digit} to file descriptor @var{n}, | |
3247 | or the standard output (file descriptor 1) if @var{n} is not specified. | |
3248 | ||
3249 | @subsection Opening File Descriptors for Reading and Writing | |
3250 | The redirection operator | |
3251 | @example | |
3252 | [@var{n}]<>@var{word} | |
3253 | @end example | |
3254 | @noindent | |
3255 | causes the file whose name is the expansion of @var{word} | |
3256 | to be opened for both reading and writing on file descriptor | |
3257 | @var{n}, or on file descriptor 0 if @var{n} | |
3258 | is not specified. If the file does not exist, it is created. | |
3259 | ||
3260 | @node Executing Commands | |
3261 | @section Executing Commands | |
3262 | ||
3263 | @menu | |
3264 | * Simple Command Expansion:: How Bash expands simple commands before | |
3265 | executing them. | |
3266 | * Command Search and Execution:: How Bash finds commands and runs them. | |
3267 | * Command Execution Environment:: The environment in which Bash | |
3268 | executes commands that are not | |
3269 | shell builtins. | |
3270 | * Environment:: The environment given to a command. | |
3271 | * Exit Status:: The status returned by commands and how Bash | |
3272 | interprets it. | |
3273 | * Signals:: What happens when Bash or a command it runs | |
3274 | receives a signal. | |
3275 | @end menu | |
3276 | ||
3277 | @node Simple Command Expansion | |
3278 | @subsection Simple Command Expansion | |
3279 | @cindex command expansion | |
3280 | ||
3281 | When a simple command is executed, the shell performs the following | |
3282 | expansions, assignments, and redirections, from left to right, in | |
3283 | the following order. | |
3284 | ||
3285 | @enumerate | |
3286 | @item | |
3287 | The words that the parser has marked as variable assignments (those | |
3288 | preceding the command name) and redirections are saved for later | |
3289 | processing. | |
3290 | ||
3291 | @item | |
3292 | The words that are not variable assignments or redirections are | |
3293 | expanded (@pxref{Shell Expansions}). | |
3294 | If any words remain after expansion, the first word | |
3295 | is taken to be the name of the command and the remaining words are | |
3296 | the arguments. | |
3297 | ||
3298 | @item | |
3299 | Redirections are performed as described above (@pxref{Redirections}). | |
3300 | ||
3301 | @item | |
3302 | The text after the @samp{=} in each variable assignment undergoes tilde | |
3303 | expansion, parameter expansion, command substitution, arithmetic expansion, | |
3304 | and quote removal before being assigned to the variable. | |
3305 | @end enumerate | |
3306 | ||
3307 | If no command name results, the variable assignments affect the current | |
3308 | shell environment. | |
3309 | In the case of such a command (one that consists only of assignment | |
3310 | statements and redirections), assignment statements are performed before | |
3311 | redirections. | |
3312 | Otherwise, the variables are added to the environment | |
3313 | of the executed command and do not affect the current shell environment. | |
3314 | If any of the assignments attempts to assign a value to a readonly variable, | |
3315 | an error occurs, and the command exits with a non-zero status. | |
3316 | ||
3317 | If no command name results, redirections are performed, but do not | |
3318 | affect the current shell environment. A redirection error causes the | |
3319 | command to exit with a non-zero status. | |
3320 | ||
3321 | If there is a command name left after expansion, execution proceeds as | |
3322 | described below. Otherwise, the command exits. If one of the expansions | |
3323 | contained a command substitution, the exit status of the command is | |
3324 | the exit status of the last command substitution performed. If there | |
3325 | were no command substitutions, the command exits with a status of zero. | |
3326 | ||
3327 | @node Command Search and Execution | |
3328 | @subsection Command Search and Execution | |
3329 | @cindex command execution | |
3330 | @cindex command search | |
3331 | ||
3332 | After a command has been split into words, if it results in a | |
3333 | simple command and an optional list of arguments, the following | |
3334 | actions are taken. | |
3335 | ||
3336 | @enumerate | |
3337 | @item | |
3338 | If the command name contains no slashes, the shell attempts to | |
3339 | locate it. If there exists a shell function by that name, that | |
3340 | function is invoked as described in @ref{Shell Functions}. | |
3341 | ||
3342 | @item | |
3343 | If the name does not match a function, the shell searches for | |
3344 | it in the list of shell builtins. If a match is found, that | |
3345 | builtin is invoked. | |
3346 | ||
3347 | @item | |
3348 | If the name is neither a shell function nor a builtin, | |
3349 | and contains no slashes, Bash searches each element of | |
3350 | @env{$PATH} for a directory containing an executable file | |
3351 | by that name. Bash uses a hash table to remember the full | |
3352 | pathnames of executable files to avoid multiple @env{PATH} searches | |
3353 | (see the description of @code{hash} in @ref{Bourne Shell Builtins}). | |
3354 | A full search of the directories in @env{$PATH} | |
3355 | is performed only if the command is not found in the hash table. | |
3356 | If the search is unsuccessful, the shell searches for a defined shell | |
3357 | function named @code{command_not_found_handle}. | |
3358 | If that function exists, it is invoked in a separate execution environment | |
3359 | with the original command and | |
3360 | the original command's arguments as its arguments, and the function's | |
3361 | exit status becomes the exit status of that subshell. | |
3362 | If that function is not defined, the shell prints an error | |
3363 | message and returns an exit status of 127. | |
3364 | ||
3365 | @item | |
3366 | If the search is successful, or if the command name contains | |
3367 | one or more slashes, the shell executes the named program in | |
3368 | a separate execution environment. | |
3369 | Argument 0 is set to the name given, and the remaining arguments | |
3370 | to the command are set to the arguments supplied, if any. | |
3371 | ||
3372 | @item | |
3373 | If this execution fails because the file is not in executable | |
3374 | format, and the file is not a directory, it is assumed to be a | |
3375 | @dfn{shell script} and the shell executes it as described in | |
3376 | @ref{Shell Scripts}. | |
3377 | ||
3378 | @item | |
3379 | If the command was not begun asynchronously, the shell waits for | |
3380 | the command to complete and collects its exit status. | |
3381 | ||
3382 | @end enumerate | |
3383 | ||
3384 | @node Command Execution Environment | |
3385 | @subsection Command Execution Environment | |
3386 | @cindex execution environment | |
3387 | ||
3388 | The shell has an @dfn{execution environment}, which consists of the | |
3389 | following: | |
3390 | ||
3391 | @itemize @bullet | |
3392 | @item | |
3393 | open files inherited by the shell at invocation, as modified by | |
3394 | redirections supplied to the @code{exec} builtin | |
3395 | ||
3396 | @item | |
3397 | the current working directory as set by @code{cd}, @code{pushd}, or | |
3398 | @code{popd}, or inherited by the shell at invocation | |
3399 | ||
3400 | @item | |
3401 | the file creation mode mask as set by @code{umask} or inherited from | |
3402 | the shell's parent | |
3403 | ||
3404 | @item | |
3405 | current traps set by @code{trap} | |
3406 | ||
3407 | @item | |
3408 | shell parameters that are set by variable assignment or with @code{set} | |
3409 | or inherited from the shell's parent in the environment | |
3410 | ||
3411 | @item | |
3412 | shell functions defined during execution or inherited from the shell's | |
3413 | parent in the environment | |
3414 | ||
3415 | @item | |
3416 | options enabled at invocation (either by default or with command-line | |
3417 | arguments) or by @code{set} | |
3418 | ||
3419 | @item | |
3420 | options enabled by @code{shopt} (@pxref{The Shopt Builtin}) | |
3421 | ||
3422 | @item | |
3423 | shell aliases defined with @code{alias} (@pxref{Aliases}) | |
3424 | ||
3425 | @item | |
3426 | various process @sc{id}s, including those of background jobs | |
3427 | (@pxref{Lists}), the value of @code{$$}, and the value of | |
3428 | @env{$PPID} | |
3429 | ||
3430 | @end itemize | |
3431 | ||
3432 | When a simple command other than a builtin or shell function | |
3433 | is to be executed, it | |
3434 | is invoked in a separate execution environment that consists of | |
3435 | the following. Unless otherwise noted, the values are inherited | |
3436 | from the shell. | |
3437 | ||
3438 | @itemize @bullet | |
3439 | @item | |
3440 | the shell's open files, plus any modifications and additions specified | |
3441 | by redirections to the command | |
3442 | ||
3443 | @item | |
3444 | the current working directory | |
3445 | ||
3446 | @item | |
3447 | the file creation mode mask | |
3448 | ||
3449 | @item | |
3450 | shell variables and functions marked for export, along with variables | |
3451 | exported for the command, passed in the environment (@pxref{Environment}) | |
3452 | ||
3453 | @item | |
3454 | traps caught by the shell are reset to the values inherited from the | |
3455 | shell's parent, and traps ignored by the shell are ignored | |
3456 | ||
3457 | @end itemize | |
3458 | ||
3459 | A command invoked in this separate environment cannot affect the | |
3460 | shell's execution environment. | |
3461 | ||
3462 | A @dfn{subshell} is a copy of the shell process. | |
3463 | ||
3464 | Command substitution, commands grouped with parentheses, | |
3465 | and asynchronous commands are invoked in a | |
3466 | subshell environment that is a duplicate of the shell environment, | |
3467 | except that traps caught by the shell are reset to the values | |
3468 | that the shell inherited from its parent at invocation. Builtin | |
3469 | commands that are invoked as part of a pipeline are also executed | |
3470 | in a subshell environment. Changes made to the subshell environment | |
3471 | cannot affect the shell's execution environment. | |
3472 | ||
3473 | Subshells spawned to execute command substitutions inherit the value of | |
3474 | the @option{-e} option from the parent shell. When not in @sc{posix} mode, | |
3475 | Bash clears the @option{-e} option in such subshells. | |
3476 | ||
3477 | If a command is followed by a @samp{&} and job control is not active, the | |
3478 | default standard input for the command is the empty file @file{/dev/null}. | |
3479 | Otherwise, the invoked command inherits the file descriptors of the calling | |
3480 | shell as modified by redirections. | |
3481 | ||
3482 | @node Environment | |
3483 | @subsection Environment | |
3484 | @cindex environment | |
3485 | ||
3486 | When a program is invoked it is given an array of strings | |
3487 | called the @dfn{environment}. | |
3488 | This is a list of name-value pairs, of the form @code{name=value}. | |
3489 | ||
3490 | Bash provides several ways to manipulate the environment. | |
3491 | On invocation, the shell scans its own environment and | |
3492 | creates a parameter for each name found, automatically marking | |
3493 | it for @code{export} | |
3494 | to child processes. Executed commands inherit the environment. | |
3495 | The @code{export} and @samp{declare -x} | |
3496 | commands allow parameters and functions to be added to and | |
3497 | deleted from the environment. If the value of a parameter | |
3498 | in the environment is modified, the new value becomes part | |
3499 | of the environment, replacing the old. The environment | |
3500 | inherited by any executed command consists of the shell's | |
3501 | initial environment, whose values may be modified in the shell, | |
3502 | less any pairs removed by the @code{unset} and @samp{export -n} | |
3503 | commands, plus any additions via the @code{export} and | |
3504 | @samp{declare -x} commands. | |
3505 | ||
3506 | The environment for any simple command | |
3507 | or function may be augmented temporarily by prefixing it with | |
3508 | parameter assignments, as described in @ref{Shell Parameters}. | |
3509 | These assignment statements affect only the environment seen | |
3510 | by that command. | |
3511 | ||
3512 | If the @option{-k} option is set (@pxref{The Set Builtin}), then all | |
3513 | parameter assignments are placed in the environment for a command, | |
3514 | not just those that precede the command name. | |
3515 | ||
3516 | When Bash invokes an external command, the variable @samp{$_} | |
3517 | is set to the full pathname of the command and passed to that | |
3518 | command in its environment. | |
3519 | ||
3520 | @node Exit Status | |
3521 | @subsection Exit Status | |
3522 | @cindex exit status | |
3523 | ||
3524 | The exit status of an executed command is the value returned by the | |
3525 | @code{waitpid} system call or equivalent function. Exit statuses | |
3526 | fall between 0 and 255, though, as explained below, the shell may | |
3527 | use values above 125 specially. Exit statuses from shell builtins and | |
3528 | compound commands are also limited to this range. Under certain | |
3529 | circumstances, the shell will use special values to indicate specific | |
3530 | failure modes. | |
3531 | ||
3532 | For the shell's purposes, a command which exits with a | |
3533 | zero exit status has succeeded. | |
3534 | A non-zero exit status indicates failure. | |
3535 | This seemingly counter-intuitive scheme is used so there | |
3536 | is one well-defined way to indicate success and a variety of | |
3537 | ways to indicate various failure modes. | |
3538 | When a command terminates on a fatal signal whose number is @var{N}, | |
3539 | Bash uses the value 128+@var{N} as the exit status. | |
3540 | ||
3541 | If a command is not found, the child process created to | |
3542 | execute it returns a status of 127. If a command is found | |
3543 | but is not executable, the return status is 126. | |
3544 | ||
3545 | If a command fails because of an error during expansion or redirection, | |
3546 | the exit status is greater than zero. | |
3547 | ||
3548 | The exit status is used by the Bash conditional commands | |
3549 | (@pxref{Conditional Constructs}) and some of the list | |
3550 | constructs (@pxref{Lists}). | |
3551 | ||
3552 | All of the Bash builtins return an exit status of zero if they succeed | |
3553 | and a non-zero status on failure, so they may be used by the | |
3554 | conditional and list constructs. | |
3555 | All builtins return an exit status of 2 to indicate incorrect usage, | |
3556 | generally invalid options or missing arguments. | |
3557 | ||
3558 | The exit status of the last command is available in the special | |
3559 | parameter $? (@pxref{Special Parameters}). | |
3560 | ||
3561 | @node Signals | |
3562 | @subsection Signals | |
3563 | @cindex signal handling | |
3564 | ||
3565 | When Bash is interactive, in the absence of any traps, it ignores | |
3566 | @code{SIGTERM} (so that @samp{kill 0} does not kill an interactive shell), | |
3567 | and @code{SIGINT} | |
3568 | is caught and handled (so that the @code{wait} builtin is interruptible). | |
3569 | When Bash receives a @code{SIGINT}, it breaks out of any executing loops. | |
3570 | In all cases, Bash ignores @code{SIGQUIT}. | |
3571 | If job control is in effect (@pxref{Job Control}), Bash | |
3572 | ignores @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. | |
3573 | ||
3574 | Non-builtin commands started by Bash have signal handlers set to the | |
3575 | values inherited by the shell from its parent. | |
3576 | When job control is not in effect, asynchronous commands | |
3577 | ignore @code{SIGINT} and @code{SIGQUIT} in addition to these inherited | |
3578 | handlers. | |
3579 | Commands run as a result of | |
3580 | command substitution ignore the keyboard-generated job control signals | |
3581 | @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. | |
3582 | ||
3583 | The shell exits by default upon receipt of a @code{SIGHUP}. | |
3584 | Before exiting, an interactive shell resends the @code{SIGHUP} to | |
3585 | all jobs, running or stopped. | |
3586 | Stopped jobs are sent @code{SIGCONT} to ensure that they receive | |
3587 | the @code{SIGHUP}. | |
3588 | To prevent the shell from sending the @code{SIGHUP} signal to a | |
3589 | particular job, it should be removed | |
3590 | from the jobs table with the @code{disown} | |
3591 | builtin (@pxref{Job Control Builtins}) or marked | |
3592 | to not receive @code{SIGHUP} using @code{disown -h}. | |
3593 | ||
3594 | If the @code{huponexit} shell option has been set with @code{shopt} | |
3595 | (@pxref{The Shopt Builtin}), Bash sends a @code{SIGHUP} to all jobs when | |
3596 | an interactive login shell exits. | |
3597 | ||
3598 | If Bash is waiting for a command to complete and receives a signal | |
3599 | for which a trap has been set, the trap will not be executed until | |
3600 | the command completes. | |
3601 | When Bash is waiting for an asynchronous | |
3602 | command via the @code{wait} builtin, the reception of a signal for | |
3603 | which a trap has been set will cause the @code{wait} builtin to return | |
3604 | immediately with an exit status greater than 128, immediately after | |
3605 | which the trap is executed. | |
3606 | ||
3607 | When job control is not enabled, and Bash is waiting for a foreground | |
3608 | command to complete, the shell receives keyboard-generated signals | |
3609 | such as @code{SIGINT} (usually generated by @samp{^C}) that users | |
3610 | commonly intend to send to that command. | |
3611 | This happens because the shell and the command are in the same process | |
3612 | group as the terminal, and @samp{^C} sends @code{SIGINT} to all processes | |
3613 | in that process group. | |
3614 | See @ref{Job Control}, for a more in-depth discussion of process groups. | |
3615 | ||
3616 | When Bash is running without job control enabled and receives @code{SIGINT} | |
3617 | while waiting for a foreground command, it waits until that foreground | |
3618 | command terminates and then decides what to do about the @code{SIGINT}: | |
3619 | ||
3620 | @enumerate | |
3621 | @item | |
3622 | If the command terminates due to the @code{SIGINT}, Bash concludes | |
3623 | that the user meant to end the entire script, and acts on the | |
3624 | @code{SIGINT} (e.g., by running a @code{SIGINT} trap or exiting itself); | |
3625 | ||
3626 | @item | |
3627 | If the pipeline does not terminate due to @code{SIGINT}, the program | |
3628 | handled the @code{SIGINT} itself and did not treat it as a fatal signal. | |
3629 | In that case, Bash does not treat @code{SIGINT} as a fatal signal, | |
3630 | either, instead assuming that the @code{SIGINT} was used as part of the | |
3631 | program's normal operation (e.g., @command{emacs} uses it to abort editing | |
3632 | commands) or deliberately discarded. However, Bash will run any | |
3633 | trap set on @code{SIGINT}, as it does with any other trapped signal it | |
3634 | receives while it is waiting for the foreground command to | |
3635 | complete, for compatibility. | |
3636 | @end enumerate | |
3637 | ||
3638 | @node Shell Scripts | |
3639 | @section Shell Scripts | |
3640 | @cindex shell script | |
3641 | ||
3642 | A shell script is a text file containing shell commands. When such | |
3643 | a file is used as the first non-option argument when invoking Bash, | |
3644 | and neither the @option{-c} nor @option{-s} option is supplied | |
3645 | (@pxref{Invoking Bash}), | |
3646 | Bash reads and executes commands from the file, then exits. This | |
3647 | mode of operation creates a non-interactive shell. The shell first | |
3648 | searches for the file in the current directory, and looks in the | |
3649 | directories in @env{$PATH} if not found there. | |
3650 | ||
3651 | When Bash runs | |
3652 | a shell script, it sets the special parameter @code{0} to the name | |
3653 | of the file, rather than the name of the shell, and the positional | |
3654 | parameters are set to the remaining arguments, if any are given. | |
3655 | If no additional arguments are supplied, the positional parameters | |
3656 | are unset. | |
3657 | ||
3658 | A shell script may be made executable by using the @code{chmod} command | |
3659 | to turn on the execute bit. When Bash finds such a file while | |
3660 | searching the @env{$PATH} for a command, it creates a | |
3661 | new instance of itself | |
3662 | to execute it. | |
3663 | In other words, executing | |
3664 | @example | |
3665 | filename @var{arguments} | |
3666 | @end example | |
3667 | @noindent | |
3668 | is equivalent to executing | |
3669 | @example | |
3670 | bash filename @var{arguments} | |
3671 | @end example | |
3672 | ||
3673 | @noindent | |
3674 | if @code{filename} is an executable shell script. | |
3675 | This subshell reinitializes itself, so that the effect is as if a | |
3676 | new shell had been invoked to interpret the script, with the | |
3677 | exception that the locations of commands remembered by the parent | |
3678 | (see the description of @code{hash} in @ref{Bourne Shell Builtins}) | |
3679 | are retained by the child. | |
3680 | ||
3681 | Most versions of Unix make this a part of the operating system's command | |
3682 | execution mechanism. If the first line of a script begins with | |
3683 | the two characters @samp{#!}, the remainder of the line specifies | |
3684 | an interpreter for the program and, depending on the operating system, one | |
3685 | or more optional arguments for that interpreter. | |
3686 | Thus, you can specify Bash, @code{awk}, Perl, or some other | |
3687 | interpreter and write the rest of the script file in that language. | |
3688 | ||
3689 | The arguments to the interpreter | |
3690 | consist of one or more optional arguments following the interpreter | |
3691 | name on the first line of the script file, followed by the name of | |
3692 | the script file, followed by the rest of the arguments supplied to the | |
3693 | script. | |
3694 | The details of how the interpreter line is split into an interpreter name | |
3695 | and a set of arguments vary across systems. | |
3696 | Bash will perform this action on operating systems that do not handle it | |
3697 | themselves. | |
3698 | Note that some older versions of Unix limit the interpreter | |
3699 | name and a single argument to a maximum of 32 characters, so it's not | |
3700 | portable to assume that using more than one argument will work. | |
3701 | ||
3702 | Bash scripts often begin with @code{#! /bin/bash} (assuming that | |
3703 | Bash has been installed in @file{/bin}), since this ensures that | |
3704 | Bash will be used to interpret the script, even if it is executed | |
3705 | under another shell. It's a common idiom to use @code{env} to find | |
3706 | @code{bash} even if it's been installed in another directory: | |
3707 | @code{#!/usr/bin/env bash} will find the first occurrence of @code{bash} | |
3708 | in @env{$PATH}. | |
3709 | ||
3710 | @node Shell Builtin Commands | |
3711 | @chapter Shell Builtin Commands | |
3712 | ||
3713 | @menu | |
3714 | * Bourne Shell Builtins:: Builtin commands inherited from the Bourne | |
3715 | Shell. | |
3716 | * Bash Builtins:: Table of builtins specific to Bash. | |
3717 | * Modifying Shell Behavior:: Builtins to modify shell attributes and | |
3718 | optional behavior. | |
3719 | * Special Builtins:: Builtin commands classified specially by | |
3720 | POSIX. | |
3721 | @end menu | |
3722 | ||
3723 | Builtin commands are contained within the shell itself. | |
3724 | When the name of a builtin command is used as the first word of | |
3725 | a simple command (@pxref{Simple Commands}), the shell executes | |
3726 | the command directly, without invoking another program. | |
3727 | Builtin commands are necessary to implement functionality impossible | |
3728 | or inconvenient to obtain with separate utilities. | |
3729 | ||
3730 | This section briefly describes the builtins which Bash inherits from | |
3731 | the Bourne Shell, as well as the builtin commands which are unique | |
3732 | to or have been extended in Bash. | |
3733 | ||
3734 | Several builtin commands are described in other chapters: builtin | |
3735 | commands which provide the Bash interface to the job control | |
3736 | facilities (@pxref{Job Control Builtins}), the directory stack | |
3737 | (@pxref{Directory Stack Builtins}), the command history | |
3738 | (@pxref{Bash History Builtins}), and the programmable completion | |
3739 | facilities (@pxref{Programmable Completion Builtins}). | |
3740 | ||
3741 | Many of the builtins have been extended by @sc{posix} or Bash. | |
3742 | ||
3743 | Unless otherwise noted, each builtin command documented as accepting | |
3744 | options preceded by @samp{-} accepts @samp{--} | |
3745 | to signify the end of the options. | |
3746 | The @code{:}, @code{true}, @code{false}, and @code{test}/@code{[} | |
3747 | builtins do not accept options and do not treat @samp{--} specially. | |
3748 | The @code{exit}, @code{logout}, @code{return}, | |
3749 | @code{break}, @code{continue}, @code{let}, | |
3750 | and @code{shift} builtins accept and process arguments beginning | |
3751 | with @samp{-} without requiring @samp{--}. | |
3752 | Other builtins that accept arguments but are not specified as accepting | |
3753 | options interpret arguments beginning with @samp{-} as invalid options and | |
3754 | require @samp{--} to prevent this interpretation. | |
3755 | ||
3756 | @node Bourne Shell Builtins | |
3757 | @section Bourne Shell Builtins | |
3758 | ||
3759 | The following shell builtin commands are inherited from the Bourne Shell. | |
3760 | These commands are implemented as specified by the @sc{posix} standard. | |
3761 | ||
3762 | @table @code | |
3763 | @item : @r{(a colon)} | |
3764 | @btindex : | |
3765 | @example | |
3766 | : [@var{arguments}] | |
3767 | @end example | |
3768 | ||
3769 | Do nothing beyond expanding @var{arguments} and performing redirections. | |
3770 | The return status is zero. | |
3771 | ||
3772 | @item . @r{(a period)} | |
3773 | @btindex . | |
3774 | @example | |
3775 | . @var{filename} [@var{arguments}] | |
3776 | @end example | |
3777 | ||
3778 | Read and execute commands from the @var{filename} argument in the | |
3779 | current shell context. If @var{filename} does not contain a slash, | |
3780 | the @env{PATH} variable is used to find @var{filename}, | |
3781 | but @var{filename} does not need to be executable. | |
3782 | When Bash is not in @sc{posix} mode, it searches the current directory | |
3783 | if @var{filename} is not found in @env{$PATH}. | |
3784 | If any @var{arguments} are supplied, they become the positional | |
3785 | parameters when @var{filename} is executed. Otherwise the positional | |
3786 | parameters are unchanged. | |
3787 | If the @option{-T} option is enabled, @code{.} inherits any trap on | |
3788 | @code{DEBUG}; if it is not, any @code{DEBUG} trap string is saved and | |
3789 | restored around the call to @code{.}, and @code{.} unsets the | |
3790 | @code{DEBUG} trap while it executes. | |
3791 | If @option{-T} is not set, and the sourced file changes | |
3792 | the @code{DEBUG} trap, the new value is retained when @code{.} completes. | |
3793 | The return status is the exit status of the last command executed, or | |
3794 | zero if no commands are executed. If @var{filename} is not found, or | |
3795 | cannot be read, the return status is non-zero. | |
3796 | This builtin is equivalent to @code{source}. | |
3797 | ||
3798 | @item break | |
3799 | @btindex break | |
3800 | @example | |
3801 | break [@var{n}] | |
3802 | @end example | |
3803 | ||
3804 | Exit from a @code{for}, @code{while}, @code{until}, or @code{select} loop. | |
3805 | If @var{n} is supplied, the @var{n}th enclosing loop is exited. | |
3806 | @var{n} must be greater than or equal to 1. | |
3807 | The return status is zero unless @var{n} is not greater than or equal to 1. | |
3808 | ||
3809 | @item cd | |
3810 | @btindex cd | |
3811 | @example | |
3812 | cd [-L|[-P [-e]] [-@@] [@var{directory}] | |
3813 | @end example | |
3814 | ||
3815 | Change the current working directory to @var{directory}. | |
3816 | If @var{directory} is not supplied, the value of the @env{HOME} | |
3817 | shell variable is used. | |
3818 | If the shell variable | |
3819 | @env{CDPATH} exists, it is used as a search path: | |
3820 | each directory name in @env{CDPATH} is searched for | |
3821 | @var{directory}, with alternative directory names in @env{CDPATH} | |
3822 | separated by a colon (@samp{:}). | |
3823 | If @var{directory} begins with a slash, @env{CDPATH} is not used. | |
3824 | ||
3825 | The @option{-P} option means to not follow symbolic links: symbolic links | |
3826 | are resolved while @code{cd} is traversing @var{directory} and before | |
3827 | processing an instance of @samp{..} in @var{directory}. | |
3828 | ||
3829 | By default, or when the @option{-L} option is supplied, symbolic links | |
3830 | in @var{directory} are resolved after @code{cd} processes an instance | |
3831 | of @samp{..} in @var{directory}. | |
3832 | ||
3833 | If @samp{..} appears in @var{directory}, it is processed by removing the | |
3834 | immediately preceding pathname component, back to a slash or the beginning | |
3835 | of @var{directory}. | |
3836 | ||
3837 | If the @option{-e} option is supplied with @option{-P} | |
3838 | and the current working directory cannot be successfully determined | |
3839 | after a successful directory change, @code{cd} will return an unsuccessful | |
3840 | status. | |
3841 | ||
3842 | On systems that support it, the @option{-@@} option presents the extended | |
3843 | attributes associated with a file as a directory. | |
3844 | ||
3845 | If @var{directory} is @samp{-}, it is converted to @env{$OLDPWD} | |
3846 | before the directory change is attempted. | |
3847 | ||
3848 | If a non-empty directory name from @env{CDPATH} is used, or if | |
3849 | @samp{-} is the first argument, and the directory change is | |
3850 | successful, the absolute pathname of the new working directory is | |
3851 | written to the standard output. | |
3852 | ||
3853 | If the directory change is successful, @code{cd} sets the value of the | |
3854 | @env{PWD} environment variable to the new directory name, and sets the | |
3855 | @env{OLDPWD} environment variable to the value of the current working | |
3856 | directory before the change. | |
3857 | ||
3858 | The return status is zero if the directory is successfully changed, | |
3859 | non-zero otherwise. | |
3860 | ||
3861 | @item continue | |
3862 | @btindex continue | |
3863 | @example | |
3864 | continue [@var{n}] | |
3865 | @end example | |
3866 | ||
3867 | Resume the next iteration of an enclosing @code{for}, @code{while}, | |
3868 | @code{until}, or @code{select} loop. | |
3869 | If @var{n} is supplied, the execution of the @var{n}th enclosing loop | |
3870 | is resumed. | |
3871 | @var{n} must be greater than or equal to 1. | |
3872 | The return status is zero unless @var{n} is not greater than or equal to 1. | |
3873 | ||
3874 | @item eval | |
3875 | @btindex eval | |
3876 | @example | |
3877 | eval [@var{arguments}] | |
3878 | @end example | |
3879 | ||
3880 | The arguments are concatenated together into a single command, which is | |
3881 | then read and executed, and its exit status returned as the exit status | |
3882 | of @code{eval}. | |
3883 | If there are no arguments or only empty arguments, the return status is | |
3884 | zero. | |
3885 | ||
3886 | @item exec | |
3887 | @btindex exec | |
3888 | @example | |
3889 | exec [-cl] [-a @var{name}] [@var{command} [@var{arguments}]] | |
3890 | @end example | |
3891 | ||
3892 | If @var{command} | |
3893 | is supplied, it replaces the shell without creating a new process. | |
3894 | If the @option{-l} option is supplied, the shell places a dash at the | |
3895 | beginning of the zeroth argument passed to @var{command}. | |
3896 | This is what the @code{login} program does. | |
3897 | The @option{-c} option causes @var{command} to be executed with an empty | |
3898 | environment. | |
3899 | If @option{-a} is supplied, the shell passes @var{name} as the zeroth | |
3900 | argument to @var{command}. | |
3901 | If @var{command} | |
3902 | cannot be executed for some reason, a non-interactive shell exits, | |
3903 | unless the @code{execfail} shell option | |
3904 | is enabled. In that case, it returns failure. | |
3905 | An interactive shell returns failure if the file cannot be executed. | |
3906 | A subshell exits unconditionally if @code{exec} fails. | |
3907 | If no @var{command} is specified, redirections may be used to affect | |
3908 | the current shell environment. If there are no redirection errors, the | |
3909 | return status is zero; otherwise the return status is non-zero. | |
3910 | ||
3911 | @item exit | |
3912 | @btindex exit | |
3913 | @example | |
3914 | exit [@var{n}] | |
3915 | @end example | |
3916 | ||
3917 | Exit the shell, returning a status of @var{n} to the shell's parent. | |
3918 | If @var{n} is omitted, the exit status is that of the last command executed. | |
3919 | Any trap on @code{EXIT} is executed before the shell terminates. | |
3920 | ||
3921 | @item export | |
3922 | @btindex export | |
3923 | @example | |
3924 | export [-fn] [-p] [@var{name}[=@var{value}]] | |
3925 | @end example | |
3926 | ||
3927 | Mark each @var{name} to be passed to child processes | |
3928 | in the environment. If the @option{-f} option is supplied, the @var{name}s | |
3929 | refer to shell functions; otherwise the names refer to shell variables. | |
3930 | The @option{-n} option means to no longer mark each @var{name} for export. | |
3931 | If no @var{name}s are supplied, or if the @option{-p} option is given, a | |
3932 | list of names of all exported variables is displayed. | |
3933 | The @option{-p} option displays output in a form that may be reused as input. | |
3934 | If a variable name is followed by =@var{value}, the value of | |
3935 | the variable is set to @var{value}. | |
3936 | ||
3937 | The return status is zero unless an invalid option is supplied, one of | |
3938 | the names is not a valid shell variable name, or @option{-f} is supplied | |
3939 | with a name that is not a shell function. | |
3940 | ||
3941 | @item getopts | |
3942 | @btindex getopts | |
3943 | @example | |
3944 | getopts @var{optstring} @var{name} [@var{arg} @dots{}] | |
3945 | @end example | |
3946 | ||
3947 | @code{getopts} is used by shell scripts to parse positional parameters. | |
3948 | @var{optstring} contains the option characters to be recognized; if a | |
3949 | character is followed by a colon, the option is expected to have an | |
3950 | argument, which should be separated from it by whitespace. | |
3951 | The colon (@samp{:}) and question mark (@samp{?}) may not be | |
3952 | used as option characters. | |
3953 | Each time it is invoked, @code{getopts} | |
3954 | places the next option in the shell variable @var{name}, initializing | |
3955 | @var{name} if it does not exist, | |
3956 | and the index of the next argument to be processed into the | |
3957 | variable @env{OPTIND}. | |
3958 | @env{OPTIND} is initialized to 1 each time the shell or a shell script | |
3959 | is invoked. | |
3960 | When an option requires an argument, | |
3961 | @code{getopts} places that argument into the variable @env{OPTARG}. | |
3962 | The shell does not reset @env{OPTIND} automatically; it must be manually | |
3963 | reset between multiple calls to @code{getopts} within the same shell | |
3964 | invocation if a new set of parameters is to be used. | |
3965 | ||
3966 | When the end of options is encountered, @code{getopts} exits with a | |
3967 | return value greater than zero. | |
3968 | @env{OPTIND} is set to the index of the first non-option argument, | |
3969 | and @var{name} is set to @samp{?}. | |
3970 | ||
3971 | @code{getopts} | |
3972 | normally parses the positional parameters, but if more arguments are | |
3973 | supplied as @var{arg} values, @code{getopts} parses those instead. | |
3974 | ||
3975 | @code{getopts} can report errors in two ways. If the first character of | |
3976 | @var{optstring} is a colon, @var{silent} | |
3977 | error reporting is used. In normal operation, diagnostic messages | |
3978 | are printed when invalid options or missing option arguments are | |
3979 | encountered. | |
3980 | If the variable @env{OPTERR} | |
3981 | is set to 0, no error messages will be displayed, even if the first | |
3982 | character of @code{optstring} is not a colon. | |
3983 | ||
3984 | If an invalid option is seen, | |
3985 | @code{getopts} places @samp{?} into @var{name} and, if not silent, | |
3986 | prints an error message and unsets @env{OPTARG}. | |
3987 | If @code{getopts} is silent, the option character found is placed in | |
3988 | @env{OPTARG} and no diagnostic message is printed. | |
3989 | ||
3990 | If a required argument is not found, and @code{getopts} | |
3991 | is not silent, a question mark (@samp{?}) is placed in @var{name}, | |
3992 | @code{OPTARG} is unset, and a diagnostic message is printed. | |
3993 | If @code{getopts} is silent, then a colon (@samp{:}) is placed in | |
3994 | @var{name} and @env{OPTARG} is set to the option character found. | |
3995 | ||
3996 | @item hash | |
3997 | @btindex hash | |
3998 | @example | |
3999 | hash [-r] [-p @var{filename}] [-dt] [@var{name}] | |
4000 | @end example | |
4001 | ||
4002 | Each time @code{hash} is invoked, it remembers the full pathnames of the | |
4003 | commands specified as @var{name} arguments, | |
4004 | so they need not be searched for on subsequent invocations. | |
4005 | The commands are found by searching through the directories listed in | |
4006 | @env{$PATH}. | |
4007 | Any previously-remembered pathname is discarded. | |
4008 | The @option{-p} option inhibits the path search, and @var{filename} is | |
4009 | used as the location of @var{name}. | |
4010 | The @option{-r} option causes the shell to forget all remembered locations. | |
4011 | The @option{-d} option causes the shell to forget the remembered location | |
4012 | of each @var{name}. | |
4013 | If the @option{-t} option is supplied, the full pathname to which each | |
4014 | @var{name} corresponds is printed. If multiple @var{name} arguments are | |
4015 | supplied with @option{-t}, the @var{name} is printed before the hashed | |
4016 | full pathname. | |
4017 | The @option{-l} option causes output to be displayed in a format | |
4018 | that may be reused as input. | |
4019 | If no arguments are given, or if only @option{-l} is supplied, | |
4020 | information about remembered commands is printed. | |
4021 | The return status is zero unless a @var{name} is not found or an invalid | |
4022 | option is supplied. | |
4023 | ||
4024 | @item pwd | |
4025 | @btindex pwd | |
4026 | @example | |
4027 | pwd [-LP] | |
4028 | @end example | |
4029 | ||
4030 | Print the absolute pathname of the current working directory. | |
4031 | If the @option{-P} option is supplied, the pathname printed will not | |
4032 | contain symbolic links. | |
4033 | If the @option{-L} option is supplied, the pathname printed may contain | |
4034 | symbolic links. | |
4035 | The return status is zero unless an error is encountered while | |
4036 | determining the name of the current directory or an invalid option | |
4037 | is supplied. | |
4038 | ||
4039 | @item readonly | |
4040 | @btindex readonly | |
4041 | @example | |
4042 | readonly [-aAf] [-p] [@var{name}[=@var{value}]] @dots{} | |
4043 | @end example | |
4044 | ||
4045 | Mark each @var{name} as readonly. | |
4046 | The values of these names may not be changed by subsequent assignment. | |
4047 | If the @option{-f} option is supplied, each @var{name} refers to a shell | |
4048 | function. | |
4049 | The @option{-a} option means each @var{name} refers to an indexed | |
4050 | array variable; the @option{-A} option means each @var{name} refers | |
4051 | to an associative array variable. | |
4052 | If both options are supplied, @option{-A} takes precedence. | |
4053 | If no @var{name} arguments are given, or if the @option{-p} | |
4054 | option is supplied, a list of all readonly names is printed. | |
4055 | The other options may be used to restrict the output to a subset of | |
4056 | the set of readonly names. | |
4057 | The @option{-p} option causes output to be displayed in a format that | |
4058 | may be reused as input. | |
4059 | If a variable name is followed by =@var{value}, the value of | |
4060 | the variable is set to @var{value}. | |
4061 | The return status is zero unless an invalid option is supplied, one of | |
4062 | the @var{name} arguments is not a valid shell variable or function name, | |
4063 | or the @option{-f} option is supplied with a name that is not a shell function. | |
4064 | ||
4065 | @item return | |
4066 | @btindex return | |
4067 | @example | |
4068 | return [@var{n}] | |
4069 | @end example | |
4070 | ||
4071 | Cause a shell function to stop executing and return the value @var{n} | |
4072 | to its caller. | |
4073 | If @var{n} is not supplied, the return value is the exit status of the | |
4074 | last command executed in the function. | |
4075 | If @code{return} is executed by a trap handler, the last command used to | |
4076 | determine the status is the last command executed before the trap handler. | |
4077 | If @code{return} is executed during a @code{DEBUG} trap, the last command | |
4078 | used to determine the status is the last command executed by the trap | |
4079 | handler before @code{return} was invoked. | |
4080 | @code{return} may also be used to terminate execution of a script | |
4081 | being executed with the @code{.} (@code{source}) builtin, | |
4082 | returning either @var{n} or | |
4083 | the exit status of the last command executed within the script as the exit | |
4084 | status of the script. | |
4085 | If @var{n} is supplied, the return value is its least significant | |
4086 | 8 bits. | |
4087 | Any command associated with the @code{RETURN} trap is executed | |
4088 | before execution resumes after the function or script. | |
4089 | The return status is non-zero if @code{return} is supplied a non-numeric | |
4090 | argument or is used outside a function | |
4091 | and not during the execution of a script by @code{.} or @code{source}. | |
4092 | ||
4093 | @item shift | |
4094 | @btindex shift | |
4095 | @example | |
4096 | shift [@var{n}] | |
4097 | @end example | |
4098 | ||
4099 | Shift the positional parameters to the left by @var{n}. | |
4100 | The positional parameters from @var{n}+1 @dots{} @code{$#} are | |
4101 | renamed to @code{$1} @dots{} @code{$#}-@var{n}. | |
4102 | Parameters represented by the numbers @code{$#} down to @code{$#}-@var{n}+1 | |
4103 | are unset. | |
4104 | @var{n} must be a non-negative number less than or equal to @code{$#}. | |
4105 | If @var{n} is zero or greater than @code{$#}, the positional parameters | |
4106 | are not changed. | |
4107 | If @var{n} is not supplied, it is assumed to be 1. | |
4108 | The return status is zero unless @var{n} is greater than @code{$#} or | |
4109 | less than zero, non-zero otherwise. | |
4110 | ||
4111 | @item test | |
4112 | @itemx [ | |
4113 | @btindex test | |
4114 | @btindex [ | |
4115 | @example | |
4116 | test @var{expr} | |
4117 | @end example | |
4118 | ||
4119 | Evaluate a conditional expression @var{expr} and return a status of 0 | |
4120 | (true) or 1 (false). | |
4121 | Each operator and operand must be a separate argument. | |
4122 | Expressions are composed of the primaries described below in | |
4123 | @ref{Bash Conditional Expressions}. | |
4124 | @code{test} does not accept any options, nor does it accept and ignore | |
4125 | an argument of @option{--} as signifying the end of options. | |
4126 | ||
4127 | When the @code{[} form is used, the last argument to the command must | |
4128 | be a @code{]}. | |
4129 | ||
4130 | Expressions may be combined using the following operators, listed in | |
4131 | decreasing order of precedence. | |
4132 | The evaluation depends on the number of arguments; see below. | |
4133 | Operator precedence is used when there are five or more arguments. | |
4134 | ||
4135 | @table @code | |
4136 | @item ! @var{expr} | |
4137 | True if @var{expr} is false. | |
4138 | ||
4139 | @item ( @var{expr} ) | |
4140 | Returns the value of @var{expr}. | |
4141 | This may be used to override the normal precedence of operators. | |
4142 | ||
4143 | @item @var{expr1} -a @var{expr2} | |
4144 | True if both @var{expr1} and @var{expr2} are true. | |
4145 | ||
4146 | @item @var{expr1} -o @var{expr2} | |
4147 | True if either @var{expr1} or @var{expr2} is true. | |
4148 | @end table | |
4149 | ||
4150 | The @code{test} and @code{[} builtins evaluate conditional | |
4151 | expressions using a set of rules based on the number of arguments. | |
4152 | ||
4153 | @table @asis | |
4154 | @item 0 arguments | |
4155 | The expression is false. | |
4156 | ||
4157 | @item 1 argument | |
4158 | The expression is true if, and only if, the argument is not null. | |
4159 | ||
4160 | @item 2 arguments | |
4161 | If the first argument is @samp{!}, the expression is true if and | |
4162 | only if the second argument is null. | |
4163 | If the first argument is one of the unary conditional operators | |
4164 | (@pxref{Bash Conditional Expressions}), the expression | |
4165 | is true if the unary test is true. | |
4166 | If the first argument is not a valid unary operator, the expression is | |
4167 | false. | |
4168 | ||
4169 | @item 3 arguments | |
4170 | The following conditions are applied in the order listed. | |
4171 | ||
4172 | @enumerate | |
4173 | @item | |
4174 | If the second argument is one of the binary conditional | |
4175 | operators (@pxref{Bash Conditional Expressions}), the | |
4176 | result of the expression is the result of the binary test using the | |
4177 | first and third arguments as operands. | |
4178 | The @samp{-a} and @samp{-o} operators are considered binary operators | |
4179 | when there are three arguments. | |
4180 | @item | |
4181 | If the first argument is @samp{!}, the value is the negation of | |
4182 | the two-argument test using the second and third arguments. | |
4183 | @item | |
4184 | If the first argument is exactly @samp{(} and the third argument is | |
4185 | exactly @samp{)}, the result is the one-argument test of the second | |
4186 | argument. | |
4187 | @item | |
4188 | Otherwise, the expression is false. | |
4189 | @end enumerate | |
4190 | ||
4191 | @item 4 arguments | |
4192 | The following conditions are applied in the order listed. | |
4193 | ||
4194 | @enumerate | |
4195 | @item | |
4196 | If the first argument is @samp{!}, the result is the negation of | |
4197 | the three-argument expression composed of the remaining arguments. | |
4198 | @item | |
4199 | If the first argument is exactly @samp{(} and the fourth argument is | |
4200 | exactly @samp{)}, the result is the two-argument test of the second | |
4201 | and third arguments. | |
4202 | @item | |
4203 | Otherwise, the expression is parsed and evaluated according to | |
4204 | precedence using the rules listed above. | |
4205 | @end enumerate | |
4206 | ||
4207 | @item 5 or more arguments | |
4208 | The expression is parsed and evaluated according to precedence | |
4209 | using the rules listed above. | |
4210 | @end table | |
4211 | ||
4212 | When used with @code{test} or @samp{[}, the @samp{<} and @samp{>} | |
4213 | operators sort lexicographically using ASCII ordering. | |
4214 | ||
4215 | @item times | |
4216 | @btindex times | |
4217 | @example | |
4218 | times | |
4219 | @end example | |
4220 | ||
4221 | Print out the user and system times used by the shell and its children. | |
4222 | The return status is zero. | |
4223 | ||
4224 | @item trap | |
4225 | @btindex trap | |
4226 | @example | |
4227 | trap [-lp] [@var{arg}] [@var{sigspec} @dots{}] | |
4228 | @end example | |
4229 | ||
4230 | The commands in @var{arg} are to be read and executed when the | |
4231 | shell receives signal @var{sigspec}. If @var{arg} is absent (and | |
4232 | there is a single @var{sigspec}) or | |
4233 | equal to @samp{-}, each specified signal's disposition is reset | |
4234 | to the value it had when the shell was started. | |
4235 | If @var{arg} is the null string, then the signal specified by | |
4236 | each @var{sigspec} is ignored by the shell and commands it invokes. | |
4237 | If @var{arg} is not present and @option{-p} has been supplied, | |
4238 | the shell displays the trap commands associated with each @var{sigspec}. | |
4239 | If no arguments are supplied, or | |
4240 | only @option{-p} is given, @code{trap} prints the list of commands | |
4241 | associated with each signal number in a form that may be reused as | |
4242 | shell input. | |
4243 | The @option{-l} option causes the shell to print a list of signal names | |
4244 | and their corresponding numbers. | |
4245 | Each @var{sigspec} is either a signal name or a signal number. | |
4246 | Signal names are case insensitive and the @code{SIG} prefix is optional. | |
4247 | ||
4248 | If a @var{sigspec} | |
4249 | is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits. | |
4250 | If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed | |
4251 | before every simple command, @code{for} command, @code{case} command, | |
4252 | @code{select} command, every arithmetic @code{for} command, and before | |
4253 | the first command executes in a shell function. | |
4254 | Refer to the description of the @code{extdebug} option to the | |
4255 | @code{shopt} builtin (@pxref{The Shopt Builtin}) for details of its | |
4256 | effect on the @code{DEBUG} trap. | |
4257 | If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed | |
4258 | each time a shell function or a script executed with the @code{.} or | |
4259 | @code{source} builtins finishes executing. | |
4260 | ||
4261 | If a @var{sigspec} is @code{ERR}, the command @var{arg} | |
4262 | is executed whenever | |
4263 | a pipeline (which may consist of a single simple | |
4264 | command), a list, or a compound command returns a | |
4265 | non-zero exit status, | |
4266 | subject to the following conditions. | |
4267 | The @code{ERR} trap is not executed if the failed command is part of the | |
4268 | command list immediately following an @code{until} or @code{while} keyword, | |
4269 | part of the test following the @code{if} or @code{elif} reserved words, | |
4270 | part of a command executed in a @code{&&} or @code{||} list | |
4271 | except the command following the final @code{&&} or @code{||}, | |
4272 | any command in a pipeline but the last, | |
4273 | or if the command's return | |
4274 | status is being inverted using @code{!}. | |
4275 | These are the same conditions obeyed by the @code{errexit} (@option{-e}) | |
4276 | option. | |
4277 | ||
4278 | Signals ignored upon entry to the shell cannot be trapped or reset. | |
4279 | Trapped signals that are not being ignored are reset to their original | |
4280 | values in a subshell or subshell environment when one is created. | |
4281 | ||
4282 | The return status is zero unless a @var{sigspec} does not specify a | |
4283 | valid signal. | |
4284 | ||
4285 | @item umask | |
4286 | @btindex umask | |
4287 | @example | |
4288 | umask [-p] [-S] [@var{mode}] | |
4289 | @end example | |
4290 | ||
4291 | Set the shell process's file creation mask to @var{mode}. If | |
4292 | @var{mode} begins with a digit, it is interpreted as an octal number; | |
4293 | if not, it is interpreted as a symbolic mode mask similar | |
4294 | to that accepted by the @code{chmod} command. If @var{mode} is | |
4295 | omitted, the current value of the mask is printed. If the @option{-S} | |
4296 | option is supplied without a @var{mode} argument, the mask is printed | |
4297 | in a symbolic format. | |
4298 | If the @option{-p} option is supplied, and @var{mode} | |
4299 | is omitted, the output is in a form that may be reused as input. | |
4300 | The return status is zero if the mode is successfully changed or if | |
4301 | no @var{mode} argument is supplied, and non-zero otherwise. | |
4302 | ||
4303 | Note that when the mode is interpreted as an octal number, each number | |
4304 | of the umask is subtracted from @code{7}. Thus, a umask of @code{022} | |
4305 | results in permissions of @code{755}. | |
4306 | ||
4307 | @item unset | |
4308 | @btindex unset | |
4309 | @example | |
4310 | unset [-fnv] [@var{name}] | |
4311 | @end example | |
4312 | ||
4313 | Remove each variable or function @var{name}. | |
4314 | If the @option{-v} option is given, each | |
4315 | @var{name} refers to a shell variable and that variable is removed. | |
4316 | If the @option{-f} option is given, the @var{name}s refer to shell | |
4317 | functions, and the function definition is removed. | |
4318 | If the @option{-n} option is supplied, and @var{name} is a variable with | |
4319 | the @code{nameref} attribute, @var{name} will be unset rather than the | |
4320 | variable it references. | |
4321 | @option{-n} has no effect if the @option{-f} option is supplied. | |
4322 | If no options are supplied, each @var{name} refers to a variable; if | |
4323 | there is no variable by that name, a function with that name, if any, is | |
4324 | unset. | |
4325 | Readonly variables and functions may not be unset. | |
4326 | Some shell variables lose their special behavior if they are unset; such | |
4327 | behavior is noted in the description of the individual variables. | |
4328 | The return status is zero unless a @var{name} is readonly or may not be unset. | |
4329 | @end table | |
4330 | ||
4331 | @node Bash Builtins | |
4332 | @section Bash Builtin Commands | |
4333 | ||
4334 | This section describes builtin commands which are unique to | |
4335 | or have been extended in Bash. | |
4336 | Some of these commands are specified in the @sc{posix} standard. | |
4337 | ||
4338 | @table @code | |
4339 | ||
4340 | @item alias | |
4341 | @btindex alias | |
4342 | @example | |
4343 | alias [-p] [@var{name}[=@var{value}] @dots{}] | |
4344 | @end example | |
4345 | ||
4346 | Without arguments or with the @option{-p} option, @code{alias} prints | |
4347 | the list of aliases on the standard output in a form that allows | |
4348 | them to be reused as input. | |
4349 | If arguments are supplied, an alias is defined for each @var{name} | |
4350 | whose @var{value} is given. If no @var{value} is given, the name | |
4351 | and value of the alias is printed. | |
4352 | Aliases are described in @ref{Aliases}. | |
4353 | ||
4354 | @item bind | |
4355 | @btindex bind | |
4356 | @example | |
4357 | bind [-m @var{keymap}] [-lpsvPSVX] | |
4358 | bind [-m @var{keymap}] [-q @var{function}] [-u @var{function}] [-r @var{keyseq}] | |
4359 | bind [-m @var{keymap}] -f @var{filename} | |
4360 | bind [-m @var{keymap}] -x @var{keyseq:shell-command} | |
4361 | bind [-m @var{keymap}] @var{keyseq:function-name} | |
4362 | bind [-m @var{keymap}] @var{keyseq:readline-command} | |
4363 | bind @var{readline-command-line} | |
4364 | @end example | |
4365 | ||
4366 | Display current Readline (@pxref{Command Line Editing}) | |
4367 | key and function bindings, | |
4368 | bind a key sequence to a Readline function or macro, | |
4369 | or set a Readline variable. | |
4370 | Each non-option argument is a command as it would appear in a | |
4371 | Readline initialization file (@pxref{Readline Init File}), | |
4372 | but each binding or command must be passed as a separate argument; e.g., | |
4373 | @samp{"\C-x\C-r":re-read-init-file}. | |
4374 | ||
4375 | Options, if supplied, have the following meanings: | |
4376 | ||
4377 | @table @code | |
4378 | @item -m @var{keymap} | |
4379 | Use @var{keymap} as the keymap to be affected by | |
4380 | the subsequent bindings. Acceptable @var{keymap} | |
4381 | names are | |
4382 | @code{emacs}, | |
4383 | @code{emacs-standard}, | |
4384 | @code{emacs-meta}, | |
4385 | @code{emacs-ctlx}, | |
4386 | @code{vi}, | |
4387 | @code{vi-move}, | |
4388 | @code{vi-command}, and | |
4389 | @code{vi-insert}. | |
4390 | @code{vi} is equivalent to @code{vi-command} (@code{vi-move} is also a | |
4391 | synonym); @code{emacs} is equivalent to @code{emacs-standard}. | |
4392 | ||
4393 | @item -l | |
4394 | List the names of all Readline functions. | |
4395 | ||
4396 | @item -p | |
4397 | Display Readline function names and bindings in such a way that they | |
4398 | can be used as input or in a Readline initialization file. | |
4399 | ||
4400 | @item -P | |
4401 | List current Readline function names and bindings. | |
4402 | ||
4403 | @item -v | |
4404 | Display Readline variable names and values in such a way that they | |
4405 | can be used as input or in a Readline initialization file. | |
4406 | ||
4407 | @item -V | |
4408 | List current Readline variable names and values. | |
4409 | ||
4410 | @item -s | |
4411 | Display Readline key sequences bound to macros and the strings they output | |
4412 | in such a way that they can be used as input or in a Readline | |
4413 | initialization file. | |
4414 | ||
4415 | @item -S | |
4416 | Display Readline key sequences bound to macros and the strings they output. | |
4417 | ||
4418 | @item -f @var{filename} | |
4419 | Read key bindings from @var{filename}. | |
4420 | ||
4421 | @item -q @var{function} | |
4422 | Query about which keys invoke the named @var{function}. | |
4423 | ||
4424 | @item -u @var{function} | |
4425 | Unbind all keys bound to the named @var{function}. | |
4426 | ||
4427 | @item -r @var{keyseq} | |
4428 | Remove any current binding for @var{keyseq}. | |
4429 | ||
4430 | @item -x @var{keyseq:shell-command} | |
4431 | Cause @var{shell-command} to be executed whenever @var{keyseq} is | |
4432 | entered. | |
4433 | When @var{shell-command} is executed, the shell sets the | |
4434 | @code{READLINE_LINE} variable to the contents of the Readline line | |
4435 | buffer and the @code{READLINE_POINT} and @code{READLINE_MARK} variables | |
4436 | to the current location of the insertion point and the saved insertion | |
4437 | point (the @var{mark}), respectively. | |
4438 | The shell assigns any numeric argument the user supplied to the | |
4439 | @code{READLINE_ARGUMENT} variable. | |
4440 | If there was no argument, that variable is not set. | |
4441 | If the executed command changes the value of any of @code{READLINE_LINE}, | |
4442 | @code{READLINE_POINT}, or @code{READLINE_MARK}, those new values will be | |
4443 | reflected in the editing state. | |
4444 | ||
4445 | @item -X | |
4446 | List all key sequences bound to shell commands and the associated commands | |
4447 | in a format that can be reused as input. | |
4448 | @end table | |
4449 | ||
4450 | @noindent | |
4451 | The return status is zero unless an invalid option is supplied or an | |
4452 | error occurs. | |
4453 | ||
4454 | @item builtin | |
4455 | @btindex builtin | |
4456 | @example | |
4457 | builtin [@var{shell-builtin} [@var{args}]] | |
4458 | @end example | |
4459 | ||
4460 | Run a shell builtin, passing it @var{args}, and return its exit status. | |
4461 | This is useful when defining a shell function with the same | |
4462 | name as a shell builtin, retaining the functionality of the builtin within | |
4463 | the function. | |
4464 | The return status is non-zero if @var{shell-builtin} is not a shell | |
4465 | builtin command. | |
4466 | ||
4467 | @item caller | |
4468 | @btindex caller | |
4469 | @example | |
4470 | caller [@var{expr}] | |
4471 | @end example | |
4472 | ||
4473 | Returns the context of any active subroutine call (a shell function or | |
4474 | a script executed with the @code{.} or @code{source} builtins). | |
4475 | ||
4476 | Without @var{expr}, @code{caller} displays the line number and source | |
4477 | filename of the current subroutine call. | |
4478 | If a non-negative integer is supplied as @var{expr}, @code{caller} | |
4479 | displays the line number, subroutine name, and source file corresponding | |
4480 | to that position in the current execution call stack. This extra | |
4481 | information may be used, for example, to print a stack trace. The | |
4482 | current frame is frame 0. | |
4483 | ||
4484 | The return value is 0 unless the shell is not executing a subroutine | |
4485 | call or @var{expr} does not correspond to a valid position in the | |
4486 | call stack. | |
4487 | ||
4488 | @item command | |
4489 | @btindex command | |
4490 | @example | |
4491 | command [-pVv] @var{command} [@var{arguments} @dots{}] | |
4492 | @end example | |
4493 | ||
4494 | Runs @var{command} with @var{arguments} ignoring any shell function | |
4495 | named @var{command}. | |
4496 | Only shell builtin commands or commands found by searching the | |
4497 | @env{PATH} are executed. | |
4498 | If there is a shell function named @code{ls}, running @samp{command ls} | |
4499 | within the function will execute the external command @code{ls} | |
4500 | instead of calling the function recursively. | |
4501 | The @option{-p} option means to use a default value for @env{PATH} | |
4502 | that is guaranteed to find all of the standard utilities. | |
4503 | The return status in this case is 127 if @var{command} cannot be | |
4504 | found or an error occurred, and the exit status of @var{command} | |
4505 | otherwise. | |
4506 | ||
4507 | If either the @option{-V} or @option{-v} option is supplied, a | |
4508 | description of @var{command} is printed. The @option{-v} option | |
4509 | causes a single word indicating the command or file name used to | |
4510 | invoke @var{command} to be displayed; the @option{-V} option produces | |
4511 | a more verbose description. In this case, the return status is | |
4512 | zero if @var{command} is found, and non-zero if not. | |
4513 | ||
4514 | @item declare | |
4515 | @btindex declare | |
4516 | @example | |
4517 | declare [-aAfFgiIlnrtux] [-p] [@var{name}[=@var{value}] @dots{}] | |
4518 | @end example | |
4519 | ||
4520 | Declare variables and give them attributes. If no @var{name}s | |
4521 | are given, then display the values of variables instead. | |
4522 | ||
4523 | The @option{-p} option will display the attributes and values of each | |
4524 | @var{name}. | |
4525 | When @option{-p} is used with @var{name} arguments, additional options, | |
4526 | other than @option{-f} and @option{-F}, are ignored. | |
4527 | ||
4528 | When @option{-p} is supplied without @var{name} arguments, @code{declare} | |
4529 | will display the attributes and values of all variables having the | |
4530 | attributes specified by the additional options. | |
4531 | If no other options are supplied with @option{-p}, @code{declare} will | |
4532 | display the attributes and values of all shell variables. The @option{-f} | |
4533 | option will restrict the display to shell functions. | |
4534 | ||
4535 | The @option{-F} option inhibits the display of function definitions; | |
4536 | only the function name and attributes are printed. | |
4537 | If the @code{extdebug} shell option is enabled using @code{shopt} | |
4538 | (@pxref{The Shopt Builtin}), the source file name and line number where | |
4539 | each @var{name} is defined are displayed as well. | |
4540 | @option{-F} implies @option{-f}. | |
4541 | ||
4542 | The @option{-g} option forces variables to be created or modified at | |
4543 | the global scope, even when @code{declare} is executed in a shell function. | |
4544 | It is ignored in all other cases. | |
4545 | ||
4546 | The @option{-I} option causes local variables to inherit the attributes | |
4547 | (except the @code{nameref} attribute) | |
4548 | and value of any existing variable with the same | |
4549 | @var{name} at a surrounding scope. | |
4550 | If there is no existing variable, the local variable is initially unset. | |
4551 | ||
4552 | The following options can be used to restrict output to variables with | |
4553 | the specified attributes or to give variables attributes: | |
4554 | ||
4555 | @table @code | |
4556 | @item -a | |
4557 | Each @var{name} is an indexed array variable (@pxref{Arrays}). | |
4558 | ||
4559 | @item -A | |
4560 | Each @var{name} is an associative array variable (@pxref{Arrays}). | |
4561 | ||
4562 | @item -f | |
4563 | Use function names only. | |
4564 | ||
4565 | @item -i | |
4566 | The variable is to be treated as | |
4567 | an integer; arithmetic evaluation (@pxref{Shell Arithmetic}) is | |
4568 | performed when the variable is assigned a value. | |
4569 | ||
4570 | @item -l | |
4571 | When the variable is assigned a value, all upper-case characters are | |
4572 | converted to lower-case. | |
4573 | The upper-case attribute is disabled. | |
4574 | ||
4575 | @item -n | |
4576 | Give each @var{name} the @code{nameref} attribute, making | |
4577 | it a name reference to another variable. | |
4578 | That other variable is defined by the value of @var{name}. | |
4579 | All references, assignments, and attribute modifications | |
4580 | to @var{name}, except for those using or changing the | |
4581 | @option{-n} attribute itself, are performed on the variable referenced by | |
4582 | @var{name}'s value. | |
4583 | The nameref attribute cannot be applied to array variables. | |
4584 | ||
4585 | @item -r | |
4586 | Make @var{name}s readonly. These names cannot then be assigned values | |
4587 | by subsequent assignment statements or unset. | |
4588 | ||
4589 | @item -t | |
4590 | Give each @var{name} the @code{trace} attribute. | |
4591 | Traced functions inherit the @code{DEBUG} and @code{RETURN} traps from | |
4592 | the calling shell. | |
4593 | The trace attribute has no special meaning for variables. | |
4594 | ||
4595 | @item -u | |
4596 | When the variable is assigned a value, all lower-case characters are | |
4597 | converted to upper-case. | |
4598 | The lower-case attribute is disabled. | |
4599 | ||
4600 | @item -x | |
4601 | Mark each @var{name} for export to subsequent commands via | |
4602 | the environment. | |
4603 | @end table | |
4604 | ||
4605 | Using @samp{+} instead of @samp{-} turns off the attribute instead, | |
4606 | with the exceptions that @samp{+a} and @samp{+A} | |
4607 | may not be used to destroy array variables and @samp{+r} will not | |
4608 | remove the readonly attribute. | |
4609 | When used in a function, @code{declare} makes each @var{name} local, | |
4610 | as with the @code{local} command, unless the @option{-g} option is used. | |
4611 | If a variable name is followed by =@var{value}, the value of the variable | |
4612 | is set to @var{value}. | |
4613 | ||
4614 | When using @option{-a} or @option{-A} and the compound assignment syntax to | |
4615 | create array variables, additional attributes do not take effect until | |
4616 | subsequent assignments. | |
4617 | ||
4618 | The return status is zero unless an invalid option is encountered, | |
4619 | an attempt is made to define a function using @samp{-f foo=bar}, | |
4620 | an attempt is made to assign a value to a readonly variable, | |
4621 | an attempt is made to assign a value to an array variable without | |
4622 | using the compound assignment syntax (@pxref{Arrays}), | |
4623 | one of the @var{name}s is not a valid shell variable name, | |
4624 | an attempt is made to turn off readonly status for a readonly variable, | |
4625 | an attempt is made to turn off array status for an array variable, | |
4626 | or an attempt is made to display a non-existent function with @option{-f}. | |
4627 | ||
4628 | @item echo | |
4629 | @btindex echo | |
4630 | @example | |
4631 | echo [-neE] [@var{arg} @dots{}] | |
4632 | @end example | |
4633 | ||
4634 | Output the @var{arg}s, separated by spaces, terminated with a | |
4635 | newline. | |
4636 | The return status is 0 unless a write error occurs. | |
4637 | If @option{-n} is specified, the trailing newline is suppressed. | |
4638 | If the @option{-e} option is given, interpretation of the following | |
4639 | backslash-escaped characters is enabled. | |
4640 | The @option{-E} option disables the interpretation of these escape characters, | |
4641 | even on systems where they are interpreted by default. | |
4642 | The @code{xpg_echo} shell option may be used to | |
4643 | dynamically determine whether or not @code{echo} expands these | |
4644 | escape characters by default. | |
4645 | @code{echo} does not interpret @option{--} to mean the end of options. | |
4646 | ||
4647 | @code{echo} interprets the following escape sequences: | |
4648 | @table @code | |
4649 | @item \a | |
4650 | alert (bell) | |
4651 | @item \b | |
4652 | backspace | |
4653 | @item \c | |
4654 | suppress further output | |
4655 | @item \e | |
4656 | @itemx \E | |
4657 | escape | |
4658 | @item \f | |
4659 | form feed | |
4660 | @item \n | |
4661 | new line | |
4662 | @item \r | |
4663 | carriage return | |
4664 | @item \t | |
4665 | horizontal tab | |
4666 | @item \v | |
4667 | vertical tab | |
4668 | @item \\ | |
4669 | backslash | |
4670 | @item \0@var{nnn} | |
4671 | the eight-bit character whose value is the octal value @var{nnn} | |
4672 | (zero to three octal digits) | |
4673 | @item \x@var{HH} | |
4674 | the eight-bit character whose value is the hexadecimal value @var{HH} | |
4675 | (one or two hex digits) | |
4676 | @item \u@var{HHHH} | |
4677 | the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value | |
4678 | @var{HHHH} (one to four hex digits) | |
4679 | @item \U@var{HHHHHHHH} | |
4680 | the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value | |
4681 | @var{HHHHHHHH} (one to eight hex digits) | |
4682 | @end table | |
4683 | ||
4684 | @item enable | |
4685 | @btindex enable | |
4686 | @example | |
4687 | enable [-a] [-dnps] [-f @var{filename}] [@var{name} @dots{}] | |
4688 | @end example | |
4689 | ||
4690 | Enable and disable builtin shell commands. | |
4691 | Disabling a builtin allows a disk command which has the same name | |
4692 | as a shell builtin to be executed without specifying a full pathname, | |
4693 | even though the shell normally searches for builtins before disk commands. | |
4694 | If @option{-n} is used, the @var{name}s become disabled. Otherwise | |
4695 | @var{name}s are enabled. For example, to use the @code{test} binary | |
4696 | found via @env{$PATH} instead of the shell builtin version, type | |
4697 | @samp{enable -n test}. | |
4698 | ||
4699 | If the @option{-p} option is supplied, or no @var{name} arguments appear, | |
4700 | a list of shell builtins is printed. With no other arguments, the list | |
4701 | consists of all enabled shell builtins. | |
4702 | The @option{-a} option means to list | |
4703 | each builtin with an indication of whether or not it is enabled. | |
4704 | ||
4705 | The @option{-f} option means to load the new builtin command @var{name} | |
4706 | from shared object @var{filename}, on systems that support dynamic loading. | |
4707 | Bash will use the value of the @env{BASH_LOADABLES_PATH} variable as a | |
4708 | colon-separated list of directories in which to search for @var{filename}. | |
4709 | The default is system-dependent. | |
4710 | The @option{-d} option will delete a builtin loaded with @option{-f}. | |
4711 | ||
4712 | If there are no options, a list of the shell builtins is displayed. | |
4713 | The @option{-s} option restricts @code{enable} to the @sc{posix} special | |
4714 | builtins. If @option{-s} is used with @option{-f}, the new builtin becomes | |
4715 | a special builtin (@pxref{Special Builtins}). | |
4716 | ||
4717 | If no options are supplied and a @var{name} is not a shell builtin, | |
4718 | @code{enable} will attempt to load @var{name} from a shared object named | |
4719 | @var{name}, as if the command were | |
4720 | @samp{enable -f @var{name} @var{name}}. | |
4721 | ||
4722 | The return status is zero unless a @var{name} is not a shell builtin | |
4723 | or there is an error loading a new builtin from a shared object. | |
4724 | ||
4725 | @item help | |
4726 | @btindex help | |
4727 | @example | |
4728 | help [-dms] [@var{pattern}] | |
4729 | @end example | |
4730 | ||
4731 | Display helpful information about builtin commands. | |
4732 | If @var{pattern} is specified, @code{help} gives detailed help | |
4733 | on all commands matching @var{pattern}, otherwise a list of | |
4734 | the builtins is printed. | |
4735 | ||
4736 | Options, if supplied, have the following meanings: | |
4737 | ||
4738 | @table @code | |
4739 | @item -d | |
4740 | Display a short description of each @var{pattern} | |
4741 | @item -m | |
4742 | Display the description of each @var{pattern} in a manpage-like format | |
4743 | @item -s | |
4744 | Display only a short usage synopsis for each @var{pattern} | |
4745 | @end table | |
4746 | ||
4747 | The return status is zero unless no command matches @var{pattern}. | |
4748 | ||
4749 | @item let | |
4750 | @btindex let | |
4751 | @example | |
4752 | let @var{expression} [@var{expression} @dots{}] | |
4753 | @end example | |
4754 | ||
4755 | The @code{let} builtin allows arithmetic to be performed on shell | |
4756 | variables. Each @var{expression} is evaluated according to the | |
4757 | rules given below in @ref{Shell Arithmetic}. If the | |
4758 | last @var{expression} evaluates to 0, @code{let} returns 1; | |
4759 | otherwise 0 is returned. | |
4760 | ||
4761 | @item local | |
4762 | @btindex local | |
4763 | @example | |
4764 | local [@var{option}] @var{name}[=@var{value}] @dots{} | |
4765 | @end example | |
4766 | ||
4767 | For each argument, a local variable named @var{name} is created, | |
4768 | and assigned @var{value}. | |
4769 | The @var{option} can be any of the options accepted by @code{declare}. | |
4770 | @code{local} can only be used within a function; it makes the variable | |
4771 | @var{name} have a visible scope restricted to that function and its | |
4772 | children. | |
4773 | If @var{name} is @samp{-}, the set of shell options is made local to the | |
4774 | function in which @code{local} is invoked: shell options changed using | |
4775 | the @code{set} builtin inside the function are restored to their original | |
4776 | values when the function returns. | |
4777 | The restore is effected as if a series of @code{set} commands were executed | |
4778 | to restore the values that were in place before the function. | |
4779 | The return status is zero unless @code{local} is used outside | |
4780 | a function, an invalid @var{name} is supplied, or @var{name} is a | |
4781 | readonly variable. | |
4782 | ||
4783 | @item logout | |
4784 | @btindex logout | |
4785 | @example | |
4786 | logout [@var{n}] | |
4787 | @end example | |
4788 | ||
4789 | Exit a login shell, returning a status of @var{n} to the shell's | |
4790 | parent. | |
4791 | ||
4792 | @item mapfile | |
4793 | @btindex mapfile | |
4794 | @example | |
4795 | mapfile [-d @var{delim}] [-n @var{count}] [-O @var{origin}] [-s @var{count}] | |
4796 | [-t] [-u @var{fd}] [-C @var{callback}] [-c @var{quantum}] [@var{array}] | |
4797 | @end example | |
4798 | ||
4799 | Read lines from the standard input into the indexed array variable @var{array}, | |
4800 | or from file descriptor @var{fd} | |
4801 | if the @option{-u} option is supplied. | |
4802 | The variable @code{MAPFILE} is the default @var{array}. | |
4803 | Options, if supplied, have the following meanings: | |
4804 | ||
4805 | @table @code | |
4806 | ||
4807 | @item -d | |
4808 | The first character of @var{delim} is used to terminate each input line, | |
4809 | rather than newline. | |
4810 | If @var{delim} is the empty string, @code{mapfile} will terminate a line | |
4811 | when it reads a NUL character. | |
4812 | @item -n | |
4813 | Copy at most @var{count} lines. If @var{count} is 0, all lines are copied. | |
4814 | @item -O | |
4815 | Begin assigning to @var{array} at index @var{origin}. | |
4816 | The default index is 0. | |
4817 | @item -s | |
4818 | Discard the first @var{count} lines read. | |
4819 | @item -t | |
4820 | Remove a trailing @var{delim} (default newline) from each line read. | |
4821 | @item -u | |
4822 | Read lines from file descriptor @var{fd} instead of the standard input. | |
4823 | @item -C | |
4824 | Evaluate @var{callback} each time @var{quantum} lines are read. | |
4825 | The @option{-c} option specifies @var{quantum}. | |
4826 | @item -c | |
4827 | Specify the number of lines read between each call to @var{callback}. | |
4828 | @end table | |
4829 | ||
4830 | If @option{-C} is specified without @option{-c}, | |
4831 | the default quantum is 5000. | |
4832 | When @var{callback} is evaluated, it is supplied the index of the next | |
4833 | array element to be assigned and the line to be assigned to that element | |
4834 | as additional arguments. | |
4835 | @var{callback} is evaluated after the line is read but before the | |
4836 | array element is assigned. | |
4837 | ||
4838 | If not supplied with an explicit origin, @code{mapfile} will clear @var{array} | |
4839 | before assigning to it. | |
4840 | ||
4841 | @code{mapfile} returns successfully unless an invalid option or option | |
4842 | argument is supplied, @var{array} is invalid or unassignable, or @var{array} | |
4843 | is not an indexed array. | |
4844 | ||
4845 | @item printf | |
4846 | @btindex printf | |
4847 | @example | |
4848 | printf [-v @var{var}] @var{format} [@var{arguments}] | |
4849 | @end example | |
4850 | ||
4851 | Write the formatted @var{arguments} to the standard output under the | |
4852 | control of the @var{format}. | |
4853 | The @option{-v} option causes the output to be assigned to the variable | |
4854 | @var{var} rather than being printed to the standard output. | |
4855 | ||
4856 | The @var{format} is a character string which contains three types of objects: | |
4857 | plain characters, which are simply copied to standard output, character | |
4858 | escape sequences, which are converted and copied to the standard output, and | |
4859 | format specifications, each of which causes printing of the next successive | |
4860 | @var{argument}. | |
4861 | In addition to the standard @code{printf(1)} formats, @code{printf} | |
4862 | interprets the following extensions: | |
4863 | ||
4864 | @table @code | |
4865 | @item %b | |
4866 | Causes @code{printf} to expand backslash escape sequences in the | |
4867 | corresponding @var{argument} in the same way as @code{echo -e} | |
4868 | (@pxref{Bash Builtins}). | |
4869 | @item %q | |
4870 | Causes @code{printf} to output the | |
4871 | corresponding @var{argument} in a format that can be reused as shell input. | |
4872 | @item %Q | |
4873 | like @code{%q}, but applies any supplied precision to the @var{argument} | |
4874 | before quoting it. | |
4875 | @item %(@var{datefmt})T | |
4876 | Causes @code{printf} to output the date-time string resulting from using | |
4877 | @var{datefmt} as a format string for @code{strftime}(3). | |
4878 | The corresponding @var{argument} is an integer representing the number of | |
4879 | seconds since the epoch. | |
4880 | Two special argument values may be used: -1 represents the current | |
4881 | time, and -2 represents the time the shell was invoked. | |
4882 | If no argument is specified, conversion behaves as if -1 had been given. | |
4883 | This is an exception to the usual @code{printf} behavior. | |
4884 | @end table | |
4885 | ||
4886 | @noindent | |
4887 | The %b, %q, and %T directives all use the field width and precision | |
4888 | arguments from the format specification and write that many bytes from | |
4889 | (or use that wide a field for) the expanded argument, which usually | |
4890 | contains more characters than the original. | |
4891 | ||
4892 | Arguments to non-string format specifiers are treated as C language constants, | |
4893 | except that a leading plus or minus sign is allowed, and if the leading | |
4894 | character is a single or double quote, the value is the ASCII value of | |
4895 | the following character. | |
4896 | ||
4897 | The @var{format} is reused as necessary to consume all of the @var{arguments}. | |
4898 | If the @var{format} requires more @var{arguments} than are supplied, the | |
4899 | extra format specifications behave as if a zero value or null string, as | |
4900 | appropriate, had been supplied. The return value is zero on success, | |
4901 | non-zero on failure. | |
4902 | ||
4903 | @item read | |
4904 | @btindex read | |
4905 | @example | |
4906 | read [-ers] [-a @var{aname}] [-d @var{delim}] [-i @var{text}] [-n @var{nchars}] | |
4907 | [-N @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}] | |
4908 | @end example | |
4909 | ||
4910 | One line is read from the standard input, or from the file descriptor | |
4911 | @var{fd} supplied as an argument to the @option{-u} option, | |
4912 | split into words as described above in @ref{Word Splitting}, | |
4913 | and the first word | |
4914 | is assigned to the first @var{name}, the second word to the second @var{name}, | |
4915 | and so on. | |
4916 | If there are more words than names, | |
4917 | the remaining words and their intervening delimiters are assigned | |
4918 | to the last @var{name}. | |
4919 | If there are fewer words read from the input stream than names, | |
4920 | the remaining names are assigned empty values. | |
4921 | The characters in the value of the @env{IFS} variable | |
4922 | are used to split the line into words using the same rules the shell | |
4923 | uses for expansion (described above in @ref{Word Splitting}). | |
4924 | The backslash character @samp{\} may be used to remove any special | |
4925 | meaning for the next character read and for line continuation. | |
4926 | ||
4927 | Options, if supplied, have the following meanings: | |
4928 | ||
4929 | @table @code | |
4930 | @item -a @var{aname} | |
4931 | The words are assigned to sequential indices of the array variable | |
4932 | @var{aname}, starting at 0. | |
4933 | All elements are removed from @var{aname} before the assignment. | |
4934 | Other @var{name} arguments are ignored. | |
4935 | ||
4936 | @item -d @var{delim} | |
4937 | The first character of @var{delim} is used to terminate the input line, | |
4938 | rather than newline. | |
4939 | If @var{delim} is the empty string, @code{read} will terminate a line | |
4940 | when it reads a NUL character. | |
4941 | ||
4942 | @item -e | |
4943 | Readline (@pxref{Command Line Editing}) is used to obtain the line. | |
4944 | Readline uses the current (or default, if line editing was not previously | |
4945 | active) editing settings, but uses Readline's default filename completion. | |
4946 | ||
4947 | @item -i @var{text} | |
4948 | If Readline is being used to read the line, @var{text} is placed into | |
4949 | the editing buffer before editing begins. | |
4950 | ||
4951 | @item -n @var{nchars} | |
4952 | @code{read} returns after reading @var{nchars} characters rather than | |
4953 | waiting for a complete line of input, but honors a delimiter if fewer | |
4954 | than @var{nchars} characters are read before the delimiter. | |
4955 | ||
4956 | @item -N @var{nchars} | |
4957 | @code{read} returns after reading exactly @var{nchars} characters rather | |
4958 | than waiting for a complete line of input, unless EOF is encountered or | |
4959 | @code{read} times out. | |
4960 | Delimiter characters encountered in the input are | |
4961 | not treated specially and do not cause @code{read} to return until | |
4962 | @var{nchars} characters are read. | |
4963 | The result is not split on the characters in @code{IFS}; the intent is | |
4964 | that the variable is assigned exactly the characters read | |
4965 | (with the exception of backslash; see the @option{-r} option below). | |
4966 | ||
4967 | @item -p @var{prompt} | |
4968 | Display @var{prompt}, without a trailing newline, before attempting | |
4969 | to read any input. | |
4970 | The prompt is displayed only if input is coming from a terminal. | |
4971 | ||
4972 | @item -r | |
4973 | If this option is given, backslash does not act as an escape character. | |
4974 | The backslash is considered to be part of the line. | |
4975 | In particular, a backslash-newline pair may not then be used as a line | |
4976 | continuation. | |
4977 | ||
4978 | @item -s | |
4979 | Silent mode. If input is coming from a terminal, characters are | |
4980 | not echoed. | |
4981 | ||
4982 | @item -t @var{timeout} | |
4983 | Cause @code{read} to time out and return failure if a complete line of | |
4984 | input (or a specified number of characters) | |
4985 | is not read within @var{timeout} seconds. | |
4986 | @var{timeout} may be a decimal number with a fractional portion following | |
4987 | the decimal point. | |
4988 | This option is only effective if @code{read} is reading input from a | |
4989 | terminal, pipe, or other special file; it has no effect when reading | |
4990 | from regular files. | |
4991 | If @code{read} times out, @code{read} saves any partial input read into | |
4992 | the specified variable @var{name}. | |
4993 | If @var{timeout} is 0, @code{read} returns immediately, without trying to | |
4994 | read any data. | |
4995 | The exit status is 0 if input is available on the specified file descriptor, | |
4996 | or the read will return EOF, | |
4997 | non-zero otherwise. | |
4998 | The exit status is greater than 128 if the timeout is exceeded. | |
4999 | ||
5000 | @item -u @var{fd} | |
5001 | Read input from file descriptor @var{fd}. | |
5002 | @end table | |
5003 | ||
5004 | If no @var{name}s are supplied, the line read, | |
5005 | without the ending delimiter but otherwise unmodified, | |
5006 | is assigned to the | |
5007 | variable @env{REPLY}. | |
5008 | The exit status is zero, unless end-of-file is encountered, @code{read} | |
5009 | times out (in which case the status is greater than 128), | |
5010 | a variable assignment error (such as assigning to a readonly variable) occurs, | |
5011 | or an invalid file descriptor is supplied as the argument to @option{-u}. | |
5012 | ||
5013 | @item readarray | |
5014 | @btindex readarray | |
5015 | @example | |
5016 | readarray [-d @var{delim}] [-n @var{count}] [-O @var{origin}] [-s @var{count}] | |
5017 | [-t] [-u @var{fd}] [-C @var{callback}] [-c @var{quantum}] [@var{array}] | |
5018 | @end example | |
5019 | ||
5020 | Read lines from the standard input into the indexed array variable @var{array}, | |
5021 | or from file descriptor @var{fd} | |
5022 | if the @option{-u} option is supplied. | |
5023 | ||
5024 | A synonym for @code{mapfile}. | |
5025 | ||
5026 | @item source | |
5027 | @btindex source | |
5028 | @example | |
5029 | source @var{filename} | |
5030 | @end example | |
5031 | ||
5032 | A synonym for @code{.} (@pxref{Bourne Shell Builtins}). | |
5033 | ||
5034 | @item type | |
5035 | @btindex type | |
5036 | @example | |
5037 | type [-afptP] [@var{name} @dots{}] | |
5038 | @end example | |
5039 | ||
5040 | For each @var{name}, indicate how it would be interpreted if used as a | |
5041 | command name. | |
5042 | ||
5043 | If the @option{-t} option is used, @code{type} prints a single word | |
5044 | which is one of @samp{alias}, @samp{function}, @samp{builtin}, | |
5045 | @samp{file} or @samp{keyword}, | |
5046 | if @var{name} is an alias, shell function, shell builtin, | |
5047 | disk file, or shell reserved word, respectively. | |
5048 | If the @var{name} is not found, then nothing is printed, and | |
5049 | @code{type} returns a failure status. | |
5050 | ||
5051 | If the @option{-p} option is used, @code{type} either returns the name | |
5052 | of the disk file that would be executed, or nothing if @option{-t} | |
5053 | would not return @samp{file}. | |
5054 | ||
5055 | The @option{-P} option forces a path search for each @var{name}, even if | |
5056 | @option{-t} would not return @samp{file}. | |
5057 | ||
5058 | If a command is hashed, @option{-p} and @option{-P} print the hashed value, | |
5059 | which is not necessarily the file that appears first in @code{$PATH}. | |
5060 | ||
5061 | If the @option{-a} option is used, @code{type} returns all of the places | |
5062 | that contain an executable named @var{file}. | |
5063 | This includes aliases and functions, if and only if the @option{-p} option | |
5064 | is not also used. | |
5065 | ||
5066 | If the @option{-f} option is used, @code{type} does not attempt to find | |
5067 | shell functions, as with the @code{command} builtin. | |
5068 | ||
5069 | The return status is zero if all of the @var{name}s are found, non-zero | |
5070 | if any are not found. | |
5071 | ||
5072 | @item typeset | |
5073 | @btindex typeset | |
5074 | @example | |
5075 | typeset [-afFgrxilnrtux] [-p] [@var{name}[=@var{value}] @dots{}] | |
5076 | @end example | |
5077 | ||
5078 | The @code{typeset} command is supplied for compatibility with the Korn | |
5079 | shell. | |
5080 | It is a synonym for the @code{declare} builtin command. | |
5081 | ||
5082 | @item ulimit | |
5083 | @btindex ulimit | |
5084 | @example | |
5085 | ulimit [-HS] -a | |
5086 | ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [@var{limit}] | |
5087 | @end example | |
5088 | ||
5089 | @code{ulimit} provides control over the resources available to processes | |
5090 | started by the shell, on systems that allow such control. If an | |
5091 | option is given, it is interpreted as follows: | |
5092 | ||
5093 | @table @code | |
5094 | @item -S | |
5095 | Change and report the soft limit associated with a resource. | |
5096 | ||
5097 | @item -H | |
5098 | Change and report the hard limit associated with a resource. | |
5099 | ||
5100 | @item -a | |
5101 | All current limits are reported; no limits are set. | |
5102 | ||
5103 | @item -b | |
5104 | The maximum socket buffer size. | |
5105 | ||
5106 | @item -c | |
5107 | The maximum size of core files created. | |
5108 | ||
5109 | @item -d | |
5110 | The maximum size of a process's data segment. | |
5111 | ||
5112 | @item -e | |
5113 | The maximum scheduling priority ("nice"). | |
5114 | ||
5115 | @item -f | |
5116 | The maximum size of files written by the shell and its children. | |
5117 | ||
5118 | @item -i | |
5119 | The maximum number of pending signals. | |
5120 | ||
5121 | @item -k | |
5122 | The maximum number of kqueues that may be allocated. | |
5123 | ||
5124 | @item -l | |
5125 | The maximum size that may be locked into memory. | |
5126 | ||
5127 | @item -m | |
5128 | The maximum resident set size (many systems do not honor this limit). | |
5129 | ||
5130 | @item -n | |
5131 | The maximum number of open file descriptors (most systems do not | |
5132 | allow this value to be set). | |
5133 | ||
5134 | @item -p | |
5135 | The pipe buffer size. | |
5136 | ||
5137 | @item -q | |
5138 | The maximum number of bytes in @sc{posix} message queues. | |
5139 | ||
5140 | @item -r | |
5141 | The maximum real-time scheduling priority. | |
5142 | ||
5143 | @item -s | |
5144 | The maximum stack size. | |
5145 | ||
5146 | @item -t | |
5147 | The maximum amount of cpu time in seconds. | |
5148 | ||
5149 | @item -u | |
5150 | The maximum number of processes available to a single user. | |
5151 | ||
5152 | @item -v | |
5153 | The maximum amount of virtual memory available to the shell, and, on | |
5154 | some systems, to its children. | |
5155 | ||
5156 | @item -x | |
5157 | The maximum number of file locks. | |
5158 | ||
5159 | @item -P | |
5160 | The maximum number of pseudoterminals. | |
5161 | ||
5162 | @item -R | |
5163 | The maximum time a real-time process can run before blocking, in microseconds. | |
5164 | ||
5165 | @item -T | |
5166 | The maximum number of threads. | |
5167 | @end table | |
5168 | ||
5169 | If @var{limit} is given, and the @option{-a} option is not used, | |
5170 | @var{limit} is the new value of the specified resource. | |
5171 | The special @var{limit} values @code{hard}, @code{soft}, and | |
5172 | @code{unlimited} stand for the current hard limit, the current soft limit, | |
5173 | and no limit, respectively. | |
5174 | A hard limit cannot be increased by a non-root user once it is set; | |
5175 | a soft limit may be increased up to the value of the hard limit. | |
5176 | Otherwise, the current value of the soft limit for the specified resource | |
5177 | is printed, unless the @option{-H} option is supplied. | |
5178 | When more than one | |
5179 | resource is specified, the limit name and unit, if appropriate, | |
5180 | are printed before the value. | |
5181 | When setting new limits, if neither @option{-H} nor @option{-S} is supplied, | |
5182 | both the hard and soft limits are set. | |
5183 | If no option is given, then @option{-f} is assumed. Values are in 1024-byte | |
5184 | increments, except for | |
5185 | @option{-t}, which is in seconds; | |
5186 | @option{-R}, which is in microseconds; | |
5187 | @option{-p}, which is in units of 512-byte blocks; | |
5188 | @option{-P}, | |
5189 | @option{-T}, | |
5190 | @option{-b}, | |
5191 | @option{-k}, | |
5192 | @option{-n} and @option{-u}, which are unscaled values; | |
5193 | and, when in @sc{posix} Mode (@pxref{Bash POSIX Mode}), | |
5194 | @option{-c} and @option{-f}, which are in 512-byte increments. | |
5195 | ||
5196 | The return status is zero unless an invalid option or argument is supplied, | |
5197 | or an error occurs while setting a new limit. | |
5198 | ||
5199 | @item unalias | |
5200 | @btindex unalias | |
5201 | @example | |
5202 | unalias [-a] [@var{name} @dots{} ] | |
5203 | @end example | |
5204 | ||
5205 | Remove each @var{name} from the list of aliases. If @option{-a} is | |
5206 | supplied, all aliases are removed. | |
5207 | Aliases are described in @ref{Aliases}. | |
5208 | @end table | |
5209 | ||
5210 | @node Modifying Shell Behavior | |
5211 | @section Modifying Shell Behavior | |
5212 | ||
5213 | @menu | |
5214 | * The Set Builtin:: Change the values of shell attributes and | |
5215 | positional parameters. | |
5216 | * The Shopt Builtin:: Modify shell optional behavior. | |
5217 | @end menu | |
5218 | ||
5219 | @node The Set Builtin | |
5220 | @subsection The Set Builtin | |
5221 | ||
5222 | This builtin is so complicated that it deserves its own section. @code{set} | |
5223 | allows you to change the values of shell options and set the positional | |
5224 | parameters, or to display the names and values of shell variables. | |
5225 | ||
5226 | @table @code | |
5227 | @item set | |
5228 | @btindex set | |
5229 | @example | |
5230 | set [-abefhkmnptuvxBCEHPT] [-o @var{option-name}] [--] [-] [@var{argument} @dots{}] | |
5231 | set [+abefhkmnptuvxBCEHPT] [+o @var{option-name}] [--] [-] [@var{argument} @dots{}] | |
5232 | @end example | |
5233 | ||
5234 | If no options or arguments are supplied, @code{set} displays the names | |
5235 | and values of all shell variables and functions, sorted according to the | |
5236 | current locale, in a format that may be reused as input | |
5237 | for setting or resetting the currently-set variables. | |
5238 | Read-only variables cannot be reset. | |
5239 | In @sc{posix} mode, only shell variables are listed. | |
5240 | ||
5241 | When options are supplied, they set or unset shell attributes. | |
5242 | Options, if specified, have the following meanings: | |
5243 | ||
5244 | @table @code | |
5245 | @item -a | |
5246 | Each variable or function that is created or modified is given the | |
5247 | export attribute and marked for export to the environment of | |
5248 | subsequent commands. | |
5249 | ||
5250 | @item -b | |
5251 | Cause the status of terminated background jobs to be reported | |
5252 | immediately, rather than before printing the next primary prompt. | |
5253 | ||
5254 | @item -e | |
5255 | Exit immediately if | |
5256 | a pipeline (@pxref{Pipelines}), which may consist of a single simple command | |
5257 | (@pxref{Simple Commands}), | |
5258 | a list (@pxref{Lists}), | |
5259 | or a compound command (@pxref{Compound Commands}) | |
5260 | returns a non-zero status. | |
5261 | The shell does not exit if the command that fails is part of the | |
5262 | command list immediately following a @code{while} or @code{until} keyword, | |
5263 | part of the test in an @code{if} statement, | |
5264 | part of any command executed in a @code{&&} or @code{||} list except | |
5265 | the command following the final @code{&&} or @code{||}, | |
5266 | any command in a pipeline but the last, | |
5267 | or if the command's return status is being inverted with @code{!}. | |
5268 | If a compound command other than a subshell | |
5269 | returns a non-zero status because a command failed | |
5270 | while @option{-e} was being ignored, the shell does not exit. | |
5271 | A trap on @code{ERR}, if set, is executed before the shell exits. | |
5272 | ||
5273 | This option applies to the shell environment and each subshell environment | |
5274 | separately (@pxref{Command Execution Environment}), and may cause | |
5275 | subshells to exit before executing all the commands in the subshell. | |
5276 | ||
5277 | If a compound command or shell function executes in a context where | |
5278 | @option{-e} is being ignored, | |
5279 | none of the commands executed within the compound command or function body | |
5280 | will be affected by the @option{-e} setting, even if @option{-e} is set | |
5281 | and a command returns a failure status. | |
5282 | If a compound command or shell function sets @option{-e} while executing in | |
5283 | a context where @option{-e} is ignored, that setting will not have any | |
5284 | effect until the compound command or the command containing the function | |
5285 | call completes. | |
5286 | ||
5287 | @item -f | |
5288 | Disable filename expansion (globbing). | |
5289 | ||
5290 | @item -h | |
5291 | Locate and remember (hash) commands as they are looked up for execution. | |
5292 | This option is enabled by default. | |
5293 | ||
5294 | @item -k | |
5295 | All arguments in the form of assignment statements are placed | |
5296 | in the environment for a command, not just those that precede | |
5297 | the command name. | |
5298 | ||
5299 | @item -m | |
5300 | Job control is enabled (@pxref{Job Control}). | |
5301 | All processes run in a separate process group. | |
5302 | When a background job completes, the shell prints a line | |
5303 | containing its exit status. | |
5304 | ||
5305 | @item -n | |
5306 | Read commands but do not execute them. | |
5307 | This may be used to check a script for syntax errors. | |
5308 | This option is ignored by interactive shells. | |
5309 | ||
5310 | @item -o @var{option-name} | |
5311 | ||
5312 | Set the option corresponding to @var{option-name}: | |
5313 | ||
5314 | @table @code | |
5315 | @item allexport | |
5316 | Same as @code{-a}. | |
5317 | ||
5318 | @item braceexpand | |
5319 | Same as @code{-B}. | |
5320 | ||
5321 | @item emacs | |
5322 | Use an @code{emacs}-style line editing interface (@pxref{Command Line Editing}). | |
5323 | This also affects the editing interface used for @code{read -e}. | |
5324 | ||
5325 | @item errexit | |
5326 | Same as @code{-e}. | |
5327 | ||
5328 | @item errtrace | |
5329 | Same as @code{-E}. | |
5330 | ||
5331 | @item functrace | |
5332 | Same as @code{-T}. | |
5333 | ||
5334 | @item hashall | |
5335 | Same as @code{-h}. | |
5336 | ||
5337 | @item histexpand | |
5338 | Same as @code{-H}. | |
5339 | ||
5340 | @item history | |
5341 | Enable command history, as described in @ref{Bash History Facilities}. | |
5342 | This option is on by default in interactive shells. | |
5343 | ||
5344 | @item ignoreeof | |
5345 | An interactive shell will not exit upon reading EOF. | |
5346 | ||
5347 | @item keyword | |
5348 | Same as @code{-k}. | |
5349 | ||
5350 | @item monitor | |
5351 | Same as @code{-m}. | |
5352 | ||
5353 | @item noclobber | |
5354 | Same as @code{-C}. | |
5355 | ||
5356 | @item noexec | |
5357 | Same as @code{-n}. | |
5358 | ||
5359 | @item noglob | |
5360 | Same as @code{-f}. | |
5361 | ||
5362 | @item nolog | |
5363 | Currently ignored. | |
5364 | ||
5365 | @item notify | |
5366 | Same as @code{-b}. | |
5367 | ||
5368 | @item nounset | |
5369 | Same as @code{-u}. | |
5370 | ||
5371 | @item onecmd | |
5372 | Same as @code{-t}. | |
5373 | ||
5374 | @item physical | |
5375 | Same as @code{-P}. | |
5376 | ||
5377 | @item pipefail | |
5378 | If set, the return value of a pipeline is the value of the last | |
5379 | (rightmost) command to exit with a non-zero status, or zero if all | |
5380 | commands in the pipeline exit successfully. | |
5381 | This option is disabled by default. | |
5382 | ||
5383 | @item posix | |
5384 | Change the behavior of Bash where the default operation differs | |
5385 | from the @sc{posix} standard to match the standard | |
5386 | (@pxref{Bash POSIX Mode}). | |
5387 | This is intended to make Bash behave as a strict superset of that | |
5388 | standard. | |
5389 | ||
5390 | @item privileged | |
5391 | Same as @code{-p}. | |
5392 | ||
5393 | @item verbose | |
5394 | Same as @code{-v}. | |
5395 | ||
5396 | @item vi | |
5397 | Use a @code{vi}-style line editing interface. | |
5398 | This also affects the editing interface used for @code{read -e}. | |
5399 | ||
5400 | @item xtrace | |
5401 | Same as @code{-x}. | |
5402 | @end table | |
5403 | ||
5404 | @item -p | |
5405 | Turn on privileged mode. | |
5406 | In this mode, the @env{$BASH_ENV} and @env{$ENV} files are not | |
5407 | processed, shell functions are not inherited from the environment, | |
5408 | and the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH} and @env{GLOBIGNORE} | |
5409 | variables, if they appear in the environment, are ignored. | |
5410 | If the shell is started with the effective user (group) id not equal to the | |
5411 | real user (group) id, and the @option{-p} option is not supplied, these actions | |
5412 | are taken and the effective user id is set to the real user id. | |
5413 | If the @option{-p} option is supplied at startup, the effective user id is | |
5414 | not reset. | |
5415 | Turning this option off causes the effective user | |
5416 | and group ids to be set to the real user and group ids. | |
5417 | ||
5418 | @item -r | |
5419 | Enable restricted shell mode. | |
5420 | This option cannot be unset once it has been set. | |
5421 | ||
5422 | @item -t | |
5423 | Exit after reading and executing one command. | |
5424 | ||
5425 | @item -u | |
5426 | Treat unset variables and parameters other than the special parameters | |
5427 | @samp{@@} or @samp{*}, | |
5428 | or array variables subscripted with @samp{@@} or @samp{*}, | |
5429 | as an error when performing parameter expansion. | |
5430 | An error message will be written to the standard error, and a non-interactive | |
5431 | shell will exit. | |
5432 | ||
5433 | @item -v | |
5434 | Print shell input lines as they are read. | |
5435 | ||
5436 | @item -x | |
5437 | Print a trace of simple commands, @code{for} commands, @code{case} | |
5438 | commands, @code{select} commands, and arithmetic @code{for} commands | |
5439 | and their arguments or associated word lists after they are | |
5440 | expanded and before they are executed. The value of the @env{PS4} | |
5441 | variable is expanded and the resultant value is printed before | |
5442 | the command and its expanded arguments. | |
5443 | ||
5444 | @item -B | |
5445 | The shell will perform brace expansion (@pxref{Brace Expansion}). | |
5446 | This option is on by default. | |
5447 | ||
5448 | @item -C | |
5449 | Prevent output redirection using @samp{>}, @samp{>&}, and @samp{<>} | |
5450 | from overwriting existing files. | |
5451 | ||
5452 | @item -E | |
5453 | If set, any trap on @code{ERR} is inherited by shell functions, command | |
5454 | substitutions, and commands executed in a subshell environment. | |
5455 | The @code{ERR} trap is normally not inherited in such cases. | |
5456 | ||
5457 | @item -H | |
5458 | Enable @samp{!} style history substitution (@pxref{History Interaction}). | |
5459 | This option is on by default for interactive shells. | |
5460 | ||
5461 | @item -P | |
5462 | If set, do not resolve symbolic links when performing commands such as | |
5463 | @code{cd} which change the current directory. The physical directory | |
5464 | is used instead. By default, Bash follows | |
5465 | the logical chain of directories when performing commands | |
5466 | which change the current directory. | |
5467 | ||
5468 | For example, if @file{/usr/sys} is a symbolic link to @file{/usr/local/sys} | |
5469 | then: | |
5470 | @example | |
5471 | $ cd /usr/sys; echo $PWD | |
5472 | /usr/sys | |
5473 | $ cd ..; pwd | |
5474 | /usr | |
5475 | @end example | |
5476 | ||
5477 | @noindent | |
5478 | If @code{set -P} is on, then: | |
5479 | @example | |
5480 | $ cd /usr/sys; echo $PWD | |
5481 | /usr/local/sys | |
5482 | $ cd ..; pwd | |
5483 | /usr/local | |
5484 | @end example | |
5485 | ||
5486 | @item -T | |
5487 | If set, any trap on @code{DEBUG} and @code{RETURN} are inherited by | |
5488 | shell functions, command substitutions, and commands executed | |
5489 | in a subshell environment. | |
5490 | The @code{DEBUG} and @code{RETURN} traps are normally not inherited | |
5491 | in such cases. | |
5492 | ||
5493 | @item -- | |
5494 | If no arguments follow this option, then the positional parameters are | |
5495 | unset. Otherwise, the positional parameters are set to the | |
5496 | @var{arguments}, even if some of them begin with a @samp{-}. | |
5497 | ||
5498 | @item - | |
5499 | Signal the end of options, cause all remaining @var{arguments} | |
5500 | to be assigned to the positional parameters. The @option{-x} | |
5501 | and @option{-v} options are turned off. | |
5502 | If there are no arguments, the positional parameters remain unchanged. | |
5503 | @end table | |
5504 | ||
5505 | Using @samp{+} rather than @samp{-} causes these options to be | |
5506 | turned off. The options can also be used upon invocation of the | |
5507 | shell. The current set of options may be found in @code{$-}. | |
5508 | ||
5509 | The remaining N @var{arguments} are positional parameters and are | |
5510 | assigned, in order, to @code{$1}, @code{$2}, @dots{} @code{$N}. | |
5511 | The special parameter @code{#} is set to N. | |
5512 | ||
5513 | The return status is always zero unless an invalid option is supplied. | |
5514 | @end table | |
5515 | ||
5516 | @node The Shopt Builtin | |
5517 | @subsection The Shopt Builtin | |
5518 | ||
5519 | This builtin allows you to change additional shell optional behavior. | |
5520 | ||
5521 | @table @code | |
5522 | ||
5523 | @item shopt | |
5524 | @btindex shopt | |
5525 | @example | |
5526 | shopt [-pqsu] [-o] [@var{optname} @dots{}] | |
5527 | @end example | |
5528 | ||
5529 | Toggle the values of settings controlling optional shell behavior. | |
5530 | The settings can be either those listed below, or, if the | |
5531 | @option{-o} option is used, those available with the @option{-o} | |
5532 | option to the @code{set} builtin command (@pxref{The Set Builtin}). | |
5533 | With no options, or with the @option{-p} option, a list of all settable | |
5534 | options is displayed, with an indication of whether or not each is set; | |
5535 | if @var{optname}s are supplied, the output is restricted to those options. | |
5536 | The @option{-p} option causes output to be displayed in a form that | |
5537 | may be reused as input. | |
5538 | Other options have the following meanings: | |
5539 | ||
5540 | @table @code | |
5541 | @item -s | |
5542 | Enable (set) each @var{optname}. | |
5543 | ||
5544 | @item -u | |
5545 | Disable (unset) each @var{optname}. | |
5546 | ||
5547 | @item -q | |
5548 | Suppresses normal output; the return status | |
5549 | indicates whether the @var{optname} is set or unset. | |
5550 | If multiple @var{optname} arguments are given with @option{-q}, | |
5551 | the return status is zero if all @var{optname}s are enabled; | |
5552 | non-zero otherwise. | |
5553 | ||
5554 | @item -o | |
5555 | Restricts the values of | |
5556 | @var{optname} to be those defined for the @option{-o} option to the | |
5557 | @code{set} builtin (@pxref{The Set Builtin}). | |
5558 | @end table | |
5559 | ||
5560 | If either @option{-s} or @option{-u} | |
5561 | is used with no @var{optname} arguments, @code{shopt} shows only | |
5562 | those options which are set or unset, respectively. | |
5563 | ||
5564 | Unless otherwise noted, the @code{shopt} options are disabled (off) | |
5565 | by default. | |
5566 | ||
5567 | The return status when listing options is zero if all @var{optname}s | |
5568 | are enabled, non-zero otherwise. When setting or unsetting options, | |
5569 | the return status is zero unless an @var{optname} is not a valid shell | |
5570 | option. | |
5571 | ||
5572 | The list of @code{shopt} options is: | |
5573 | @table @code | |
5574 | ||
5575 | @item assoc_expand_once | |
5576 | If set, the shell suppresses multiple evaluation of associative array | |
5577 | subscripts during arithmetic expression evaluation, while executing | |
5578 | builtins that can perform variable assignments, | |
5579 | and while executing builtins that perform array dereferencing. | |
5580 | ||
5581 | @item autocd | |
5582 | If set, a command name that is the name of a directory is executed as if | |
5583 | it were the argument to the @code{cd} command. | |
5584 | This option is only used by interactive shells. | |
5585 | ||
5586 | @item cdable_vars | |
5587 | If this is set, an argument to the @code{cd} builtin command that | |
5588 | is not a directory is assumed to be the name of a variable whose | |
5589 | value is the directory to change to. | |
5590 | ||
5591 | @item cdspell | |
5592 | If set, minor errors in the spelling of a directory component in a | |
5593 | @code{cd} command will be corrected. | |
5594 | The errors checked for are transposed characters, | |
5595 | a missing character, and a character too many. | |
5596 | If a correction is found, the corrected path is printed, | |
5597 | and the command proceeds. | |
5598 | This option is only used by interactive shells. | |
5599 | ||
5600 | @item checkhash | |
5601 | If this is set, Bash checks that a command found in the hash | |
5602 | table exists before trying to execute it. If a hashed command no | |
5603 | longer exists, a normal path search is performed. | |
5604 | ||
5605 | @item checkjobs | |
5606 | If set, Bash lists the status of any stopped and running jobs before | |
5607 | exiting an interactive shell. If any jobs are running, this causes | |
5608 | the exit to be deferred until a second exit is attempted without an | |
5609 | intervening command (@pxref{Job Control}). | |
5610 | The shell always postpones exiting if any jobs are stopped. | |
5611 | ||
5612 | @item checkwinsize | |
5613 | If set, Bash checks the window size after each external (non-builtin) | |
5614 | command and, if necessary, updates the values of | |
5615 | @env{LINES} and @env{COLUMNS}. | |
5616 | This option is enabled by default. | |
5617 | ||
5618 | @item cmdhist | |
5619 | If set, Bash | |
5620 | attempts to save all lines of a multiple-line | |
5621 | command in the same history entry. This allows | |
5622 | easy re-editing of multi-line commands. | |
5623 | This option is enabled by default, but only has an effect if command | |
5624 | history is enabled (@pxref{Bash History Facilities}). | |
5625 | ||
5626 | @item compat31 | |
5627 | @itemx compat32 | |
5628 | @itemx compat40 | |
5629 | @itemx compat41 | |
5630 | @itemx compat42 | |
5631 | @itemx compat43 | |
5632 | @itemx compat44 | |
5633 | These control aspects of the shell's compatibility mode | |
5634 | (@pxref{Shell Compatibility Mode}). | |
5635 | ||
5636 | @item complete_fullquote | |
5637 | If set, Bash | |
5638 | quotes all shell metacharacters in filenames and directory names when | |
5639 | performing completion. | |
5640 | If not set, Bash | |
5641 | removes metacharacters such as the dollar sign from the set of | |
5642 | characters that will be quoted in completed filenames | |
5643 | when these metacharacters appear in shell variable references in words to be | |
5644 | completed. | |
5645 | This means that dollar signs in variable names that expand to directories | |
5646 | will not be quoted; | |
5647 | however, any dollar signs appearing in filenames will not be quoted, either. | |
5648 | This is active only when bash is using backslashes to quote completed | |
5649 | filenames. | |
5650 | This variable is set by default, which is the default Bash behavior in | |
5651 | versions through 4.2. | |
5652 | ||
5653 | @item direxpand | |
5654 | If set, Bash | |
5655 | replaces directory names with the results of word expansion when performing | |
5656 | filename completion. This changes the contents of the Readline editing | |
5657 | buffer. | |
5658 | If not set, Bash attempts to preserve what the user typed. | |
5659 | ||
5660 | @item dirspell | |
5661 | If set, Bash | |
5662 | attempts spelling correction on directory names during word completion | |
5663 | if the directory name initially supplied does not exist. | |
5664 | ||
5665 | @item dotglob | |
5666 | If set, Bash includes filenames beginning with a `.' in | |
5667 | the results of filename expansion. | |
5668 | The filenames @samp{.} and @samp{..} must always be matched explicitly, | |
5669 | even if @code{dotglob} is set. | |
5670 | ||
5671 | @item execfail | |
5672 | If this is set, a non-interactive shell will not exit if | |
5673 | it cannot execute the file specified as an argument to the @code{exec} | |
5674 | builtin command. An interactive shell does not exit if @code{exec} | |
5675 | fails. | |
5676 | ||
5677 | @item expand_aliases | |
5678 | If set, aliases are expanded as described below under Aliases, | |
5679 | @ref{Aliases}. | |
5680 | This option is enabled by default for interactive shells. | |
5681 | ||
5682 | @item extdebug | |
5683 | If set at shell invocation, | |
5684 | or in a shell startup file, | |
5685 | arrange to execute the debugger profile | |
5686 | before the shell starts, identical to the @option{--debugger} option. | |
5687 | If set after invocation, behavior intended for use by debuggers is enabled: | |
5688 | ||
5689 | @enumerate | |
5690 | @item | |
5691 | The @option{-F} option to the @code{declare} builtin (@pxref{Bash Builtins}) | |
5692 | displays the source file name and line number corresponding to each function | |
5693 | name supplied as an argument. | |
5694 | ||
5695 | @item | |
5696 | If the command run by the @code{DEBUG} trap returns a non-zero value, the | |
5697 | next command is skipped and not executed. | |
5698 | ||
5699 | @item | |
5700 | If the command run by the @code{DEBUG} trap returns a value of 2, and the | |
5701 | shell is executing in a subroutine (a shell function or a shell script | |
5702 | executed by the @code{.} or @code{source} builtins), the shell simulates | |
5703 | a call to @code{return}. | |
5704 | ||
5705 | @item | |
5706 | @code{BASH_ARGC} and @code{BASH_ARGV} are updated as described in their | |
5707 | descriptions (@pxref{Bash Variables}). | |
5708 | ||
5709 | @item | |
5710 | Function tracing is enabled: command substitution, shell functions, and | |
5711 | subshells invoked with @code{( @var{command} )} inherit the | |
5712 | @code{DEBUG} and @code{RETURN} traps. | |
5713 | ||
5714 | @item | |
5715 | Error tracing is enabled: command substitution, shell functions, and | |
5716 | subshells invoked with @code{( @var{command} )} inherit the | |
5717 | @code{ERR} trap. | |
5718 | @end enumerate | |
5719 | ||
5720 | @item extglob | |
5721 | If set, the extended pattern matching features described above | |
5722 | (@pxref{Pattern Matching}) are enabled. | |
5723 | ||
5724 | @item extquote | |
5725 | If set, @code{$'@var{string}'} and @code{$"@var{string}"} quoting is | |
5726 | performed within @code{$@{@var{parameter}@}} expansions | |
5727 | enclosed in double quotes. This option is enabled by default. | |
5728 | ||
5729 | @item failglob | |
5730 | If set, patterns which fail to match filenames during filename expansion | |
5731 | result in an expansion error. | |
5732 | ||
5733 | @item force_fignore | |
5734 | If set, the suffixes specified by the @env{FIGNORE} shell variable | |
5735 | cause words to be ignored when performing word completion even if | |
5736 | the ignored words are the only possible completions. | |
5737 | @xref{Bash Variables}, for a description of @env{FIGNORE}. | |
5738 | This option is enabled by default. | |
5739 | ||
5740 | @item globasciiranges | |
5741 | If set, range expressions used in pattern matching bracket expressions | |
5742 | (@pxref{Pattern Matching}) | |
5743 | behave as if in the traditional C locale when performing | |
5744 | comparisons. That is, the current locale's collating sequence | |
5745 | is not taken into account, so | |
5746 | @samp{b} will not collate between @samp{A} and @samp{B}, | |
5747 | and upper-case and lower-case ASCII characters will collate together. | |
5748 | ||
5749 | @item globskipdots | |
5750 | If set, filename expansion will never match the filenames | |
5751 | @samp{.} and @samp{..}, | |
5752 | even if the pattern begins with a @samp{.}. | |
5753 | This option is enabled by default. | |
5754 | ||
5755 | @item globstar | |
5756 | If set, the pattern @samp{**} used in a filename expansion context will | |
5757 | match all files and zero or more directories and subdirectories. | |
5758 | If the pattern is followed by a @samp{/}, only directories and | |
5759 | subdirectories match. | |
5760 | ||
5761 | @item gnu_errfmt | |
5762 | If set, shell error messages are written in the standard @sc{gnu} error | |
5763 | message format. | |
5764 | ||
5765 | @item histappend | |
5766 | If set, the history list is appended to the file named by the value | |
5767 | of the @env{HISTFILE} | |
5768 | variable when the shell exits, rather than overwriting the file. | |
5769 | ||
5770 | @item histreedit | |
5771 | If set, and Readline | |
5772 | is being used, a user is given the opportunity to re-edit a | |
5773 | failed history substitution. | |
5774 | ||
5775 | @item histverify | |
5776 | If set, and Readline | |
5777 | is being used, the results of history substitution are not immediately | |
5778 | passed to the shell parser. Instead, the resulting line is loaded into | |
5779 | the Readline editing buffer, allowing further modification. | |
5780 | ||
5781 | @item hostcomplete | |
5782 | If set, and Readline is being used, Bash will attempt to perform | |
5783 | hostname completion when a word containing a @samp{@@} is being | |
5784 | completed (@pxref{Commands For Completion}). This option is enabled | |
5785 | by default. | |
5786 | ||
5787 | @item huponexit | |
5788 | If set, Bash will send @code{SIGHUP} to all jobs when an interactive | |
5789 | login shell exits (@pxref{Signals}). | |
5790 | ||
5791 | @item inherit_errexit | |
5792 | If set, command substitution inherits the value of the @code{errexit} option, | |
5793 | instead of unsetting it in the subshell environment. | |
5794 | This option is enabled when @sc{posix} mode is enabled. | |
5795 | ||
5796 | @item interactive_comments | |
5797 | Allow a word beginning with @samp{#} | |
5798 | to cause that word and all remaining characters on that | |
5799 | line to be ignored in an interactive shell. | |
5800 | This option is enabled by default. | |
5801 | ||
5802 | @item lastpipe | |
5803 | If set, and job control is not active, the shell runs the last command of | |
5804 | a pipeline not executed in the background in the current shell environment. | |
5805 | ||
5806 | @item lithist | |
5807 | If enabled, and the @code{cmdhist} | |
5808 | option is enabled, multi-line commands are saved to the history with | |
5809 | embedded newlines rather than using semicolon separators where possible. | |
5810 | ||
5811 | @item localvar_inherit | |
5812 | If set, local variables inherit the value and attributes of a variable of | |
5813 | the same name that exists at a previous scope before any new value is | |
5814 | assigned. The @code{nameref} attribute is not inherited. | |
5815 | ||
5816 | @item localvar_unset | |
5817 | If set, calling @code{unset} on local variables in previous function scopes | |
5818 | marks them so subsequent lookups find them unset until that function | |
5819 | returns. This is identical to the behavior of unsetting local variables | |
5820 | at the current function scope. | |
5821 | ||
5822 | @item login_shell | |
5823 | The shell sets this option if it is started as a login shell | |
5824 | (@pxref{Invoking Bash}). | |
5825 | The value may not be changed. | |
5826 | ||
5827 | @item mailwarn | |
5828 | If set, and a file that Bash is checking for mail has been | |
5829 | accessed since the last time it was checked, the message | |
5830 | @code{"The mail in @var{mailfile} has been read"} is displayed. | |
5831 | ||
5832 | @item no_empty_cmd_completion | |
5833 | If set, and Readline is being used, Bash will not attempt to search | |
5834 | the @env{PATH} for possible completions when completion is attempted | |
5835 | on an empty line. | |
5836 | ||
5837 | @item nocaseglob | |
5838 | If set, Bash matches filenames in a case-insensitive fashion when | |
5839 | performing filename expansion. | |
5840 | ||
5841 | @item nocasematch | |
5842 | If set, Bash matches patterns in a case-insensitive fashion when | |
5843 | performing matching while executing @code{case} or @code{[[} | |
5844 | conditional commands (@pxref{Conditional Constructs}, | |
5845 | when performing pattern substitution word expansions, | |
5846 | or when filtering possible completions as part of programmable completion. | |
5847 | ||
5848 | @item noexpand_translation | |
5849 | If set, Bash | |
5850 | encloses the translated results of $"..." quoting in single quotes | |
5851 | instead of double quotes. | |
5852 | If the string is not translated, this has no effect. | |
5853 | ||
5854 | @item nullglob | |
5855 | If set, Bash allows filename patterns which match no | |
5856 | files to expand to a null string, rather than themselves. | |
5857 | ||
5858 | @item patsub_replacement | |
5859 | If set, Bash | |
5860 | expands occurrences of @samp{&} in the replacement string of pattern | |
5861 | substitution to the text matched by the pattern, as described | |
5862 | above (@pxref{Shell Parameter Expansion}). | |
5863 | This option is enabled by default. | |
5864 | ||
5865 | @item progcomp | |
5866 | If set, the programmable completion facilities | |
5867 | (@pxref{Programmable Completion}) are enabled. | |
5868 | This option is enabled by default. | |
5869 | ||
5870 | @item progcomp_alias | |
5871 | If set, and programmable completion is enabled, Bash treats a command | |
5872 | name that doesn't have any completions as a possible alias and attempts | |
5873 | alias expansion. If it has an alias, Bash attempts programmable | |
5874 | completion using the command word resulting from the expanded alias. | |
5875 | ||
5876 | @item promptvars | |
5877 | If set, prompt strings undergo | |
5878 | parameter expansion, command substitution, arithmetic | |
5879 | expansion, and quote removal after being expanded | |
5880 | as described below (@pxref{Controlling the Prompt}). | |
5881 | This option is enabled by default. | |
5882 | ||
5883 | @item restricted_shell | |
5884 | The shell sets this option if it is started in restricted mode | |
5885 | (@pxref{The Restricted Shell}). | |
5886 | The value may not be changed. | |
5887 | This is not reset when the startup files are executed, allowing | |
5888 | the startup files to discover whether or not a shell is restricted. | |
5889 | ||
5890 | @item shift_verbose | |
5891 | If this is set, the @code{shift} | |
5892 | builtin prints an error message when the shift count exceeds the | |
5893 | number of positional parameters. | |
5894 | ||
5895 | @item sourcepath | |
5896 | If set, the @code{.} (@code{source}) builtin uses the value of @env{PATH} | |
5897 | to find the directory containing the file supplied as an argument. | |
5898 | This option is enabled by default. | |
5899 | ||
5900 | @item varredir_close | |
5901 | If set, the shell automatically closes file descriptors assigned using the | |
5902 | @code{@{varname@}} redirection syntax (@pxref{Redirections}) instead of | |
5903 | leaving them open when the command completes. | |
5904 | ||
5905 | @item xpg_echo | |
5906 | If set, the @code{echo} builtin expands backslash-escape sequences | |
5907 | by default. | |
5908 | ||
5909 | @end table | |
5910 | @end table | |
5911 | ||
5912 | @node Special Builtins | |
5913 | @section Special Builtins | |
5914 | @cindex special builtin | |
5915 | ||
5916 | For historical reasons, the @sc{posix} standard has classified | |
5917 | several builtin commands as @emph{special}. | |
5918 | When Bash is executing in @sc{posix} mode, the special builtins | |
5919 | differ from other builtin commands in three respects: | |
5920 | ||
5921 | @enumerate | |
5922 | @item | |
5923 | Special builtins are found before shell functions during command lookup. | |
5924 | ||
5925 | @item | |
5926 | If a special builtin returns an error status, a non-interactive shell exits. | |
5927 | ||
5928 | @item | |
5929 | Assignment statements preceding the command stay in effect in the shell | |
5930 | environment after the command completes. | |
5931 | @end enumerate | |
5932 | ||
5933 | When Bash is not executing in @sc{posix} mode, these builtins behave no | |
5934 | differently than the rest of the Bash builtin commands. | |
5935 | The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}. | |
5936 | ||
5937 | These are the @sc{posix} special builtins: | |
5938 | @example | |
5939 | @w{break : . continue eval exec exit export readonly return set} | |
5940 | @w{shift trap unset} | |
5941 | @end example | |
5942 | ||
5943 | @node Shell Variables | |
5944 | @chapter Shell Variables | |
5945 | ||
5946 | @menu | |
5947 | * Bourne Shell Variables:: Variables which Bash uses in the same way | |
5948 | as the Bourne Shell. | |
5949 | * Bash Variables:: List of variables that exist in Bash. | |
5950 | @end menu | |
5951 | ||
5952 | This chapter describes the shell variables that Bash uses. | |
5953 | Bash automatically assigns default values to a number of variables. | |
5954 | ||
5955 | @node Bourne Shell Variables | |
5956 | @section Bourne Shell Variables | |
5957 | ||
5958 | Bash uses certain shell variables in the same way as the Bourne shell. | |
5959 | In some cases, Bash assigns a default value to the variable. | |
5960 | ||
5961 | @vtable @code | |
5962 | ||
5963 | @item CDPATH | |
5964 | A colon-separated list of directories used as a search path for | |
5965 | the @code{cd} builtin command. | |
5966 | ||
5967 | @item HOME | |
5968 | The current user's home directory; the default for the @code{cd} builtin | |
5969 | command. | |
5970 | The value of this variable is also used by tilde expansion | |
5971 | (@pxref{Tilde Expansion}). | |
5972 | ||
5973 | @item IFS | |
5974 | A list of characters that separate fields; used when the shell splits | |
5975 | words as part of expansion. | |
5976 | ||
5977 | @item MAIL | |
5978 | If this parameter is set to a filename or directory name | |
5979 | and the @env{MAILPATH} variable | |
5980 | is not set, Bash informs the user of the arrival of mail in | |
5981 | the specified file or Maildir-format directory. | |
5982 | ||
5983 | @item MAILPATH | |
5984 | A colon-separated list of filenames which the shell periodically checks | |
5985 | for new mail. | |
5986 | Each list entry can specify the message that is printed when new mail | |
5987 | arrives in the mail file by separating the filename from the message with | |
5988 | a @samp{?}. | |
5989 | When used in the text of the message, @code{$_} expands to the name of | |
5990 | the current mail file. | |
5991 | ||
5992 | @item OPTARG | |
5993 | The value of the last option argument processed by the @code{getopts} builtin. | |
5994 | ||
5995 | @item OPTIND | |
5996 | The index of the last option argument processed by the @code{getopts} builtin. | |
5997 | ||
5998 | @item PATH | |
5999 | A colon-separated list of directories in which the shell looks for | |
6000 | commands. | |
6001 | A zero-length (null) directory name in the value of @code{PATH} indicates the | |
6002 | current directory. | |
6003 | A null directory name may appear as two adjacent colons, or as an initial | |
6004 | or trailing colon. | |
6005 | ||
6006 | @item PS1 | |
6007 | The primary prompt string. The default value is @samp{\s-\v\$ }. | |
6008 | @xref{Controlling the Prompt}, for the complete list of escape | |
6009 | sequences that are expanded before @env{PS1} is displayed. | |
6010 | ||
6011 | @item PS2 | |
6012 | The secondary prompt string. The default value is @samp{> }. | |
6013 | @env{PS2} is expanded in the same way as @env{PS1} before being | |
6014 | displayed. | |
6015 | ||
6016 | @end vtable | |
6017 | ||
6018 | @node Bash Variables | |
6019 | @section Bash Variables | |
6020 | ||
6021 | These variables are set or used by Bash, but other shells | |
6022 | do not normally treat them specially. | |
6023 | ||
6024 | A few variables used by Bash are described in different chapters: | |
6025 | variables for controlling the job control facilities | |
6026 | (@pxref{Job Control Variables}). | |
6027 | ||
6028 | @vtable @code | |
6029 | ||
6030 | @item _ | |
6031 | @vindex $_ | |
6032 | ($_, an underscore.) | |
6033 | At shell startup, set to the pathname used to invoke the | |
6034 | shell or shell script being executed as passed in the environment | |
6035 | or argument list. | |
6036 | Subsequently, expands to the last argument to the previous simple | |
6037 | command executed in the foreground, after expansion. | |
6038 | Also set to the full pathname used to invoke each command executed | |
6039 | and placed in the environment exported to that command. | |
6040 | When checking mail, this parameter holds the name of the mail file. | |
6041 | ||
6042 | @item BASH | |
6043 | The full pathname used to execute the current instance of Bash. | |
6044 | ||
6045 | @item BASHOPTS | |
6046 | A colon-separated list of enabled shell options. Each word in | |
6047 | the list is a valid argument for the @option{-s} option to the | |
6048 | @code{shopt} builtin command (@pxref{The Shopt Builtin}). | |
6049 | The options appearing in @env{BASHOPTS} are those reported | |
6050 | as @samp{on} by @samp{shopt}. | |
6051 | If this variable is in the environment when Bash | |
6052 | starts up, each shell option in the list will be enabled before | |
6053 | reading any startup files. This variable is readonly. | |
6054 | ||
6055 | @item BASHPID | |
6056 | Expands to the process ID of the current Bash process. | |
6057 | This differs from @code{$$} under certain circumstances, such as subshells | |
6058 | that do not require Bash to be re-initialized. | |
6059 | Assignments to @env{BASHPID} have no effect. | |
6060 | If @env{BASHPID} | |
6061 | is unset, it loses its special properties, even if it is | |
6062 | subsequently reset. | |
6063 | ||
6064 | @item BASH_ALIASES | |
6065 | An associative array variable whose members correspond to the internal | |
6066 | list of aliases as maintained by the @code{alias} builtin. | |
6067 | (@pxref{Bourne Shell Builtins}). | |
6068 | Elements added to this array appear in the alias list; however, | |
6069 | unsetting array elements currently does not cause aliases to be removed | |
6070 | from the alias list. | |
6071 | If @env{BASH_ALIASES} | |
6072 | is unset, it loses its special properties, even if it is | |
6073 | subsequently reset. | |
6074 | ||
6075 | @item BASH_ARGC | |
6076 | An array variable whose values are the number of parameters in each | |
6077 | frame of the current bash execution call stack. The number of | |
6078 | parameters to the current subroutine (shell function or script executed | |
6079 | with @code{.} or @code{source}) is at the top of the stack. When a | |
6080 | subroutine is executed, the number of parameters passed is pushed onto | |
6081 | @code{BASH_ARGC}. | |
6082 | The shell sets @code{BASH_ARGC} only when in extended debugging mode | |
6083 | (see @ref{The Shopt Builtin} | |
6084 | for a description of the @code{extdebug} option to the @code{shopt} | |
6085 | builtin). | |
6086 | Setting @code{extdebug} after the shell has started to execute a script, | |
6087 | or referencing this variable when @code{extdebug} is not set, | |
6088 | may result in inconsistent values. | |
6089 | ||
6090 | @item BASH_ARGV | |
6091 | An array variable containing all of the parameters in the current bash | |
6092 | execution call stack. The final parameter of the last subroutine call | |
6093 | is at the top of the stack; the first parameter of the initial call is | |
6094 | at the bottom. When a subroutine is executed, the parameters supplied | |
6095 | are pushed onto @code{BASH_ARGV}. | |
6096 | The shell sets @code{BASH_ARGV} only when in extended debugging mode | |
6097 | (see @ref{The Shopt Builtin} | |
6098 | for a description of the @code{extdebug} option to the @code{shopt} | |
6099 | builtin). | |
6100 | Setting @code{extdebug} after the shell has started to execute a script, | |
6101 | or referencing this variable when @code{extdebug} is not set, | |
6102 | may result in inconsistent values. | |
6103 | ||
6104 | @item BASH_ARGV0 | |
6105 | When referenced, this variable expands to the name of the shell or shell | |
6106 | script (identical to @code{$0}; @xref{Special Parameters}, | |
6107 | for the description of special parameter 0). | |
6108 | Assignment to @code{BASH_ARGV0} | |
6109 | causes the value assigned to also be assigned to @code{$0}. | |
6110 | If @env{BASH_ARGV0} | |
6111 | is unset, it loses its special properties, even if it is | |
6112 | subsequently reset. | |
6113 | ||
6114 | @item BASH_CMDS | |
6115 | An associative array variable whose members correspond to the internal | |
6116 | hash table of commands as maintained by the @code{hash} builtin | |
6117 | (@pxref{Bourne Shell Builtins}). | |
6118 | Elements added to this array appear in the hash table; however, | |
6119 | unsetting array elements currently does not cause command names to be removed | |
6120 | from the hash table. | |
6121 | If @env{BASH_CMDS} | |
6122 | is unset, it loses its special properties, even if it is | |
6123 | subsequently reset. | |
6124 | ||
6125 | @item BASH_COMMAND | |
6126 | The command currently being executed or about to be executed, unless the | |
6127 | shell is executing a command as the result of a trap, | |
6128 | in which case it is the command executing at the time of the trap. | |
6129 | If @env{BASH_COMMAND} | |
6130 | is unset, it loses its special properties, even if it is | |
6131 | subsequently reset. | |
6132 | ||
6133 | @item BASH_COMPAT | |
6134 | The value is used to set the shell's compatibility level. | |
6135 | @xref{Shell Compatibility Mode}, for a description of the various | |
6136 | compatibility levels and their effects. | |
6137 | The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42) | |
6138 | corresponding to the desired compatibility level. | |
6139 | If @env{BASH_COMPAT} is unset or set to the empty string, the compatibility | |
6140 | level is set to the default for the current version. | |
6141 | If @env{BASH_COMPAT} is set to a value that is not one of the valid | |
6142 | compatibility levels, the shell prints an error message and sets the | |
6143 | compatibility level to the default for the current version. | |
6144 | The valid values correspond to the compatibility levels | |
6145 | described below (@pxref{Shell Compatibility Mode}). | |
6146 | For example, 4.2 and 42 are valid values that correspond | |
6147 | to the @code{compat42} @code{shopt} option | |
6148 | and set the compatibility level to 42. | |
6149 | The current version is also a valid value. | |
6150 | ||
6151 | @item BASH_ENV | |
6152 | If this variable is set when Bash is invoked to execute a shell | |
6153 | script, its value is expanded and used as the name of a startup file | |
6154 | to read before executing the script. @xref{Bash Startup Files}. | |
6155 | ||
6156 | @item BASH_EXECUTION_STRING | |
6157 | The command argument to the @option{-c} invocation option. | |
6158 | ||
6159 | @item BASH_LINENO | |
6160 | An array variable whose members are the line numbers in source files | |
6161 | where each corresponding member of @env{FUNCNAME} was invoked. | |
6162 | @code{$@{BASH_LINENO[$i]@}} is the line number in the source file | |
6163 | (@code{$@{BASH_SOURCE[$i+1]@}}) where | |
6164 | @code{$@{FUNCNAME[$i]@}} was called (or @code{$@{BASH_LINENO[$i-1]@}} if | |
6165 | referenced within another shell function). | |
6166 | Use @code{LINENO} to obtain the current line number. | |
6167 | ||
6168 | @item BASH_LOADABLES_PATH | |
6169 | A colon-separated list of directories in which the shell looks for | |
6170 | dynamically loadable builtins specified by the | |
6171 | @code{enable} command. | |
6172 | ||
6173 | @item BASH_REMATCH | |
6174 | An array variable whose members are assigned by the @samp{=~} binary | |
6175 | operator to the @code{[[} conditional command | |
6176 | (@pxref{Conditional Constructs}). | |
6177 | The element with index 0 is the portion of the string | |
6178 | matching the entire regular expression. | |
6179 | The element with index @var{n} is the portion of the | |
6180 | string matching the @var{n}th parenthesized subexpression. | |
6181 | ||
6182 | @item BASH_SOURCE | |
6183 | An array variable whose members are the source filenames where the | |
6184 | corresponding shell function names in the @code{FUNCNAME} array | |
6185 | variable are defined. | |
6186 | The shell function @code{$@{FUNCNAME[$i]@}} is defined in the file | |
6187 | @code{$@{BASH_SOURCE[$i]@}} and called from @code{$@{BASH_SOURCE[$i+1]@}} | |
6188 | ||
6189 | @item BASH_SUBSHELL | |
6190 | Incremented by one within each subshell or subshell environment when | |
6191 | the shell begins executing in that environment. | |
6192 | The initial value is 0. | |
6193 | If @env{BASH_SUBSHELL} | |
6194 | is unset, it loses its special properties, even if it is | |
6195 | subsequently reset. | |
6196 | ||
6197 | @item BASH_VERSINFO | |
6198 | A readonly array variable (@pxref{Arrays}) | |
6199 | whose members hold version information for this instance of Bash. | |
6200 | The values assigned to the array members are as follows: | |
6201 | ||
6202 | @table @code | |
6203 | ||
6204 | @item BASH_VERSINFO[0] | |
6205 | The major version number (the @dfn{release}). | |
6206 | ||
6207 | @item BASH_VERSINFO[1] | |
6208 | The minor version number (the @dfn{version}). | |
6209 | ||
6210 | @item BASH_VERSINFO[2] | |
6211 | The patch level. | |
6212 | ||
6213 | @item BASH_VERSINFO[3] | |
6214 | The build version. | |
6215 | ||
6216 | @item BASH_VERSINFO[4] | |
6217 | The release status (e.g., @code{beta1}). | |
6218 | ||
6219 | @item BASH_VERSINFO[5] | |
6220 | The value of @env{MACHTYPE}. | |
6221 | @end table | |
6222 | ||
6223 | @item BASH_VERSION | |
6224 | The version number of the current instance of Bash. | |
6225 | ||
6226 | @item BASH_XTRACEFD | |
6227 | If set to an integer corresponding to a valid file descriptor, Bash | |
6228 | will write the trace output generated when @samp{set -x} | |
6229 | is enabled to that file descriptor. | |
6230 | This allows tracing output to be separated from diagnostic and error | |
6231 | messages. | |
6232 | The file descriptor is closed when @code{BASH_XTRACEFD} is unset or assigned | |
6233 | a new value. | |
6234 | Unsetting @code{BASH_XTRACEFD} or assigning it the empty string causes the | |
6235 | trace output to be sent to the standard error. | |
6236 | Note that setting @code{BASH_XTRACEFD} to 2 (the standard error file | |
6237 | descriptor) and then unsetting it will result in the standard error | |
6238 | being closed. | |
6239 | ||
6240 | @item CHILD_MAX | |
6241 | Set the number of exited child status values for the shell to remember. | |
6242 | Bash will not allow this value to be decreased below a @sc{posix}-mandated | |
6243 | minimum, and there is a maximum value (currently 8192) that this may | |
6244 | not exceed. | |
6245 | The minimum value is system-dependent. | |
6246 | ||
6247 | @item COLUMNS | |
6248 | Used by the @code{select} command to determine the terminal width | |
6249 | when printing selection lists. | |
6250 | Automatically set if the @code{checkwinsize} option is enabled | |
6251 | (@pxref{The Shopt Builtin}), or in an interactive shell upon receipt of a | |
6252 | @code{SIGWINCH}. | |
6253 | ||
6254 | @item COMP_CWORD | |
6255 | An index into @env{$@{COMP_WORDS@}} of the word containing the current | |
6256 | cursor position. | |
6257 | This variable is available only in shell functions invoked by the | |
6258 | programmable completion facilities (@pxref{Programmable Completion}). | |
6259 | ||
6260 | @item COMP_LINE | |
6261 | The current command line. | |
6262 | This variable is available only in shell functions and external | |
6263 | commands invoked by the | |
6264 | programmable completion facilities (@pxref{Programmable Completion}). | |
6265 | ||
6266 | @item COMP_POINT | |
6267 | The index of the current cursor position relative to the beginning of | |
6268 | the current command. | |
6269 | If the current cursor position is at the end of the current command, | |
6270 | the value of this variable is equal to @code{$@{#COMP_LINE@}}. | |
6271 | This variable is available only in shell functions and external | |
6272 | commands invoked by the | |
6273 | programmable completion facilities (@pxref{Programmable Completion}). | |
6274 | ||
6275 | @item COMP_TYPE | |
6276 | Set to an integer value corresponding to the type of completion attempted | |
6277 | that caused a completion function to be called: | |
6278 | @key{TAB}, for normal completion, | |
6279 | @samp{?}, for listing completions after successive tabs, | |
6280 | @samp{!}, for listing alternatives on partial word completion, | |
6281 | @samp{@@}, to list completions if the word is not unmodified, | |
6282 | or | |
6283 | @samp{%}, for menu completion. | |
6284 | This variable is available only in shell functions and external | |
6285 | commands invoked by the | |
6286 | programmable completion facilities (@pxref{Programmable Completion}). | |
6287 | ||
6288 | @item COMP_KEY | |
6289 | The key (or final key of a key sequence) used to invoke the current | |
6290 | completion function. | |
6291 | ||
6292 | @item COMP_WORDBREAKS | |
6293 | The set of characters that the Readline library treats as word | |
6294 | separators when performing word completion. | |
6295 | If @env{COMP_WORDBREAKS} | |
6296 | is unset, it loses its special properties, | |
6297 | even if it is subsequently reset. | |
6298 | ||
6299 | @item COMP_WORDS | |
6300 | An array variable consisting of the individual | |
6301 | words in the current command line. | |
6302 | The line is split into words as Readline would split it, using | |
6303 | @code{COMP_WORDBREAKS} as described above. | |
6304 | This variable is available only in shell functions invoked by the | |
6305 | programmable completion facilities (@pxref{Programmable Completion}). | |
6306 | ||
6307 | @item COMPREPLY | |
6308 | An array variable from which Bash reads the possible completions | |
6309 | generated by a shell function invoked by the programmable completion | |
6310 | facility (@pxref{Programmable Completion}). | |
6311 | Each array element contains one possible completion. | |
6312 | ||
6313 | @item COPROC | |
6314 | An array variable created to hold the file descriptors | |
6315 | for output from and input to an unnamed coprocess (@pxref{Coprocesses}). | |
6316 | ||
6317 | @item DIRSTACK | |
6318 | An array variable containing the current contents of the directory stack. | |
6319 | Directories appear in the stack in the order they are displayed by the | |
6320 | @code{dirs} builtin. | |
6321 | Assigning to members of this array variable may be used to modify | |
6322 | directories already in the stack, but the @code{pushd} and @code{popd} | |
6323 | builtins must be used to add and remove directories. | |
6324 | Assignment to this variable will not change the current directory. | |
6325 | If @env{DIRSTACK} | |
6326 | is unset, it loses its special properties, even if | |
6327 | it is subsequently reset. | |
6328 | ||
6329 | @item EMACS | |
6330 | If Bash finds this variable in the environment when the shell | |
6331 | starts with value @samp{t}, it assumes that the shell is running in an | |
6332 | Emacs shell buffer and disables line editing. | |
6333 | ||
6334 | @item ENV | |
6335 | Expanded and executed similarly to @code{BASH_ENV} | |
6336 | (@pxref{Bash Startup Files}) | |
6337 | when an interactive shell is invoked in | |
6338 | @sc{posix} Mode (@pxref{Bash POSIX Mode}). | |
6339 | ||
6340 | @item EPOCHREALTIME | |
6341 | Each time this parameter is referenced, it expands to the number of seconds | |
6342 | since the Unix Epoch as a floating point value with micro-second granularity | |
6343 | (see the documentation for the C library function @code{time} for the | |
6344 | definition of Epoch). | |
6345 | Assignments to @env{EPOCHREALTIME} are ignored. | |
6346 | If @env{EPOCHREALTIME} | |
6347 | is unset, it loses its special properties, even if | |
6348 | it is subsequently reset. | |
6349 | ||
6350 | @item EPOCHSECONDS | |
6351 | Each time this parameter is referenced, it expands to the number of seconds | |
6352 | since the Unix Epoch (see the documentation for the C library function | |
6353 | @code{time} for the definition of Epoch). | |
6354 | Assignments to @env{EPOCHSECONDS} are ignored. | |
6355 | If @env{EPOCHSECONDS} | |
6356 | is unset, it loses its special properties, even if | |
6357 | it is subsequently reset. | |
6358 | ||
6359 | @item EUID | |
6360 | The numeric effective user id of the current user. This variable | |
6361 | is readonly. | |
6362 | ||
6363 | @item EXECIGNORE | |
6364 | A colon-separated list of shell patterns (@pxref{Pattern Matching}) | |
6365 | defining the list of filenames to be ignored by command search using | |
6366 | @code{PATH}. | |
6367 | Files whose full pathnames match one of these patterns are not considered | |
6368 | executable files for the purposes of completion and command execution | |
6369 | via @code{PATH} lookup. | |
6370 | This does not affect the behavior of the @code{[}, @code{test}, and @code{[[} | |
6371 | commands. | |
6372 | Full pathnames in the command hash table are not subject to @code{EXECIGNORE}. | |
6373 | Use this variable to ignore shared library files that have the executable | |
6374 | bit set, but are not executable files. | |
6375 | The pattern matching honors the setting of the @code{extglob} shell | |
6376 | option. | |
6377 | ||
6378 | @item FCEDIT | |
6379 | The editor used as a default by the @option{-e} option to the @code{fc} | |
6380 | builtin command. | |
6381 | ||
6382 | @item FIGNORE | |
6383 | A colon-separated list of suffixes to ignore when performing | |
6384 | filename completion. | |
6385 | A filename whose suffix matches one of the entries in | |
6386 | @env{FIGNORE} | |
6387 | is excluded from the list of matched filenames. A sample | |
6388 | value is @samp{.o:~} | |
6389 | ||
6390 | @item FUNCNAME | |
6391 | An array variable containing the names of all shell functions | |
6392 | currently in the execution call stack. | |
6393 | The element with index 0 is the name of any currently-executing | |
6394 | shell function. | |
6395 | The bottom-most element (the one with the highest index) | |
6396 | is @code{"main"}. | |
6397 | This variable exists only when a shell function is executing. | |
6398 | Assignments to @env{FUNCNAME} have no effect. | |
6399 | If @env{FUNCNAME} | |
6400 | is unset, it loses its special properties, even if | |
6401 | it is subsequently reset. | |
6402 | ||
6403 | This variable can be used with @code{BASH_LINENO} and @code{BASH_SOURCE}. | |
6404 | Each element of @code{FUNCNAME} has corresponding elements in | |
6405 | @code{BASH_LINENO} and @code{BASH_SOURCE} to describe the call stack. | |
6406 | For instance, @code{$@{FUNCNAME[$i]@}} was called from the file | |
6407 | @code{$@{BASH_SOURCE[$i+1]@}} at line number @code{$@{BASH_LINENO[$i]@}}. | |
6408 | The @code{caller} builtin displays the current call stack using this | |
6409 | information. | |
6410 | ||
6411 | @item FUNCNEST | |
6412 | If set to a numeric value greater than 0, defines a maximum function | |
6413 | nesting level. Function invocations that exceed this nesting level | |
6414 | will cause the current command to abort. | |
6415 | ||
6416 | @item GLOBIGNORE | |
6417 | A colon-separated list of patterns defining the set of file names to | |
6418 | be ignored by filename expansion. | |
6419 | If a file name matched by a filename expansion pattern also matches one | |
6420 | of the patterns in @env{GLOBIGNORE}, it is removed from the list | |
6421 | of matches. | |
6422 | The pattern matching honors the setting of the @code{extglob} shell | |
6423 | option. | |
6424 | ||
6425 | @item GROUPS | |
6426 | An array variable containing the list of groups of which the current | |
6427 | user is a member. | |
6428 | Assignments to @env{GROUPS} have no effect. | |
6429 | If @env{GROUPS} | |
6430 | is unset, it loses its special properties, even if it is | |
6431 | subsequently reset. | |
6432 | ||
6433 | @item histchars | |
6434 | Up to three characters which control history expansion, quick | |
6435 | substitution, and tokenization (@pxref{History Interaction}). | |
6436 | The first character is the | |
6437 | @dfn{history expansion} character, that is, the character which signifies the | |
6438 | start of a history expansion, normally @samp{!}. The second character is the | |
6439 | character which signifies `quick substitution' when seen as the first | |
6440 | character on a line, normally @samp{^}. The optional third character is the | |
6441 | character which indicates that the remainder of the line is a comment when | |
6442 | found as the first character of a word, usually @samp{#}. The history | |
6443 | comment character causes history substitution to be skipped for the | |
6444 | remaining words on the line. It does not necessarily cause the shell | |
6445 | parser to treat the rest of the line as a comment. | |
6446 | ||
6447 | @item HISTCMD | |
6448 | The history number, or index in the history list, of the current | |
6449 | command. | |
6450 | Assignments to @env{HISTCMD} are ignored. | |
6451 | If @env{HISTCMD} | |
6452 | is unset, it loses its special properties, | |
6453 | even if it is subsequently reset. | |
6454 | ||
6455 | @item HISTCONTROL | |
6456 | A colon-separated list of values controlling how commands are saved on | |
6457 | the history list. | |
6458 | If the list of values includes @samp{ignorespace}, lines which begin | |
6459 | with a space character are not saved in the history list. | |
6460 | A value of @samp{ignoredups} causes lines which match the previous | |
6461 | history entry to not be saved. | |
6462 | A value of @samp{ignoreboth} is shorthand for | |
6463 | @samp{ignorespace} and @samp{ignoredups}. | |
6464 | A value of @samp{erasedups} causes all previous lines matching the | |
6465 | current line to be removed from the history list before that line | |
6466 | is saved. | |
6467 | Any value not in the above list is ignored. | |
6468 | If @env{HISTCONTROL} is unset, or does not include a valid value, | |
6469 | all lines read by the shell parser are saved on the history list, | |
6470 | subject to the value of @env{HISTIGNORE}. | |
6471 | The second and subsequent lines of a multi-line compound command are | |
6472 | not tested, and are added to the history regardless of the value of | |
6473 | @env{HISTCONTROL}. | |
6474 | ||
6475 | @item HISTFILE | |
6476 | The name of the file to which the command history is saved. The | |
6477 | default value is @file{~/.bash_history}. | |
6478 | ||
6479 | @item HISTFILESIZE | |
6480 | The maximum number of lines contained in the history file. | |
6481 | When this variable is assigned a value, the history file is truncated, | |
6482 | if necessary, to contain no more than that number of lines | |
6483 | by removing the oldest entries. | |
6484 | The history file is also truncated to this size after | |
6485 | writing it when a shell exits. | |
6486 | If the value is 0, the history file is truncated to zero size. | |
6487 | Non-numeric values and numeric values less than zero inhibit truncation. | |
6488 | The shell sets the default value to the value of @env{HISTSIZE} | |
6489 | after reading any startup files. | |
6490 | ||
6491 | @item HISTIGNORE | |
6492 | A colon-separated list of patterns used to decide which command | |
6493 | lines should be saved on the history list. Each pattern is | |
6494 | anchored at the beginning of the line and must match the complete | |
6495 | line (no implicit @samp{*} is appended). Each pattern is tested | |
6496 | against the line after the checks specified by @env{HISTCONTROL} | |
6497 | are applied. In addition to the normal shell pattern matching | |
6498 | characters, @samp{&} matches the previous history line. @samp{&} | |
6499 | may be escaped using a backslash; the backslash is removed | |
6500 | before attempting a match. | |
6501 | The second and subsequent lines of a multi-line compound command are | |
6502 | not tested, and are added to the history regardless of the value of | |
6503 | @env{HISTIGNORE}. | |
6504 | The pattern matching honors the setting of the @code{extglob} shell | |
6505 | option. | |
6506 | ||
6507 | @env{HISTIGNORE} subsumes the function of @env{HISTCONTROL}. A | |
6508 | pattern of @samp{&} is identical to @code{ignoredups}, and a | |
6509 | pattern of @samp{[ ]*} is identical to @code{ignorespace}. | |
6510 | Combining these two patterns, separating them with a colon, | |
6511 | provides the functionality of @code{ignoreboth}. | |
6512 | ||
6513 | @item HISTSIZE | |
6514 | The maximum number of commands to remember on the history list. | |
6515 | If the value is 0, commands are not saved in the history list. | |
6516 | Numeric values less than zero result in every command being saved | |
6517 | on the history list (there is no limit). | |
6518 | The shell sets the default value to 500 after reading any startup files. | |
6519 | ||
6520 | @item HISTTIMEFORMAT | |
6521 | If this variable is set and not null, its value is used as a format string | |
6522 | for @code{strftime} to print the time stamp associated with each history | |
6523 | entry displayed by the @code{history} builtin. | |
6524 | If this variable is set, time stamps are written to the history file so | |
6525 | they may be preserved across shell sessions. | |
6526 | This uses the history comment character to distinguish timestamps from | |
6527 | other history lines. | |
6528 | ||
6529 | @item HOSTFILE | |
6530 | Contains the name of a file in the same format as @file{/etc/hosts} that | |
6531 | should be read when the shell needs to complete a hostname. | |
6532 | The list of possible hostname completions may be changed while the shell | |
6533 | is running; | |
6534 | the next time hostname completion is attempted after the | |
6535 | value is changed, Bash adds the contents of the new file to the | |
6536 | existing list. | |
6537 | If @env{HOSTFILE} is set, but has no value, or does not name a readable file, | |
6538 | Bash attempts to read | |
6539 | @file{/etc/hosts} to obtain the list of possible hostname completions. | |
6540 | When @env{HOSTFILE} is unset, the hostname list is cleared. | |
6541 | ||
6542 | @item HOSTNAME | |
6543 | The name of the current host. | |
6544 | ||
6545 | @item HOSTTYPE | |
6546 | A string describing the machine Bash is running on. | |
6547 | ||
6548 | @item IGNOREEOF | |
6549 | Controls the action of the shell on receipt of an @code{EOF} character | |
6550 | as the sole input. If set, the value denotes the number | |
6551 | of consecutive @code{EOF} characters that can be read as the | |
6552 | first character on an input line | |
6553 | before the shell will exit. If the variable exists but does not | |
6554 | have a numeric value, or has no value, then the default is 10. | |
6555 | If the variable does not exist, then @code{EOF} signifies the end of | |
6556 | input to the shell. This is only in effect for interactive shells. | |
6557 | ||
6558 | @item INPUTRC | |
6559 | The name of the Readline initialization file, overriding the default | |
6560 | of @file{~/.inputrc}. | |
6561 | ||
6562 | @item INSIDE_EMACS | |
6563 | If Bash finds this variable in the environment when the shell | |
6564 | starts, it assumes that the shell is running in an Emacs shell buffer | |
6565 | and may disable line editing depending on the value of @env{TERM}. | |
6566 | ||
6567 | @item LANG | |
6568 | Used to determine the locale category for any category not specifically | |
6569 | selected with a variable starting with @code{LC_}. | |
6570 | ||
6571 | @item LC_ALL | |
6572 | This variable overrides the value of @env{LANG} and any other | |
6573 | @code{LC_} variable specifying a locale category. | |
6574 | ||
6575 | @item LC_COLLATE | |
6576 | This variable determines the collation order used when sorting the | |
6577 | results of filename expansion, and | |
6578 | determines the behavior of range expressions, equivalence classes, | |
6579 | and collating sequences within filename expansion and pattern matching | |
6580 | (@pxref{Filename Expansion}). | |
6581 | ||
6582 | @item LC_CTYPE | |
6583 | This variable determines the interpretation of characters and the | |
6584 | behavior of character classes within filename expansion and pattern | |
6585 | matching (@pxref{Filename Expansion}). | |
6586 | ||
6587 | @item LC_MESSAGES | |
6588 | This variable determines the locale used to translate double-quoted | |
6589 | strings preceded by a @samp{$} (@pxref{Locale Translation}). | |
6590 | ||
6591 | @item LC_NUMERIC | |
6592 | This variable determines the locale category used for number formatting. | |
6593 | ||
6594 | @item LC_TIME | |
6595 | This variable determines the locale category used for data and time | |
6596 | formatting. | |
6597 | ||
6598 | @item LINENO | |
6599 | The line number in the script or shell function currently executing. | |
6600 | If @env{LINENO} | |
6601 | is unset, it loses its special properties, even if it is | |
6602 | subsequently reset. | |
6603 | ||
6604 | @item LINES | |
6605 | Used by the @code{select} command to determine the column length | |
6606 | for printing selection lists. | |
6607 | Automatically set if the @code{checkwinsize} option is enabled | |
6608 | (@pxref{The Shopt Builtin}), or in an interactive shell upon receipt of a | |
6609 | @code{SIGWINCH}. | |
6610 | ||
6611 | @item MACHTYPE | |
6612 | A string that fully describes the system type on which Bash | |
6613 | is executing, in the standard @sc{gnu} @var{cpu-company-system} format. | |
6614 | ||
6615 | @item MAILCHECK | |
6616 | How often (in seconds) that the shell should check for mail in the | |
6617 | files specified in the @env{MAILPATH} or @env{MAIL} variables. | |
6618 | The default is 60 seconds. When it is time to check | |
6619 | for mail, the shell does so before displaying the primary prompt. | |
6620 | If this variable is unset, or set to a value that is not a number | |
6621 | greater than or equal to zero, the shell disables mail checking. | |
6622 | ||
6623 | @item MAPFILE | |
6624 | An array variable created to hold the text read by the | |
6625 | @code{mapfile} builtin when no variable name is supplied. | |
6626 | ||
6627 | @item OLDPWD | |
6628 | The previous working directory as set by the @code{cd} builtin. | |
6629 | ||
6630 | @item OPTERR | |
6631 | If set to the value 1, Bash displays error messages | |
6632 | generated by the @code{getopts} builtin command. | |
6633 | ||
6634 | @item OSTYPE | |
6635 | A string describing the operating system Bash is running on. | |
6636 | ||
6637 | @item PIPESTATUS | |
6638 | An array variable (@pxref{Arrays}) | |
6639 | containing a list of exit status values from the processes | |
6640 | in the most-recently-executed foreground pipeline (which may | |
6641 | contain only a single command). | |
6642 | ||
6643 | @item POSIXLY_CORRECT | |
6644 | If this variable is in the environment when Bash starts, the shell | |
6645 | enters @sc{posix} mode (@pxref{Bash POSIX Mode}) before reading the | |
6646 | startup files, as if the @option{--posix} invocation option had been supplied. | |
6647 | If it is set while the shell is running, Bash enables @sc{posix} mode, | |
6648 | as if the command | |
6649 | @example | |
6650 | @code{set -o posix} | |
6651 | @end example | |
6652 | @noindent | |
6653 | had been executed. | |
6654 | When the shell enters @sc{posix} mode, it sets this variable if it was | |
6655 | not already set. | |
6656 | ||
6657 | @item PPID | |
6658 | The process @sc{id} of the shell's parent process. This variable | |
6659 | is readonly. | |
6660 | ||
6661 | @item PROMPT_COMMAND | |
6662 | If this variable is set, and is an array, | |
6663 | the value of each set element is interpreted as a command to execute | |
6664 | before printing the primary prompt (@env{$PS1}). | |
6665 | If this is set but not an array variable, | |
6666 | its value is used as a command to execute instead. | |
6667 | ||
6668 | @item PROMPT_DIRTRIM | |
6669 | If set to a number greater than zero, the value is used as the number of | |
6670 | trailing directory components to retain when expanding the @code{\w} and | |
6671 | @code{\W} prompt string escapes (@pxref{Controlling the Prompt}). | |
6672 | Characters removed are replaced with an ellipsis. | |
6673 | ||
6674 | @item PS0 | |
6675 | The value of this parameter is expanded like @env{PS1} | |
6676 | and displayed by interactive shells after reading a command | |
6677 | and before the command is executed. | |
6678 | ||
6679 | @item PS3 | |
6680 | The value of this variable is used as the prompt for the | |
6681 | @code{select} command. If this variable is not set, the | |
6682 | @code{select} command prompts with @samp{#? } | |
6683 | ||
6684 | @item PS4 | |
6685 | The value of this parameter is expanded like @env{PS1} | |
6686 | and the expanded value is the prompt printed before the command line | |
6687 | is echoed when the @option{-x} option is set (@pxref{The Set Builtin}). | |
6688 | The first character of the expanded value is replicated multiple times, | |
6689 | as necessary, to indicate multiple levels of indirection. | |
6690 | The default is @samp{+ }. | |
6691 | ||
6692 | @item PWD | |
6693 | The current working directory as set by the @code{cd} builtin. | |
6694 | ||
6695 | @item RANDOM | |
6696 | Each time this parameter is referenced, it expands to a random integer | |
6697 | between 0 and 32767. Assigning a value to this | |
6698 | variable seeds the random number generator. | |
6699 | If @env{RANDOM} | |
6700 | is unset, it loses its special properties, even if it is | |
6701 | subsequently reset. | |
6702 | ||
6703 | @item READLINE_ARGUMENT | |
6704 | Any numeric argument given to a Readline command that was defined using | |
6705 | @samp{bind -x} (@pxref{Bash Builtins} | |
6706 | when it was invoked. | |
6707 | ||
6708 | @item READLINE_LINE | |
6709 | The contents of the Readline line buffer, for use | |
6710 | with @samp{bind -x} (@pxref{Bash Builtins}). | |
6711 | ||
6712 | @item READLINE_MARK | |
6713 | The position of the @dfn{mark} (saved insertion point) in the | |
6714 | Readline line buffer, for use | |
6715 | with @samp{bind -x} (@pxref{Bash Builtins}). | |
6716 | The characters between the insertion point and the mark are often | |
6717 | called the @dfn{region}. | |
6718 | ||
6719 | @item READLINE_POINT | |
6720 | The position of the insertion point in the Readline line buffer, for use | |
6721 | with @samp{bind -x} (@pxref{Bash Builtins}). | |
6722 | ||
6723 | @item REPLY | |
6724 | The default variable for the @code{read} builtin. | |
6725 | ||
6726 | @item SECONDS | |
6727 | This variable expands to the number of seconds since the shell was started. | |
6728 | Assignment to this variable resets the count to the value assigned, and the | |
6729 | expanded value becomes the value assigned plus the number of seconds | |
6730 | since the assignment. | |
6731 | The number of seconds at shell invocation and the current time are always | |
6732 | determined by querying the system clock. | |
6733 | If @env{SECONDS} | |
6734 | is unset, it loses its special properties, | |
6735 | even if it is subsequently reset. | |
6736 | ||
6737 | @item SHELL | |
6738 | This environment variable expands to the full pathname to the shell. | |
6739 | If it is not set when the shell starts, | |
6740 | Bash assigns to it the full pathname of the current user's login shell. | |
6741 | ||
6742 | @item SHELLOPTS | |
6743 | A colon-separated list of enabled shell options. Each word in | |
6744 | the list is a valid argument for the @option{-o} option to the | |
6745 | @code{set} builtin command (@pxref{The Set Builtin}). | |
6746 | The options appearing in @env{SHELLOPTS} are those reported | |
6747 | as @samp{on} by @samp{set -o}. | |
6748 | If this variable is in the environment when Bash | |
6749 | starts up, each shell option in the list will be enabled before | |
6750 | reading any startup files. This variable is readonly. | |
6751 | ||
6752 | @item SHLVL | |
6753 | Incremented by one each time a new instance of Bash is started. This is | |
6754 | intended to be a count of how deeply your Bash shells are nested. | |
6755 | ||
6756 | @item SRANDOM | |
6757 | This variable expands to a 32-bit pseudo-random number each time it is | |
6758 | referenced. The random number generator is not linear on systems that | |
6759 | support @file{/dev/urandom} or @code{arc4random}, so each returned number | |
6760 | has no relationship to the numbers preceding it. | |
6761 | The random number generator cannot be seeded, so assignments to this | |
6762 | variable have no effect. | |
6763 | If @env{SRANDOM} | |
6764 | is unset, it loses its special properties, | |
6765 | even if it is subsequently reset. | |
6766 | ||
6767 | @item TIMEFORMAT | |
6768 | The value of this parameter is used as a format string specifying | |
6769 | how the timing information for pipelines prefixed with the @code{time} | |
6770 | reserved word should be displayed. | |
6771 | The @samp{%} character introduces an | |
6772 | escape sequence that is expanded to a time value or other | |
6773 | information. | |
6774 | The escape sequences and their meanings are as | |
6775 | follows; the braces denote optional portions. | |
6776 | ||
6777 | @table @code | |
6778 | ||
6779 | @item %% | |
6780 | A literal @samp{%}. | |
6781 | ||
6782 | @item %[@var{p}][l]R | |
6783 | The elapsed time in seconds. | |
6784 | ||
6785 | @item %[@var{p}][l]U | |
6786 | The number of CPU seconds spent in user mode. | |
6787 | ||
6788 | @item %[@var{p}][l]S | |
6789 | The number of CPU seconds spent in system mode. | |
6790 | ||
6791 | @item %P | |
6792 | The CPU percentage, computed as (%U + %S) / %R. | |
6793 | @end table | |
6794 | ||
6795 | The optional @var{p} is a digit specifying the precision, the number of | |
6796 | fractional digits after a decimal point. | |
6797 | A value of 0 causes no decimal point or fraction to be output. | |
6798 | At most three places after the decimal point may be specified; values | |
6799 | of @var{p} greater than 3 are changed to 3. | |
6800 | If @var{p} is not specified, the value 3 is used. | |
6801 | ||
6802 | The optional @code{l} specifies a longer format, including minutes, of | |
6803 | the form @var{MM}m@var{SS}.@var{FF}s. | |
6804 | The value of @var{p} determines whether or not the fraction is included. | |
6805 | ||
6806 | If this variable is not set, Bash acts as if it had the value | |
6807 | @example | |
6808 | @code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'} | |
6809 | @end example | |
6810 | If the value is null, no timing information is displayed. | |
6811 | A trailing newline is added when the format string is displayed. | |
6812 | ||
6813 | @item TMOUT | |
6814 | If set to a value greater than zero, @code{TMOUT} is treated as the | |
6815 | default timeout for the @code{read} builtin (@pxref{Bash Builtins}). | |
6816 | The @code{select} command (@pxref{Conditional Constructs}) terminates | |
6817 | if input does not arrive after @code{TMOUT} seconds when input is coming | |
6818 | from a terminal. | |
6819 | ||
6820 | In an interactive shell, the value is interpreted as | |
6821 | the number of seconds to wait for a line of input after issuing | |
6822 | the primary prompt. | |
6823 | Bash | |
6824 | terminates after waiting for that number of seconds if a complete | |
6825 | line of input does not arrive. | |
6826 | ||
6827 | @item TMPDIR | |
6828 | If set, Bash uses its value as the name of a directory in which | |
6829 | Bash creates temporary files for the shell's use. | |
6830 | ||
6831 | @item UID | |
6832 | The numeric real user id of the current user. This variable is readonly. | |
6833 | ||
6834 | @end vtable | |
6835 | ||
6836 | @node Bash Features | |
6837 | @chapter Bash Features | |
6838 | ||
6839 | This chapter describes features unique to Bash. | |
6840 | ||
6841 | @menu | |
6842 | * Invoking Bash:: Command line options that you can give | |
6843 | to Bash. | |
6844 | * Bash Startup Files:: When and how Bash executes scripts. | |
6845 | * Interactive Shells:: What an interactive shell is. | |
6846 | * Bash Conditional Expressions:: Primitives used in composing expressions for | |
6847 | the @code{test} builtin. | |
6848 | * Shell Arithmetic:: Arithmetic on shell variables. | |
6849 | * Aliases:: Substituting one command for another. | |
6850 | * Arrays:: Array Variables. | |
6851 | * The Directory Stack:: History of visited directories. | |
6852 | * Controlling the Prompt:: Customizing the various prompt strings. | |
6853 | * The Restricted Shell:: A more controlled mode of shell execution. | |
6854 | * Bash POSIX Mode:: Making Bash behave more closely to what | |
6855 | the POSIX standard specifies. | |
6856 | * Shell Compatibility Mode:: How Bash supports behavior that was present | |
6857 | in earlier versions and has changed. | |
6858 | @end menu | |
6859 | ||
6860 | @node Invoking Bash | |
6861 | @section Invoking Bash | |
6862 | ||
6863 | @example | |
6864 | bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}] | |
6865 | [-O @var{shopt_option}] [@var{argument} @dots{}] | |
6866 | bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}] | |
6867 | [-O @var{shopt_option}] -c @var{string} [@var{argument} @dots{}] | |
6868 | bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}] | |
6869 | [-O @var{shopt_option}] [@var{argument} @dots{}] | |
6870 | @end example | |
6871 | ||
6872 | All of the single-character options used with the @code{set} builtin | |
6873 | (@pxref{The Set Builtin}) can be used as options when the shell is invoked. | |
6874 | In addition, there are several multi-character | |
6875 | options that you can use. These options must appear on the command | |
6876 | line before the single-character options to be recognized. | |
6877 | ||
6878 | @table @code | |
6879 | @item --debugger | |
6880 | Arrange for the debugger profile to be executed before the shell | |
6881 | starts. Turns on extended debugging mode (see @ref{The Shopt Builtin} | |
6882 | for a description of the @code{extdebug} option to the @code{shopt} | |
6883 | builtin). | |
6884 | ||
6885 | @item --dump-po-strings | |
6886 | A list of all double-quoted strings preceded by @samp{$} | |
6887 | is printed on the standard output | |
6888 | in the @sc{gnu} @code{gettext} PO (portable object) file format. | |
6889 | Equivalent to @option{-D} except for the output format. | |
6890 | ||
6891 | @item --dump-strings | |
6892 | Equivalent to @option{-D}. | |
6893 | ||
6894 | @item --help | |
6895 | Display a usage message on standard output and exit successfully. | |
6896 | ||
6897 | @item --init-file @var{filename} | |
6898 | @itemx --rcfile @var{filename} | |
6899 | Execute commands from @var{filename} (instead of @file{~/.bashrc}) | |
6900 | in an interactive shell. | |
6901 | ||
6902 | @item --login | |
6903 | Equivalent to @option{-l}. | |
6904 | ||
6905 | @item --noediting | |
6906 | Do not use the @sc{gnu} Readline library (@pxref{Command Line Editing}) | |
6907 | to read command lines when the shell is interactive. | |
6908 | ||
6909 | @item --noprofile | |
6910 | Don't load the system-wide startup file @file{/etc/profile} | |
6911 | or any of the personal initialization files | |
6912 | @file{~/.bash_profile}, @file{~/.bash_login}, or @file{~/.profile} | |
6913 | when Bash is invoked as a login shell. | |
6914 | ||
6915 | @item --norc | |
6916 | Don't read the @file{~/.bashrc} initialization file in an | |
6917 | interactive shell. This is on by default if the shell is | |
6918 | invoked as @code{sh}. | |
6919 | ||
6920 | @item --posix | |
6921 | Change the behavior of Bash where the default operation differs | |
6922 | from the @sc{posix} standard to match the standard. This | |
6923 | is intended to make Bash behave as a strict superset of that | |
6924 | standard. @xref{Bash POSIX Mode}, for a description of the Bash | |
6925 | @sc{posix} mode. | |
6926 | ||
6927 | @item --restricted | |
6928 | Make the shell a restricted shell (@pxref{The Restricted Shell}). | |
6929 | ||
6930 | @item --verbose | |
6931 | Equivalent to @option{-v}. Print shell input lines as they're read. | |
6932 | ||
6933 | @item --version | |
6934 | Show version information for this instance of | |
6935 | Bash on the standard output and exit successfully. | |
6936 | @end table | |
6937 | ||
6938 | There are several single-character options that may be supplied at | |
6939 | invocation which are not available with the @code{set} builtin. | |
6940 | ||
6941 | @table @code | |
6942 | @item -c | |
6943 | Read and execute commands from the first non-option argument | |
6944 | @var{command_string}, then exit. | |
6945 | If there are arguments after the @var{command_string}, | |
6946 | the first argument is assigned to @code{$0} | |
6947 | and any remaining arguments are assigned to the positional parameters. | |
6948 | The assignment to @code{$0} sets the name of the shell, which is used | |
6949 | in warning and error messages. | |
6950 | ||
6951 | @item -i | |
6952 | Force the shell to run interactively. Interactive shells are | |
6953 | described in @ref{Interactive Shells}. | |
6954 | ||
6955 | @item -l | |
6956 | Make this shell act as if it had been directly invoked by login. | |
6957 | When the shell is interactive, this is equivalent to starting a | |
6958 | login shell with @samp{exec -l bash}. | |
6959 | When the shell is not interactive, the login shell startup files will | |
6960 | be executed. | |
6961 | @samp{exec bash -l} or @samp{exec bash --login} | |
6962 | will replace the current shell with a Bash login shell. | |
6963 | @xref{Bash Startup Files}, for a description of the special behavior | |
6964 | of a login shell. | |
6965 | ||
6966 | @item -r | |
6967 | Make the shell a restricted shell (@pxref{The Restricted Shell}). | |
6968 | ||
6969 | @item -s | |
6970 | If this option is present, or if no arguments remain after option | |
6971 | processing, then commands are read from the standard input. | |
6972 | This option allows the positional parameters to be set | |
6973 | when invoking an interactive shell or when reading input | |
6974 | through a pipe. | |
6975 | ||
6976 | @item -D | |
6977 | A list of all double-quoted strings preceded by @samp{$} | |
6978 | is printed on the standard output. | |
6979 | These are the strings that | |
6980 | are subject to language translation when the current locale | |
6981 | is not @code{C} or @code{POSIX} (@pxref{Locale Translation}). | |
6982 | This implies the @option{-n} option; no commands will be executed. | |
6983 | ||
6984 | @item [-+]O [@var{shopt_option}] | |
6985 | @var{shopt_option} is one of the shell options accepted by the | |
6986 | @code{shopt} builtin (@pxref{The Shopt Builtin}). | |
6987 | If @var{shopt_option} is present, @option{-O} sets the value of that option; | |
6988 | @option{+O} unsets it. | |
6989 | If @var{shopt_option} is not supplied, the names and values of the shell | |
6990 | options accepted by @code{shopt} are printed on the standard output. | |
6991 | If the invocation option is @option{+O}, the output is displayed in a format | |
6992 | that may be reused as input. | |
6993 | ||
6994 | @item -- | |
6995 | A @code{--} signals the end of options and disables further option | |
6996 | processing. | |
6997 | Any arguments after the @code{--} are treated as filenames and arguments. | |
6998 | @end table | |
6999 | ||
7000 | @cindex login shell | |
7001 | A @emph{login} shell is one whose first character of argument zero is | |
7002 | @samp{-}, or one invoked with the @option{--login} option. | |
7003 | ||
7004 | @cindex interactive shell | |
7005 | An @emph{interactive} shell is one started without non-option arguments, | |
7006 | unless @option{-s} is specified, | |
7007 | without specifying the @option{-c} option, and whose input and output are both | |
7008 | connected to terminals (as determined by @code{isatty(3)}), or one | |
7009 | started with the @option{-i} option. @xref{Interactive Shells}, for more | |
7010 | information. | |
7011 | ||
7012 | If arguments remain after option processing, and neither the | |
7013 | @option{-c} nor the @option{-s} | |
7014 | option has been supplied, the first argument is assumed to | |
7015 | be the name of a file containing shell commands (@pxref{Shell Scripts}). | |
7016 | When Bash is invoked in this fashion, @code{$0} | |
7017 | is set to the name of the file, and the positional parameters | |
7018 | are set to the remaining arguments. | |
7019 | Bash reads and executes commands from this file, then exits. | |
7020 | Bash's exit status is the exit status of the last command executed | |
7021 | in the script. If no commands are executed, the exit status is 0. | |
7022 | ||
7023 | @node Bash Startup Files | |
7024 | @section Bash Startup Files | |
7025 | @cindex startup files | |
7026 | ||
7027 | This section describes how Bash executes its startup files. | |
7028 | If any of the files exist but cannot be read, Bash reports an error. | |
7029 | Tildes are expanded in filenames as described above under | |
7030 | Tilde Expansion (@pxref{Tilde Expansion}). | |
7031 | ||
7032 | Interactive shells are described in @ref{Interactive Shells}. | |
7033 | ||
7034 | @subsubheading Invoked as an interactive login shell, or with @option{--login} | |
7035 | ||
7036 | When Bash is invoked as an interactive login shell, or as a | |
7037 | non-interactive shell with the @option{--login} option, it first reads and | |
7038 | executes commands from the file @file{/etc/profile}, if that file exists. | |
7039 | After reading that file, it looks for @file{~/.bash_profile}, | |
7040 | @file{~/.bash_login}, and @file{~/.profile}, in that order, and reads | |
7041 | and executes commands from the first one that exists and is readable. | |
7042 | The @option{--noprofile} option may be used when the shell is started to | |
7043 | inhibit this behavior. | |
7044 | ||
7045 | When an interactive login shell exits, | |
7046 | or a non-interactive login shell executes the @code{exit} builtin command, | |
7047 | Bash reads and executes commands from | |
7048 | the file @file{~/.bash_logout}, if it exists. | |
7049 | ||
7050 | @subsubheading Invoked as an interactive non-login shell | |
7051 | ||
7052 | When an interactive shell that is not a login shell is started, Bash | |
7053 | reads and executes commands from @file{~/.bashrc}, if that file exists. | |
7054 | This may be inhibited by using the @option{--norc} option. | |
7055 | The @option{--rcfile @var{file}} option will force Bash to read and | |
7056 | execute commands from @var{file} instead of @file{~/.bashrc}. | |
7057 | ||
7058 | So, typically, your @file{~/.bash_profile} contains the line | |
7059 | @example | |
7060 | @code{if [ -f ~/.bashrc ]; then . ~/.bashrc; fi} | |
7061 | @end example | |
7062 | @noindent | |
7063 | after (or before) any login-specific initializations. | |
7064 | ||
7065 | @subsubheading Invoked non-interactively | |
7066 | ||
7067 | When Bash is started non-interactively, to run a shell script, | |
7068 | for example, it looks for the variable @env{BASH_ENV} in the environment, | |
7069 | expands its value if it appears there, and uses the expanded value as | |
7070 | the name of a file to read and execute. Bash behaves as if the | |
7071 | following command were executed: | |
7072 | @example | |
7073 | @code{if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi} | |
7074 | @end example | |
7075 | @noindent | |
7076 | but the value of the @env{PATH} variable is not used to search for the | |
7077 | filename. | |
7078 | ||
7079 | As noted above, if a non-interactive shell is invoked with the | |
7080 | @option{--login} option, Bash attempts to read and execute commands from the | |
7081 | login shell startup files. | |
7082 | ||
7083 | @subsubheading Invoked with name @code{sh} | |
7084 | ||
7085 | If Bash is invoked with the name @code{sh}, it tries to mimic the | |
7086 | startup behavior of historical versions of @code{sh} as closely as | |
7087 | possible, while conforming to the @sc{posix} standard as well. | |
7088 | ||
7089 | When invoked as an interactive login shell, or as a non-interactive | |
7090 | shell with the @option{--login} option, it first attempts to read | |
7091 | and execute commands from @file{/etc/profile} and @file{~/.profile}, in | |
7092 | that order. | |
7093 | The @option{--noprofile} option may be used to inhibit this behavior. | |
7094 | When invoked as an interactive shell with the name @code{sh}, Bash | |
7095 | looks for the variable @env{ENV}, expands its value if it is defined, | |
7096 | and uses the expanded value as the name of a file to read and execute. | |
7097 | Since a shell invoked as @code{sh} does not attempt to read and execute | |
7098 | commands from any other startup files, the @option{--rcfile} option has | |
7099 | no effect. | |
7100 | A non-interactive shell invoked with the name @code{sh} does not attempt | |
7101 | to read any other startup files. | |
7102 | ||
7103 | When invoked as @code{sh}, Bash enters @sc{posix} mode after | |
7104 | the startup files are read. | |
7105 | ||
7106 | @subsubheading Invoked in @sc{posix} mode | |
7107 | ||
7108 | When Bash is started in @sc{posix} mode, as with the | |
7109 | @option{--posix} command line option, it follows the @sc{posix} standard | |
7110 | for startup files. | |
7111 | In this mode, interactive shells expand the @env{ENV} variable | |
7112 | and commands are read and executed from the file whose name is the | |
7113 | expanded value. | |
7114 | No other startup files are read. | |
7115 | ||
7116 | @subsubheading Invoked by remote shell daemon | |
7117 | ||
7118 | Bash attempts to determine when it is being run with its standard input | |
7119 | connected to a network connection, as when executed by | |
7120 | the historical remote shell daemon, usually @code{rshd}, | |
7121 | or the secure shell daemon @code{sshd}. | |
7122 | If Bash | |
7123 | determines it is being run non-interactively in this fashion, | |
7124 | it reads and executes commands from @file{~/.bashrc}, if that | |
7125 | file exists and is readable. | |
7126 | It will not do this if invoked as @code{sh}. | |
7127 | The @option{--norc} option may be used to inhibit this behavior, and the | |
7128 | @option{--rcfile} option may be used to force another file to be read, but | |
7129 | neither @code{rshd} nor @code{sshd} generally invoke the shell with those | |
7130 | options or allow them to be specified. | |
7131 | ||
7132 | @subsubheading Invoked with unequal effective and real @sc{uid/gid}s | |
7133 | ||
7134 | If Bash is started with the effective user (group) id not equal to the | |
7135 | real user (group) id, and the @option{-p} option is not supplied, no startup | |
7136 | files are read, shell functions are not inherited from the environment, | |
7137 | the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH}, and @env{GLOBIGNORE} | |
7138 | variables, if they appear in the environment, are ignored, and the effective | |
7139 | user id is set to the real user id. | |
7140 | If the @option{-p} option is supplied at invocation, the startup behavior is | |
7141 | the same, but the effective user id is not reset. | |
7142 | ||
7143 | @node Interactive Shells | |
7144 | @section Interactive Shells | |
7145 | @cindex interactive shell | |
7146 | @cindex shell, interactive | |
7147 | ||
7148 | @menu | |
7149 | * What is an Interactive Shell?:: What determines whether a shell is Interactive. | |
7150 | * Is this Shell Interactive?:: How to tell if a shell is interactive. | |
7151 | * Interactive Shell Behavior:: What changes in an interactive shell? | |
7152 | @end menu | |
7153 | ||
7154 | @node What is an Interactive Shell? | |
7155 | @subsection What is an Interactive Shell? | |
7156 | ||
7157 | An interactive shell | |
7158 | is one started without non-option arguments | |
7159 | (unless @option{-s} is specified) | |
7160 | and without specifying the @option{-c} option, | |
7161 | whose input and error output are both | |
7162 | connected to terminals (as determined by @code{isatty(3)}), | |
7163 | or one started with the @option{-i} option. | |
7164 | ||
7165 | An interactive shell generally reads from and writes to a user's | |
7166 | terminal. | |
7167 | ||
7168 | The @option{-s} invocation option may be used to set the positional parameters | |
7169 | when an interactive shell is started. | |
7170 | ||
7171 | @node Is this Shell Interactive? | |
7172 | @subsection Is this Shell Interactive? | |
7173 | ||
7174 | To determine within a startup script whether or not Bash is | |
7175 | running interactively, | |
7176 | test the value of the @samp{-} special parameter. | |
7177 | It contains @code{i} when the shell is interactive. For example: | |
7178 | ||
7179 | @example | |
7180 | case "$-" in | |
7181 | *i*) echo This shell is interactive ;; | |
7182 | *) echo This shell is not interactive ;; | |
7183 | esac | |
7184 | @end example | |
7185 | ||
7186 | Alternatively, startup scripts may examine the variable | |
7187 | @env{PS1}; it is unset in non-interactive shells, and set in | |
7188 | interactive shells. Thus: | |
7189 | ||
7190 | @example | |
7191 | if [ -z "$PS1" ]; then | |
7192 | echo This shell is not interactive | |
7193 | else | |
7194 | echo This shell is interactive | |
7195 | fi | |
7196 | @end example | |
7197 | ||
7198 | @node Interactive Shell Behavior | |
7199 | @subsection Interactive Shell Behavior | |
7200 | ||
7201 | When the shell is running interactively, it changes its behavior in | |
7202 | several ways. | |
7203 | ||
7204 | @enumerate | |
7205 | @item | |
7206 | Startup files are read and executed as described in @ref{Bash Startup Files}. | |
7207 | ||
7208 | @item | |
7209 | Job Control (@pxref{Job Control}) is enabled by default. When job | |
7210 | control is in effect, Bash ignores the keyboard-generated job control | |
7211 | signals @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. | |
7212 | ||
7213 | @item | |
7214 | Bash expands and displays @env{PS1} before reading the first line | |
7215 | of a command, and expands and displays @env{PS2} before reading the | |
7216 | second and subsequent lines of a multi-line command. | |
7217 | Bash expands and displays @env{PS0} after it reads a command but before | |
7218 | executing it. | |
7219 | See @ref{Controlling the Prompt}, for a complete list of prompt | |
7220 | string escape sequences. | |
7221 | ||
7222 | @item | |
7223 | Bash executes the values of the set elements of the @env{PROMPT_COMMAND} | |
7224 | array variable as commands before printing the primary prompt, @env{$PS1} | |
7225 | (@pxref{Bash Variables}). | |
7226 | ||
7227 | @item | |
7228 | Readline (@pxref{Command Line Editing}) is used to read commands from | |
7229 | the user's terminal. | |
7230 | ||
7231 | @item | |
7232 | Bash inspects the value of the @code{ignoreeof} option to @code{set -o} | |
7233 | instead of exiting immediately when it receives an @code{EOF} on its | |
7234 | standard input when reading a command (@pxref{The Set Builtin}). | |
7235 | ||
7236 | @item | |
7237 | Command history (@pxref{Bash History Facilities}) | |
7238 | and history expansion (@pxref{History Interaction}) | |
7239 | are enabled by default. | |
7240 | Bash will save the command history to the file named by @env{$HISTFILE} | |
7241 | when a shell with history enabled exits. | |
7242 | ||
7243 | @item | |
7244 | Alias expansion (@pxref{Aliases}) is performed by default. | |
7245 | ||
7246 | @item | |
7247 | In the absence of any traps, Bash ignores @code{SIGTERM} | |
7248 | (@pxref{Signals}). | |
7249 | ||
7250 | @item | |
7251 | In the absence of any traps, @code{SIGINT} is caught and handled | |
7252 | (@pxref{Signals}). | |
7253 | @code{SIGINT} will interrupt some shell builtins. | |
7254 | ||
7255 | @item | |
7256 | An interactive login shell sends a @code{SIGHUP} to all jobs on exit | |
7257 | if the @code{huponexit} shell option has been enabled (@pxref{Signals}). | |
7258 | ||
7259 | @item | |
7260 | The @option{-n} invocation option is ignored, and @samp{set -n} has | |
7261 | no effect (@pxref{The Set Builtin}). | |
7262 | ||
7263 | @item | |
7264 | Bash will check for mail periodically, depending on the values of the | |
7265 | @env{MAIL}, @env{MAILPATH}, and @env{MAILCHECK} shell variables | |
7266 | (@pxref{Bash Variables}). | |
7267 | ||
7268 | @item | |
7269 | Expansion errors due to references to unbound shell variables after | |
7270 | @samp{set -u} has been enabled will not cause the shell to exit | |
7271 | (@pxref{The Set Builtin}). | |
7272 | ||
7273 | @item | |
7274 | The shell will not exit on expansion errors caused by @var{var} being unset | |
7275 | or null in @code{$@{@var{var}:?@var{word}@}} expansions | |
7276 | (@pxref{Shell Parameter Expansion}). | |
7277 | ||
7278 | @item | |
7279 | Redirection errors encountered by shell builtins will not cause the | |
7280 | shell to exit. | |
7281 | ||
7282 | @item | |
7283 | When running in @sc{posix} mode, a special builtin returning an error | |
7284 | status will not cause the shell to exit (@pxref{Bash POSIX Mode}). | |
7285 | ||
7286 | @item | |
7287 | A failed @code{exec} will not cause the shell to exit | |
7288 | (@pxref{Bourne Shell Builtins}). | |
7289 | ||
7290 | @item | |
7291 | Parser syntax errors will not cause the shell to exit. | |
7292 | ||
7293 | @item | |
7294 | If the @code{cdspell} shell option is enabled, the shell will attempt | |
7295 | simple spelling correction for directory arguments to the @code{cd} | |
7296 | builtin (see the description of the @code{cdspell} | |
7297 | option to the @code{shopt} builtin in @ref{The Shopt Builtin}). | |
7298 | The @code{cdspell} option is only effective in interactive shells. | |
7299 | ||
7300 | @item | |
7301 | The shell will check the value of the @env{TMOUT} variable and exit | |
7302 | if a command is not read within the specified number of seconds after | |
7303 | printing @env{$PS1} (@pxref{Bash Variables}). | |
7304 | ||
7305 | @end enumerate | |
7306 | ||
7307 | @node Bash Conditional Expressions | |
7308 | @section Bash Conditional Expressions | |
7309 | @cindex expressions, conditional | |
7310 | ||
7311 | Conditional expressions are used by the @code{[[} compound command | |
7312 | (@pxref{Conditional Constructs}) | |
7313 | and the @code{test} and @code{[} builtin commands | |
7314 | (@pxref{Bourne Shell Builtins}). | |
7315 | The @code{test} | |
7316 | and @code{[} commands determine their behavior based on the number | |
7317 | of arguments; see the descriptions of those commands for any other | |
7318 | command-specific actions. | |
7319 | ||
7320 | Expressions may be unary or binary, | |
7321 | and are formed from the following primaries. | |
7322 | Unary expressions are often used to examine the status of a file. | |
7323 | There are string operators and numeric comparison operators as well. | |
7324 | Bash handles several filenames specially when they are used in | |
7325 | expressions. | |
7326 | If the operating system on which Bash is running provides these | |
7327 | special files, Bash will use them; otherwise it will emulate them | |
7328 | internally with this behavior: | |
7329 | If the @var{file} argument to one of the primaries is of the form | |
7330 | @file{/dev/fd/@var{N}}, then file descriptor @var{N} is checked. | |
7331 | If the @var{file} argument to one of the primaries is one of | |
7332 | @file{/dev/stdin}, @file{/dev/stdout}, or @file{/dev/stderr}, file | |
7333 | descriptor 0, 1, or 2, respectively, is checked. | |
7334 | ||
7335 | When used with @code{[[}, the @samp{<} and @samp{>} operators sort | |
7336 | lexicographically using the current locale. | |
7337 | The @code{test} command uses ASCII ordering. | |
7338 | ||
7339 | Unless otherwise specified, primaries that operate on files follow symbolic | |
7340 | links and operate on the target of the link, rather than the link itself. | |
7341 | ||
7342 | @table @code | |
7343 | @item -a @var{file} | |
7344 | True if @var{file} exists. | |
7345 | ||
7346 | @item -b @var{file} | |
7347 | True if @var{file} exists and is a block special file. | |
7348 | ||
7349 | @item -c @var{file} | |
7350 | True if @var{file} exists and is a character special file. | |
7351 | ||
7352 | @item -d @var{file} | |
7353 | True if @var{file} exists and is a directory. | |
7354 | ||
7355 | @item -e @var{file} | |
7356 | True if @var{file} exists. | |
7357 | ||
7358 | @item -f @var{file} | |
7359 | True if @var{file} exists and is a regular file. | |
7360 | ||
7361 | @item -g @var{file} | |
7362 | True if @var{file} exists and its set-group-id bit is set. | |
7363 | ||
7364 | @item -h @var{file} | |
7365 | True if @var{file} exists and is a symbolic link. | |
7366 | ||
7367 | @item -k @var{file} | |
7368 | True if @var{file} exists and its "sticky" bit is set. | |
7369 | ||
7370 | @item -p @var{file} | |
7371 | True if @var{file} exists and is a named pipe (FIFO). | |
7372 | ||
7373 | @item -r @var{file} | |
7374 | True if @var{file} exists and is readable. | |
7375 | ||
7376 | @item -s @var{file} | |
7377 | True if @var{file} exists and has a size greater than zero. | |
7378 | ||
7379 | @item -t @var{fd} | |
7380 | True if file descriptor @var{fd} is open and refers to a terminal. | |
7381 | ||
7382 | @item -u @var{file} | |
7383 | True if @var{file} exists and its set-user-id bit is set. | |
7384 | ||
7385 | @item -w @var{file} | |
7386 | True if @var{file} exists and is writable. | |
7387 | ||
7388 | @item -x @var{file} | |
7389 | True if @var{file} exists and is executable. | |
7390 | ||
7391 | @item -G @var{file} | |
7392 | True if @var{file} exists and is owned by the effective group id. | |
7393 | ||
7394 | @item -L @var{file} | |
7395 | True if @var{file} exists and is a symbolic link. | |
7396 | ||
7397 | @item -N @var{file} | |
7398 | True if @var{file} exists and has been modified since it was last read. | |
7399 | ||
7400 | @item -O @var{file} | |
7401 | True if @var{file} exists and is owned by the effective user id. | |
7402 | ||
7403 | @item -S @var{file} | |
7404 | True if @var{file} exists and is a socket. | |
7405 | ||
7406 | @item @var{file1} -ef @var{file2} | |
7407 | True if @var{file1} and @var{file2} refer to the same device and | |
7408 | inode numbers. | |
7409 | ||
7410 | @item @var{file1} -nt @var{file2} | |
7411 | True if @var{file1} is newer (according to modification date) | |
7412 | than @var{file2}, or if @var{file1} exists and @var{file2} does not. | |
7413 | ||
7414 | @item @var{file1} -ot @var{file2} | |
7415 | True if @var{file1} is older than @var{file2}, | |
7416 | or if @var{file2} exists and @var{file1} does not. | |
7417 | ||
7418 | @item -o @var{optname} | |
7419 | True if the shell option @var{optname} is enabled. | |
7420 | The list of options appears in the description of the @option{-o} | |
7421 | option to the @code{set} builtin (@pxref{The Set Builtin}). | |
7422 | ||
7423 | @item -v @var{varname} | |
7424 | True if the shell variable @var{varname} is set (has been assigned a value). | |
7425 | ||
7426 | @item -R @var{varname} | |
7427 | True if the shell variable @var{varname} is set and is a name reference. | |
7428 | ||
7429 | @item -z @var{string} | |
7430 | True if the length of @var{string} is zero. | |
7431 | ||
7432 | @item -n @var{string} | |
7433 | @itemx @var{string} | |
7434 | True if the length of @var{string} is non-zero. | |
7435 | ||
7436 | @item @var{string1} == @var{string2} | |
7437 | @itemx @var{string1} = @var{string2} | |
7438 | True if the strings are equal. | |
7439 | When used with the @code{[[} command, this performs pattern matching as | |
7440 | described above (@pxref{Conditional Constructs}). | |
7441 | ||
7442 | @samp{=} should be used with the @code{test} command for @sc{posix} conformance. | |
7443 | ||
7444 | @item @var{string1} != @var{string2} | |
7445 | True if the strings are not equal. | |
7446 | ||
7447 | @item @var{string1} < @var{string2} | |
7448 | True if @var{string1} sorts before @var{string2} lexicographically. | |
7449 | ||
7450 | @item @var{string1} > @var{string2} | |
7451 | True if @var{string1} sorts after @var{string2} lexicographically. | |
7452 | ||
7453 | @item @var{arg1} OP @var{arg2} | |
7454 | @code{OP} is one of | |
7455 | @samp{-eq}, @samp{-ne}, @samp{-lt}, @samp{-le}, @samp{-gt}, or @samp{-ge}. | |
7456 | These arithmetic binary operators return true if @var{arg1} | |
7457 | is equal to, not equal to, less than, less than or equal to, | |
7458 | greater than, or greater than or equal to @var{arg2}, | |
7459 | respectively. @var{Arg1} and @var{arg2} | |
7460 | may be positive or negative integers. | |
7461 | When used with the @code{[[} command, @var{Arg1} and @var{Arg2} | |
7462 | are evaluated as arithmetic expressions (@pxref{Shell Arithmetic}). | |
7463 | @end table | |
7464 | ||
7465 | @node Shell Arithmetic | |
7466 | @section Shell Arithmetic | |
7467 | @cindex arithmetic, shell | |
7468 | @cindex shell arithmetic | |
7469 | @cindex expressions, arithmetic | |
7470 | @cindex evaluation, arithmetic | |
7471 | @cindex arithmetic evaluation | |
7472 | ||
7473 | The shell allows arithmetic expressions to be evaluated, as one of | |
7474 | the shell expansions or by using the @code{((} compound command, the | |
7475 | @code{let} builtin, or the @option{-i} option to the @code{declare} builtin. | |
7476 | ||
7477 | Evaluation is done in fixed-width integers with no check for overflow, | |
7478 | though division by 0 is trapped and flagged as an error. | |
7479 | The operators and their precedence, associativity, and values | |
7480 | are the same as in the C language. | |
7481 | The following list of operators is grouped into levels of | |
7482 | equal-precedence operators. | |
7483 | The levels are listed in order of decreasing precedence. | |
7484 | ||
7485 | @table @code | |
7486 | ||
7487 | @item @var{id}++ @var{id}-- | |
7488 | variable post-increment and post-decrement | |
7489 | ||
7490 | @item ++@var{id} --@var{id} | |
7491 | variable pre-increment and pre-decrement | |
7492 | ||
7493 | @item - + | |
7494 | unary minus and plus | |
7495 | ||
7496 | @item ! ~ | |
7497 | logical and bitwise negation | |
7498 | ||
7499 | @item ** | |
7500 | exponentiation | |
7501 | ||
7502 | @item * / % | |
7503 | multiplication, division, remainder | |
7504 | ||
7505 | @item + - | |
7506 | addition, subtraction | |
7507 | ||
7508 | @item << >> | |
7509 | left and right bitwise shifts | |
7510 | ||
7511 | @item <= >= < > | |
7512 | comparison | |
7513 | ||
7514 | @item == != | |
7515 | equality and inequality | |
7516 | ||
7517 | @item & | |
7518 | bitwise AND | |
7519 | ||
7520 | @item ^ | |
7521 | bitwise exclusive OR | |
7522 | ||
7523 | @item | | |
7524 | bitwise OR | |
7525 | ||
7526 | @item && | |
7527 | logical AND | |
7528 | ||
7529 | @item || | |
7530 | logical OR | |
7531 | ||
7532 | @item expr ? expr : expr | |
7533 | conditional operator | |
7534 | ||
7535 | @item = *= /= %= += -= <<= >>= &= ^= |= | |
7536 | assignment | |
7537 | ||
7538 | @item expr1 , expr2 | |
7539 | comma | |
7540 | @end table | |
7541 | ||
7542 | Shell variables are allowed as operands; parameter expansion is | |
7543 | performed before the expression is evaluated. | |
7544 | Within an expression, shell variables may also be referenced by name | |
7545 | without using the parameter expansion syntax. | |
7546 | A shell variable that is null or unset evaluates to 0 when referenced | |
7547 | by name without using the parameter expansion syntax. | |
7548 | The value of a variable is evaluated as an arithmetic expression | |
7549 | when it is referenced, or when a variable which has been given the | |
7550 | @code{integer} attribute using @samp{declare -i} is assigned a value. | |
7551 | A null value evaluates to 0. | |
7552 | A shell variable need not have its @code{integer} attribute turned on | |
7553 | to be used in an expression. | |
7554 | ||
7555 | Integer constants follow the C language definition, without suffixes or | |
7556 | character constants. | |
7557 | Constants with a leading 0 are interpreted as octal numbers. | |
7558 | A leading @samp{0x} or @samp{0X} denotes hexadecimal. Otherwise, | |
7559 | numbers take the form [@var{base}@code{#}]@var{n}, where the optional @var{base} | |
7560 | is a decimal number between 2 and 64 representing the arithmetic | |
7561 | base, and @var{n} is a number in that base. | |
7562 | If @var{base}@code{#} is omitted, then base 10 is used. | |
7563 | When specifying @var{n}, | |
7564 | if a non-digit is required, | |
7565 | the digits greater than 9 are represented by the lowercase letters, | |
7566 | the uppercase letters, @samp{@@}, and @samp{_}, in that order. | |
7567 | If @var{base} is less than or equal to 36, lowercase and uppercase | |
7568 | letters may be used interchangeably to represent numbers between 10 | |
7569 | and 35. | |
7570 | ||
7571 | Operators are evaluated in order of precedence. Sub-expressions in | |
7572 | parentheses are evaluated first and may override the precedence | |
7573 | rules above. | |
7574 | ||
7575 | @node Aliases | |
7576 | @section Aliases | |
7577 | @cindex alias expansion | |
7578 | ||
7579 | @dfn{Aliases} allow a string to be substituted for a word when it is used | |
7580 | as the first word of a simple command. | |
7581 | The shell maintains a list of aliases that may be set and unset with | |
7582 | the @code{alias} and @code{unalias} builtin commands. | |
7583 | ||
7584 | The first word of each simple command, if unquoted, is checked to see | |
7585 | if it has an alias. | |
7586 | If so, that word is replaced by the text of the alias. | |
7587 | The characters @samp{/}, @samp{$}, @samp{`}, @samp{=} and any of the | |
7588 | shell metacharacters or quoting characters listed above may not appear | |
7589 | in an alias name. | |
7590 | The replacement text may contain any valid | |
7591 | shell input, including shell metacharacters. | |
7592 | The first word of the replacement text is tested for | |
7593 | aliases, but a word that is identical to an alias being expanded | |
7594 | is not expanded a second time. | |
7595 | This means that one may alias @code{ls} to @code{"ls -F"}, | |
7596 | for instance, and Bash does not try to recursively expand the | |
7597 | replacement text. | |
7598 | If the last character of the alias value is a | |
7599 | @code{blank}, then the next command word following the | |
7600 | alias is also checked for alias expansion. | |
7601 | ||
7602 | Aliases are created and listed with the @code{alias} | |
7603 | command, and removed with the @code{unalias} command. | |
7604 | ||
7605 | There is no mechanism for using arguments in the replacement text, | |
7606 | as in @code{csh}. | |
7607 | If arguments are needed, use a shell function | |
7608 | (@pxref{Shell Functions}). | |
7609 | ||
7610 | Aliases are not expanded when the shell is not interactive, | |
7611 | unless the @code{expand_aliases} shell option is set using | |
7612 | @code{shopt} (@pxref{The Shopt Builtin}). | |
7613 | ||
7614 | The rules concerning the definition and use of aliases are | |
7615 | somewhat confusing. Bash | |
7616 | always reads at least one complete line of input, | |
7617 | and all lines that make up a compound command, | |
7618 | before executing any of the commands on that line or the compound command. | |
7619 | Aliases are expanded when a | |
7620 | command is read, not when it is executed. Therefore, an | |
7621 | alias definition appearing on the same line as another | |
7622 | command does not take effect until the next line of input is read. | |
7623 | The commands following the alias definition | |
7624 | on that line are not affected by the new alias. | |
7625 | This behavior is also an issue when functions are executed. | |
7626 | Aliases are expanded when a function definition is read, | |
7627 | not when the function is executed, because a function definition | |
7628 | is itself a command. As a consequence, aliases | |
7629 | defined in a function are not available until after that | |
7630 | function is executed. To be safe, always put | |
7631 | alias definitions on a separate line, and do not use @code{alias} | |
7632 | in compound commands. | |
7633 | ||
7634 | For almost every purpose, shell functions are preferred over aliases. | |
7635 | ||
7636 | @node Arrays | |
7637 | @section Arrays | |
7638 | @cindex arrays | |
7639 | ||
7640 | Bash provides one-dimensional indexed and associative array variables. | |
7641 | Any variable may be used as an indexed array; | |
7642 | the @code{declare} builtin will explicitly declare an array. | |
7643 | There is no maximum | |
7644 | limit on the size of an array, nor any requirement that members | |
7645 | be indexed or assigned contiguously. | |
7646 | Indexed arrays are referenced using integers (including arithmetic | |
7647 | expressions (@pxref{Shell Arithmetic})) and are zero-based; | |
7648 | associative arrays use arbitrary strings. | |
7649 | Unless otherwise noted, indexed array indices must be non-negative integers. | |
7650 | ||
7651 | An indexed array is created automatically if any variable is assigned to | |
7652 | using the syntax | |
7653 | @example | |
7654 | @var{name}[@var{subscript}]=@var{value} | |
7655 | @end example | |
7656 | ||
7657 | @noindent | |
7658 | The @var{subscript} | |
7659 | is treated as an arithmetic expression that must evaluate to a number. | |
7660 | To explicitly declare an array, use | |
7661 | @example | |
7662 | declare -a @var{name} | |
7663 | @end example | |
7664 | @noindent | |
7665 | The syntax | |
7666 | @example | |
7667 | declare -a @var{name}[@var{subscript}] | |
7668 | @end example | |
7669 | @noindent | |
7670 | is also accepted; the @var{subscript} is ignored. | |
7671 | ||
7672 | @noindent | |
7673 | Associative arrays are created using | |
7674 | @example | |
7675 | declare -A @var{name} | |
7676 | @end example | |
7677 | ||
7678 | Attributes may be | |
7679 | specified for an array variable using the @code{declare} and | |
7680 | @code{readonly} builtins. Each attribute applies to all members of | |
7681 | an array. | |
7682 | ||
7683 | Arrays are assigned to using compound assignments of the form | |
7684 | @example | |
7685 | @var{name}=(@var{value1} @var{value2} @dots{} ) | |
7686 | @end example | |
7687 | @noindent | |
7688 | where each | |
7689 | @var{value} may be of the form @code{[@var{subscript}]=}@var{string}. | |
7690 | Indexed array assignments do not require anything but @var{string}. | |
7691 | When assigning to indexed arrays, if | |
7692 | the optional subscript is supplied, that index is assigned to; | |
7693 | otherwise the index of the element assigned is the last index assigned | |
7694 | to by the statement plus one. Indexing starts at zero. | |
7695 | ||
7696 | Each @var{value} in the list undergoes all the shell expansions | |
7697 | described above (@pxref{Shell Expansions}). | |
7698 | ||
7699 | When assigning to an associative array, the words in a compound assignment | |
7700 | may be either assignment statements, for which the subscript is required, | |
7701 | or a list of words that is interpreted as a sequence of alternating keys | |
7702 | and values: | |
7703 | @var{name}=(@var{key1} @var{value1} @var{key2} @var{value2} @dots{} ). | |
7704 | These are treated identically to | |
7705 | @var{name}=( [@var{key1}]=@var{value1} [@var{key2}]=@var{value2} @dots{} ). | |
7706 | The first word in the list determines how the remaining words | |
7707 | are interpreted; all assignments in a list must be of the same type. | |
7708 | When using key/value pairs, the keys may not be missing or empty; | |
7709 | a final missing value is treated like the empty string. | |
7710 | ||
7711 | This syntax is also accepted by the @code{declare} | |
7712 | builtin. Individual array elements may be assigned to using the | |
7713 | @code{@var{name}[@var{subscript}]=@var{value}} syntax introduced above. | |
7714 | ||
7715 | When assigning to an indexed array, if @var{name} | |
7716 | is subscripted by a negative number, that number is | |
7717 | interpreted as relative to one greater than the maximum index of | |
7718 | @var{name}, so negative indices count back from the end of the | |
7719 | array, and an index of -1 references the last element. | |
7720 | ||
7721 | The @samp{+=} operator will append to an array variable when assigning | |
7722 | using the compound assignment syntax; see @ref{Shell Parameters} above. | |
7723 | ||
7724 | Any element of an array may be referenced using | |
7725 | @code{$@{@var{name}[@var{subscript}]@}}. | |
7726 | The braces are required to avoid | |
7727 | conflicts with the shell's filename expansion operators. If the | |
7728 | @var{subscript} is @samp{@@} or @samp{*}, the word expands to all members | |
7729 | of the array @var{name}. These subscripts differ only when the word | |
7730 | appears within double quotes. | |
7731 | If the word is double-quoted, | |
7732 | @code{$@{@var{name}[*]@}} expands to a single word with | |
7733 | the value of each array member separated by the first character of the | |
7734 | @env{IFS} variable, and @code{$@{@var{name}[@@]@}} expands each element of | |
7735 | @var{name} to a separate word. When there are no array members, | |
7736 | @code{$@{@var{name}[@@]@}} expands to nothing. | |
7737 | If the double-quoted expansion occurs within a word, the expansion of | |
7738 | the first parameter is joined with the beginning part of the original | |
7739 | word, and the expansion of the last parameter is joined with the last | |
7740 | part of the original word. | |
7741 | This is analogous to the | |
7742 | expansion of the special parameters @samp{@@} and @samp{*}. | |
7743 | @code{$@{#@var{name}[@var{subscript}]@}} expands to the length of | |
7744 | @code{$@{@var{name}[@var{subscript}]@}}. | |
7745 | If @var{subscript} is @samp{@@} or | |
7746 | @samp{*}, the expansion is the number of elements in the array. | |
7747 | If the @var{subscript} | |
7748 | used to reference an element of an indexed array | |
7749 | evaluates to a number less than zero, it is | |
7750 | interpreted as relative to one greater than the maximum index of the array, | |
7751 | so negative indices count back from the end of the array, | |
7752 | and an index of -1 refers to the last element. | |
7753 | ||
7754 | Referencing an array variable without a subscript is equivalent to | |
7755 | referencing with a subscript of 0. | |
7756 | Any reference to a variable using a valid subscript is legal, and | |
7757 | @code{bash} will create an array if necessary. | |
7758 | ||
7759 | An array variable is considered set if a subscript has been assigned a | |
7760 | value. The null string is a valid value. | |
7761 | ||
7762 | It is possible to obtain the keys (indices) of an array as well as the values. | |
7763 | $@{!@var{name}[@@]@} and $@{!@var{name}[*]@} expand to the indices | |
7764 | assigned in array variable @var{name}. | |
7765 | The treatment when in double quotes is similar to the expansion of the | |
7766 | special parameters @samp{@@} and @samp{*} within double quotes. | |
7767 | ||
7768 | The @code{unset} builtin is used to destroy arrays. | |
7769 | @code{unset @var{name}[@var{subscript}]} | |
7770 | destroys the array element at index @var{subscript}. | |
7771 | Negative subscripts to indexed arrays are interpreted as described above. | |
7772 | Unsetting the last element of an array variable does not unset the variable. | |
7773 | @code{unset @var{name}}, where @var{name} is an array, removes the | |
7774 | entire array. | |
7775 | @code{unset @var{name}[@var{subscript}]} behaves differently | |
7776 | depending on the array type when given a | |
7777 | subscript of @samp{*} or @samp{@@}. | |
7778 | When @var{name} is an associative array, it removes the element with key | |
7779 | @samp{*} or @samp{@@}. | |
7780 | If @var{name} is an indexed array, @code{unset} removes all of the elements, | |
7781 | but does not remove the array itself. | |
7782 | ||
7783 | When using a variable name with a subscript as an argument to a command, | |
7784 | such as with @code{unset}, without using the word expansion syntax | |
7785 | described above, the argument is subject to the shell's filename expansion. | |
7786 | If filename expansion is not desired, the argument should be quoted. | |
7787 | ||
7788 | The @code{declare}, @code{local}, and @code{readonly} | |
7789 | builtins each accept a @option{-a} option to specify an indexed | |
7790 | array and a @option{-A} option to specify an associative array. | |
7791 | If both options are supplied, @option{-A} takes precedence. | |
7792 | The @code{read} builtin accepts a @option{-a} | |
7793 | option to assign a list of words read from the standard input | |
7794 | to an array, and can read values from the standard input into | |
7795 | individual array elements. The @code{set} and @code{declare} | |
7796 | builtins display array values in a way that allows them to be | |
7797 | reused as input. | |
7798 | ||
7799 | @node The Directory Stack | |
7800 | @section The Directory Stack | |
7801 | @cindex directory stack | |
7802 | ||
7803 | @menu | |
7804 | * Directory Stack Builtins:: Bash builtin commands to manipulate | |
7805 | the directory stack. | |
7806 | @end menu | |
7807 | ||
7808 | The directory stack is a list of recently-visited directories. The | |
7809 | @code{pushd} builtin adds directories to the stack as it changes | |
7810 | the current directory, and the @code{popd} builtin removes specified | |
7811 | directories from the stack and changes the current directory to | |
7812 | the directory removed. The @code{dirs} builtin displays the contents | |
7813 | of the directory stack. The current directory is always the "top" | |
7814 | of the directory stack. | |
7815 | ||
7816 | The contents of the directory stack are also visible | |
7817 | as the value of the @env{DIRSTACK} shell variable. | |
7818 | ||
7819 | @node Directory Stack Builtins | |
7820 | @subsection Directory Stack Builtins | |
7821 | ||
7822 | @table @code | |
7823 | ||
7824 | @item dirs | |
7825 | @btindex dirs | |
7826 | @example | |
7827 | dirs [-clpv] [+@var{N} | -@var{N}] | |
7828 | @end example | |
7829 | ||
7830 | Display the list of currently remembered directories. Directories | |
7831 | are added to the list with the @code{pushd} command; the | |
7832 | @code{popd} command removes directories from the list. | |
7833 | The current directory is always the first directory in the stack. | |
7834 | ||
7835 | @table @code | |
7836 | @item -c | |
7837 | Clears the directory stack by deleting all of the elements. | |
7838 | @item -l | |
7839 | Produces a listing using full pathnames; | |
7840 | the default listing format uses a tilde to denote the home directory. | |
7841 | @item -p | |
7842 | Causes @code{dirs} to print the directory stack with one entry per | |
7843 | line. | |
7844 | @item -v | |
7845 | Causes @code{dirs} to print the directory stack with one entry per | |
7846 | line, prefixing each entry with its index in the stack. | |
7847 | @item +@var{N} | |
7848 | Displays the @var{N}th directory (counting from the left of the | |
7849 | list printed by @code{dirs} when invoked without options), starting | |
7850 | with zero. | |
7851 | @item -@var{N} | |
7852 | Displays the @var{N}th directory (counting from the right of the | |
7853 | list printed by @code{dirs} when invoked without options), starting | |
7854 | with zero. | |
7855 | @end table | |
7856 | ||
7857 | @item popd | |
7858 | @btindex popd | |
7859 | @example | |
7860 | popd [-n] [+@var{N} | -@var{N}] | |
7861 | @end example | |
7862 | ||
7863 | Removes elements from the directory stack. | |
7864 | The elements are numbered from 0 starting at the first directory | |
7865 | listed by @code{dirs}; | |
7866 | that is, @code{popd} is equivalent to @code{popd +0}. | |
7867 | ||
7868 | When no arguments are given, @code{popd} | |
7869 | removes the top directory from the stack and changes to | |
7870 | the new top directory. | |
7871 | ||
7872 | Arguments, if supplied, have the following meanings: | |
7873 | ||
7874 | @table @code | |
7875 | @item -n | |
7876 | Suppresses the normal change of directory when removing directories | |
7877 | from the stack, so that only the stack is manipulated. | |
7878 | @item +@var{N} | |
7879 | Removes the @var{N}th directory (counting from the left of the | |
7880 | list printed by @code{dirs}), starting with zero, from the stack. | |
7881 | @item -@var{N} | |
7882 | Removes the @var{N}th directory (counting from the right of the | |
7883 | list printed by @code{dirs}), starting with zero, from the stack. | |
7884 | @end table | |
7885 | ||
7886 | If the top element of the directory stack is modified, and | |
7887 | the @option{-n} option was not supplied, @code{popd} uses the @code{cd} | |
7888 | builtin to change to the directory at the top of the stack. | |
7889 | If the @code{cd} fails, @code{popd} returns a non-zero value. | |
7890 | ||
7891 | Otherwise, @code{popd} returns an unsuccessful status if | |
7892 | an invalid option is encountered, the directory stack | |
7893 | is empty, or a non-existent directory stack entry is specified. | |
7894 | ||
7895 | If the @code{popd} command is successful, | |
7896 | Bash runs @code{dirs} to show the final contents of the directory stack, | |
7897 | and the return status is 0. | |
7898 | ||
7899 | @btindex pushd | |
7900 | @item pushd | |
7901 | @example | |
7902 | pushd [-n] [@var{+N} | @var{-N} | @var{dir}] | |
7903 | @end example | |
7904 | ||
7905 | Adds a directory to the top of the directory stack, or rotates | |
7906 | the stack, making the new top of the stack the current working | |
7907 | directory. | |
7908 | With no arguments, @code{pushd} exchanges the top two elements | |
7909 | of the directory stack. | |
7910 | ||
7911 | Arguments, if supplied, have the following meanings: | |
7912 | ||
7913 | @table @code | |
7914 | @item -n | |
7915 | Suppresses the normal change of directory when rotating or | |
7916 | adding directories to the stack, so that only the stack is manipulated. | |
7917 | @item +@var{N} | |
7918 | Brings the @var{N}th directory (counting from the left of the | |
7919 | list printed by @code{dirs}, starting with zero) to the top of | |
7920 | the list by rotating the stack. | |
7921 | @item -@var{N} | |
7922 | Brings the @var{N}th directory (counting from the right of the | |
7923 | list printed by @code{dirs}, starting with zero) to the top of | |
7924 | the list by rotating the stack. | |
7925 | @item @var{dir} | |
7926 | Makes @var{dir} be the top of the stack. | |
7927 | @end table | |
7928 | ||
7929 | After the stack has been modified, if the @option{-n} option was not | |
7930 | supplied, @code{pushd} uses the @code{cd} builtin to change to the | |
7931 | directory at the top of the stack. | |
7932 | If the @code{cd} fails, @code{pushd} returns a non-zero value. | |
7933 | ||
7934 | Otherwise, if no arguments are supplied, @code{pushd} returns 0 unless the | |
7935 | directory stack is empty. | |
7936 | When rotating the directory stack, @code{pushd} returns 0 unless | |
7937 | the directory stack is empty or a non-existent directory stack element | |
7938 | is specified. | |
7939 | ||
7940 | If the @code{pushd} command is successful, | |
7941 | Bash runs @code{dirs} to show the final contents of the directory stack. | |
7942 | ||
7943 | @end table | |
7944 | ||
7945 | @node Controlling the Prompt | |
7946 | @section Controlling the Prompt | |
7947 | @cindex prompting | |
7948 | ||
7949 | Bash examines the value of the array variable @env{PROMPT_COMMAND} just before | |
7950 | printing each primary prompt. | |
7951 | If any elements in @env{PROMPT_COMMAND} are set and non-null, Bash | |
7952 | executes each value, in numeric order, | |
7953 | just as if it had been typed on the command line. | |
7954 | ||
7955 | In addition, the following table describes the special characters which | |
7956 | can appear in the prompt variables @env{PS0}, @env{PS1}, @env{PS2}, and | |
7957 | @env{PS4}: | |
7958 | ||
7959 | @table @code | |
7960 | @item \a | |
7961 | A bell character. | |
7962 | @item \d | |
7963 | The date, in "Weekday Month Date" format (e.g., "Tue May 26"). | |
7964 | @item \D@{@var{format}@} | |
7965 | The @var{format} is passed to @code{strftime}(3) and the result is inserted | |
7966 | into the prompt string; an empty @var{format} results in a locale-specific | |
7967 | time representation. The braces are required. | |
7968 | @item \e | |
7969 | An escape character. | |
7970 | @item \h | |
7971 | The hostname, up to the first `.'. | |
7972 | @item \H | |
7973 | The hostname. | |
7974 | @item \j | |
7975 | The number of jobs currently managed by the shell. | |
7976 | @item \l | |
7977 | The basename of the shell's terminal device name. | |
7978 | @item \n | |
7979 | A newline. | |
7980 | @item \r | |
7981 | A carriage return. | |
7982 | @item \s | |
7983 | The name of the shell, the basename of @code{$0} (the portion | |
7984 | following the final slash). | |
7985 | @item \t | |
7986 | The time, in 24-hour HH:MM:SS format. | |
7987 | @item \T | |
7988 | The time, in 12-hour HH:MM:SS format. | |
7989 | @item \@@ | |
7990 | The time, in 12-hour am/pm format. | |
7991 | @item \A | |
7992 | The time, in 24-hour HH:MM format. | |
7993 | @item \u | |
7994 | The username of the current user. | |
7995 | @item \v | |
7996 | The version of Bash (e.g., 2.00) | |
7997 | @item \V | |
7998 | The release of Bash, version + patchlevel (e.g., 2.00.0) | |
7999 | @item \w | |
8000 | The value of the @code{PWD} shell variable (@env{$PWD}), | |
8001 | with @env{$HOME} abbreviated with a tilde | |
8002 | (uses the @env{$PROMPT_DIRTRIM} variable). | |
8003 | @item \W | |
8004 | The basename of @env{$PWD}, with @env{$HOME} abbreviated with a tilde. | |
8005 | @item \! | |
8006 | The history number of this command. | |
8007 | @item \# | |
8008 | The command number of this command. | |
8009 | @item \$ | |
8010 | If the effective uid is 0, @code{#}, otherwise @code{$}. | |
8011 | @item \@var{nnn} | |
8012 | The character whose ASCII code is the octal value @var{nnn}. | |
8013 | @item \\ | |
8014 | A backslash. | |
8015 | @item \[ | |
8016 | Begin a sequence of non-printing characters. This could be used to | |
8017 | embed a terminal control sequence into the prompt. | |
8018 | @item \] | |
8019 | End a sequence of non-printing characters. | |
8020 | @end table | |
8021 | ||
8022 | The command number and the history number are usually different: | |
8023 | the history number of a command is its position in the history | |
8024 | list, which may include commands restored from the history file | |
8025 | (@pxref{Bash History Facilities}), while the command number is | |
8026 | the position in the sequence of commands executed during the current | |
8027 | shell session. | |
8028 | ||
8029 | After the string is decoded, it is expanded via | |
8030 | parameter expansion, command substitution, arithmetic | |
8031 | expansion, and quote removal, subject to the value of the | |
8032 | @code{promptvars} shell option (@pxref{The Shopt Builtin}). | |
8033 | This can have unwanted side effects if escaped portions of the string | |
8034 | appear within command substitution or contain characters special to | |
8035 | word expansion. | |
8036 | ||
8037 | @node The Restricted Shell | |
8038 | @section The Restricted Shell | |
8039 | @cindex restricted shell | |
8040 | ||
8041 | If Bash is started with the name @code{rbash}, or the | |
8042 | @option{--restricted} | |
8043 | or | |
8044 | @option{-r} | |
8045 | option is supplied at invocation, the shell becomes restricted. | |
8046 | A restricted shell is used to | |
8047 | set up an environment more controlled than the standard shell. | |
8048 | A restricted shell behaves identically to @code{bash} | |
8049 | with the exception that the following are disallowed or not performed: | |
8050 | ||
8051 | @itemize @bullet | |
8052 | @item | |
8053 | Changing directories with the @code{cd} builtin. | |
8054 | @item | |
8055 | Setting or unsetting the values of the @env{SHELL}, @env{PATH}, | |
8056 | @env{HISTFILE}, | |
8057 | @env{ENV}, or @env{BASH_ENV} variables. | |
8058 | @item | |
8059 | Specifying command names containing slashes. | |
8060 | @item | |
8061 | Specifying a filename containing a slash as an argument to the @code{.} | |
8062 | builtin command. | |
8063 | @item | |
8064 | Specifying a filename containing a slash as an argument to the @code{history} | |
8065 | builtin command. | |
8066 | @item | |
8067 | Specifying a filename containing a slash as an argument to the @option{-p} | |
8068 | option to the @code{hash} builtin command. | |
8069 | @item | |
8070 | Importing function definitions from the shell environment at startup. | |
8071 | @item | |
8072 | Parsing the value of @env{SHELLOPTS} from the shell environment at startup. | |
8073 | @item | |
8074 | Redirecting output using the @samp{>}, @samp{>|}, @samp{<>}, @samp{>&}, | |
8075 | @samp{&>}, and @samp{>>} redirection operators. | |
8076 | @item | |
8077 | Using the @code{exec} builtin to replace the shell with another command. | |
8078 | @item | |
8079 | Adding or deleting builtin commands with the | |
8080 | @option{-f} and @option{-d} options to the @code{enable} builtin. | |
8081 | @item | |
8082 | Using the @code{enable} builtin command to enable disabled shell builtins. | |
8083 | @item | |
8084 | Specifying the @option{-p} option to the @code{command} builtin. | |
8085 | @item | |
8086 | Turning off restricted mode with @samp{set +r} or @samp{shopt -u restricted_shell}. | |
8087 | @end itemize | |
8088 | ||
8089 | These restrictions are enforced after any startup files are read. | |
8090 | ||
8091 | When a command that is found to be a shell script is executed | |
8092 | (@pxref{Shell Scripts}), @code{rbash} turns off any restrictions in | |
8093 | the shell spawned to execute the script. | |
8094 | ||
8095 | The restricted shell mode is only one component of a useful restricted | |
8096 | environment. It should be accompanied by setting @env{PATH} to a value | |
8097 | that allows execution of only a few verified commands (commands that | |
8098 | allow shell escapes are particularly vulnerable), changing the current | |
8099 | directory to a non-writable directory other than @env{$HOME} after login, | |
8100 | not allowing the restricted shell to execute shell scripts, and cleaning | |
8101 | the environment of variables that cause some commands to modify their | |
8102 | behavior (e.g., @env{VISUAL} or @env{PAGER}). | |
8103 | ||
8104 | Modern systems provide more secure ways to implement a restricted environment, | |
8105 | such as @code{jails}, @code{zones}, or @code{containers}. | |
8106 | ||
8107 | ||
8108 | @node Bash POSIX Mode | |
8109 | @section Bash POSIX Mode | |
8110 | @cindex POSIX Mode | |
8111 | ||
8112 | Starting Bash with the @option{--posix} command-line option or executing | |
8113 | @samp{set -o posix} while Bash is running will cause Bash to conform more | |
8114 | closely to the @sc{posix} standard by changing the behavior to | |
8115 | match that specified by @sc{posix} in areas where the Bash default differs. | |
8116 | ||
8117 | When invoked as @code{sh}, Bash enters @sc{posix} mode after reading the | |
8118 | startup files. | |
8119 | ||
8120 | The following list is what's changed when `@sc{posix} mode' is in effect: | |
8121 | ||
8122 | @enumerate | |
8123 | @item | |
8124 | Bash ensures that the @env{POSIXLY_CORRECT} variable is set. | |
8125 | ||
8126 | @item | |
8127 | When a command in the hash table no longer exists, Bash will re-search | |
8128 | @env{$PATH} to find the new location. This is also available with | |
8129 | @samp{shopt -s checkhash}. | |
8130 | ||
8131 | @item | |
8132 | Bash will not insert a command without the execute bit set into the | |
8133 | command hash table, even if it returns it as a (last-ditch) result | |
8134 | from a @env{$PATH} search. | |
8135 | ||
8136 | @item | |
8137 | The message printed by the job control code and builtins when a job | |
8138 | exits with a non-zero status is `Done(status)'. | |
8139 | ||
8140 | @item | |
8141 | The message printed by the job control code and builtins when a job | |
8142 | is stopped is `Stopped(@var{signame})', where @var{signame} is, for | |
8143 | example, @code{SIGTSTP}. | |
8144 | ||
8145 | @item | |
8146 | Alias expansion is always enabled, even in non-interactive shells. | |
8147 | ||
8148 | @item | |
8149 | Reserved words appearing in a context where reserved words are recognized | |
8150 | do not undergo alias expansion. | |
8151 | ||
8152 | @item | |
8153 | Alias expansion is performed when initially parsing a command substitution. | |
8154 | The default mode generally defers it, when enabled, until the command | |
8155 | substitution is executed. This means that command substitution will not | |
8156 | expand aliases that are defined after the command substitution is initially | |
8157 | parsed (e.g., as part of a function definition). | |
8158 | ||
8159 | @item | |
8160 | The @sc{posix} @env{PS1} and @env{PS2} expansions of @samp{!} to | |
8161 | the history number and @samp{!!} to @samp{!} are enabled, | |
8162 | and parameter expansion is performed on the values of @env{PS1} and | |
8163 | @env{PS2} regardless of the setting of the @code{promptvars} option. | |
8164 | ||
8165 | @item | |
8166 | The @sc{posix} startup files are executed (@env{$ENV}) rather than | |
8167 | the normal Bash files. | |
8168 | ||
8169 | @item | |
8170 | Tilde expansion is only performed on assignments preceding a command | |
8171 | name, rather than on all assignment statements on the line. | |
8172 | ||
8173 | @item | |
8174 | The default history file is @file{~/.sh_history} (this is the | |
8175 | default value of @env{$HISTFILE}). | |
8176 | ||
8177 | @item | |
8178 | Redirection operators do not perform filename expansion on the word | |
8179 | in the redirection unless the shell is interactive. | |
8180 | ||
8181 | @item | |
8182 | Redirection operators do not perform word splitting on the word in the | |
8183 | redirection. | |
8184 | ||
8185 | @item | |
8186 | Function names must be valid shell @code{name}s. That is, they may not | |
8187 | contain characters other than letters, digits, and underscores, and | |
8188 | may not start with a digit. Declaring a function with an invalid name | |
8189 | causes a fatal syntax error in non-interactive shells. | |
8190 | ||
8191 | @item | |
8192 | Function names may not be the same as one of the @sc{posix} special | |
8193 | builtins. | |
8194 | ||
8195 | @item | |
8196 | @sc{posix} special builtins are found before shell functions | |
8197 | during command lookup. | |
8198 | ||
8199 | @item | |
8200 | When printing shell function definitions (e.g., by @code{type}), Bash does | |
8201 | not print the @code{function} keyword. | |
8202 | ||
8203 | @item | |
8204 | Literal tildes that appear as the first character in elements of | |
8205 | the @env{PATH} variable are not expanded as described above | |
8206 | under @ref{Tilde Expansion}. | |
8207 | ||
8208 | @item | |
8209 | The @code{time} reserved word may be used by itself as a command. When | |
8210 | used in this way, it displays timing statistics for the shell and its | |
8211 | completed children. The @env{TIMEFORMAT} variable controls the format | |
8212 | of the timing information. | |
8213 | ||
8214 | @item | |
8215 | When parsing and expanding a $@{@dots{}@} expansion that appears within | |
8216 | double quotes, single quotes are no longer special and cannot be used to | |
8217 | quote a closing brace or other special character, unless the operator is | |
8218 | one of those defined to perform pattern removal. In this case, they do | |
8219 | not have to appear as matched pairs. | |
8220 | ||
8221 | @item | |
8222 | The parser does not recognize @code{time} as a reserved word if the next | |
8223 | token begins with a @samp{-}. | |
8224 | ||
8225 | @ignore | |
8226 | @item | |
8227 | When parsing @code{$()} command substitutions containing here-documents, | |
8228 | the parser does not allow a here-document to be delimited by the closing | |
8229 | right parenthesis. The newline after the here-document delimiter is required. | |
8230 | @end ignore | |
8231 | ||
8232 | @item | |
8233 | The @samp{!} character does not introduce history expansion within a | |
8234 | double-quoted string, even if the @code{histexpand} option is enabled. | |
8235 | ||
8236 | @item | |
8237 | If a @sc{posix} special builtin returns an error status, a | |
8238 | non-interactive shell exits. The fatal errors are those listed in | |
8239 | the @sc{posix} standard, and include things like passing incorrect options, | |
8240 | redirection errors, variable assignment errors for assignments preceding | |
8241 | the command name, and so on. | |
8242 | ||
8243 | @item | |
8244 | A non-interactive shell exits with an error status if a variable | |
8245 | assignment error occurs when no command name follows the assignment | |
8246 | statements. | |
8247 | A variable assignment error occurs, for example, when trying to assign | |
8248 | a value to a readonly variable. | |
8249 | ||
8250 | @item | |
8251 | A non-interactive shell exits with an error status if a variable | |
8252 | assignment error occurs in an assignment statement preceding a special | |
8253 | builtin, but not with any other simple command. For any other simple | |
8254 | command, the shell aborts execution of that command, and execution continues | |
8255 | at the top level ("the shell shall not perform any further processing of the | |
8256 | command in which the error occurred"). | |
8257 | ||
8258 | @item | |
8259 | A non-interactive shell exits with an error status if the iteration | |
8260 | variable in a @code{for} statement or the selection variable in a | |
8261 | @code{select} statement is a readonly variable. | |
8262 | ||
8263 | @item | |
8264 | Non-interactive shells exit if @var{filename} in @code{.} @var{filename} | |
8265 | is not found. | |
8266 | ||
8267 | @item | |
8268 | Non-interactive shells exit if a syntax error in an arithmetic expansion | |
8269 | results in an invalid expression. | |
8270 | ||
8271 | @item | |
8272 | Non-interactive shells exit if a parameter expansion error occurs. | |
8273 | ||
8274 | @item | |
8275 | Non-interactive shells exit if there is a syntax error in a script read | |
8276 | with the @code{.} or @code{source} builtins, or in a string processed by | |
8277 | the @code{eval} builtin. | |
8278 | ||
8279 | @item | |
8280 | While variable indirection is available, it may not be applied to the | |
8281 | @samp{#} and @samp{?} special parameters. | |
8282 | ||
8283 | @item | |
8284 | Expanding the @samp{*} special parameter in a pattern context where the | |
8285 | expansion is double-quoted does not treat the @code{$*} as if it were | |
8286 | double-quoted. | |
8287 | ||
8288 | @item | |
8289 | Assignment statements preceding @sc{posix} special builtins | |
8290 | persist in the shell environment after the builtin completes. | |
8291 | ||
8292 | @item | |
8293 | The @code{command} builtin does not prevent builtins that take assignment | |
8294 | statements as arguments from expanding them as assignment statements; | |
8295 | when not in @sc{posix} mode, assignment builtins lose their assignment | |
8296 | statement expansion properties when preceded by @code{command}. | |
8297 | ||
8298 | @item | |
8299 | The @code{bg} builtin uses the required format to describe each job placed | |
8300 | in the background, which does not include an indication of whether the job | |
8301 | is the current or previous job. | |
8302 | ||
8303 | @item | |
8304 | The output of @samp{kill -l} prints all the signal names on a single line, | |
8305 | separated by spaces, without the @samp{SIG} prefix. | |
8306 | ||
8307 | @item | |
8308 | The @code{kill} builtin does not accept signal names with a @samp{SIG} | |
8309 | prefix. | |
8310 | ||
8311 | @item | |
8312 | The @code{export} and @code{readonly} builtin commands display their | |
8313 | output in the format required by @sc{posix}. | |
8314 | ||
8315 | @item | |
8316 | The @code{trap} builtin displays signal names without the leading | |
8317 | @code{SIG}. | |
8318 | ||
8319 | @item | |
8320 | The @code{trap} builtin doesn't check the first argument for a possible | |
8321 | signal specification and revert the signal handling to the original | |
8322 | disposition if it is, unless that argument consists solely of digits and | |
8323 | is a valid signal number. If users want to reset the handler for a given | |
8324 | signal to the original disposition, they should use @samp{-} as the | |
8325 | first argument. | |
8326 | ||
8327 | @item | |
8328 | @code{trap -p} displays signals whose dispositions are set to SIG_DFL and | |
8329 | those that were ignored when the shell started. | |
8330 | ||
8331 | @item | |
8332 | The @code{.} and @code{source} builtins do not search the current directory | |
8333 | for the filename argument if it is not found by searching @env{PATH}. | |
8334 | ||
8335 | @item | |
8336 | Enabling @sc{posix} mode has the effect of setting the | |
8337 | @code{inherit_errexit} option, so | |
8338 | subshells spawned to execute command substitutions inherit the value of | |
8339 | the @option{-e} option from the parent shell. | |
8340 | When the @code{inherit_errexit} option is not enabled, | |
8341 | Bash clears the @option{-e} option in such subshells. | |
8342 | ||
8343 | @item | |
8344 | Enabling @sc{posix} mode has the effect of setting the | |
8345 | @code{shift_verbose} option, so numeric arguments to @code{shift} | |
8346 | that exceed the number of positional parameters will result in an | |
8347 | error message. | |
8348 | ||
8349 | @item | |
8350 | When the @code{alias} builtin displays alias definitions, it does not | |
8351 | display them with a leading @samp{alias } unless the @option{-p} option | |
8352 | is supplied. | |
8353 | ||
8354 | @item | |
8355 | When the @code{set} builtin is invoked without options, it does not display | |
8356 | shell function names and definitions. | |
8357 | ||
8358 | @item | |
8359 | When the @code{set} builtin is invoked without options, it displays | |
8360 | variable values without quotes, unless they contain shell metacharacters, | |
8361 | even if the result contains nonprinting characters. | |
8362 | ||
8363 | @item | |
8364 | When the @code{cd} builtin is invoked in logical mode, and the pathname | |
8365 | constructed from @code{$PWD} and the directory name supplied as an argument | |
8366 | does not refer to an existing directory, @code{cd} will fail instead of | |
8367 | falling back to physical mode. | |
8368 | ||
8369 | @item | |
8370 | When the @code{cd} builtin cannot change a directory because the | |
8371 | length of the pathname | |
8372 | constructed from @code{$PWD} and the directory name supplied as an argument | |
8373 | exceeds @code{PATH_MAX} when all symbolic links are expanded, @code{cd} will | |
8374 | fail instead of attempting to use only the supplied directory name. | |
8375 | ||
8376 | @item | |
8377 | The @code{pwd} builtin verifies that the value it prints is the same as the | |
8378 | current directory, even if it is not asked to check the file system with the | |
8379 | @option{-P} option. | |
8380 | ||
8381 | @item | |
8382 | When listing the history, the @code{fc} builtin does not include an | |
8383 | indication of whether or not a history entry has been modified. | |
8384 | ||
8385 | @item | |
8386 | The default editor used by @code{fc} is @code{ed}. | |
8387 | ||
8388 | @item | |
8389 | The @code{type} and @code{command} builtins will not report a non-executable | |
8390 | file as having been found, though the shell will attempt to execute such a | |
8391 | file if it is the only so-named file found in @code{$PATH}. | |
8392 | ||
8393 | @item | |
8394 | The @code{vi} editing mode will invoke the @code{vi} editor directly when | |
8395 | the @samp{v} command is run, instead of checking @code{$VISUAL} and | |
8396 | @code{$EDITOR}. | |
8397 | ||
8398 | @item | |
8399 | When the @code{xpg_echo} option is enabled, Bash does not attempt to interpret | |
8400 | any arguments to @code{echo} as options. Each argument is displayed, after | |
8401 | escape characters are converted. | |
8402 | ||
8403 | @item | |
8404 | The @code{ulimit} builtin uses a block size of 512 bytes for the @option{-c} | |
8405 | and @option{-f} options. | |
8406 | ||
8407 | @item | |
8408 | The arrival of @code{SIGCHLD} when a trap is set on @code{SIGCHLD} does | |
8409 | not interrupt the @code{wait} builtin and cause it to return immediately. | |
8410 | The trap command is run once for each child that exits. | |
8411 | ||
8412 | @item | |
8413 | The @code{read} builtin may be interrupted by a signal for which a trap | |
8414 | has been set. | |
8415 | If Bash receives a trapped signal while executing @code{read}, the trap | |
8416 | handler executes and @code{read} returns an exit status greater than 128. | |
8417 | ||
8418 | @item | |
8419 | The @code{printf} builtin uses @code{double} (via @code{strtod}) to convert | |
8420 | arguments corresponding to floating point conversion specifiers, instead of | |
8421 | @code{long double} if it's available. The @samp{L} length modifier forces | |
8422 | @code{printf} to use @code{long double} if it's available. | |
8423 | ||
8424 | @item | |
8425 | Bash removes an exited background process's status from the list of such | |
8426 | statuses after the @code{wait} builtin is used to obtain it. | |
8427 | ||
8428 | @end enumerate | |
8429 | ||
8430 | There is other @sc{posix} behavior that Bash does not implement by | |
8431 | default even when in @sc{posix} mode. | |
8432 | Specifically: | |
8433 | ||
8434 | @enumerate | |
8435 | ||
8436 | @item | |
8437 | The @code{fc} builtin checks @code{$EDITOR} as a program to edit history | |
8438 | entries if @code{FCEDIT} is unset, rather than defaulting directly to | |
8439 | @code{ed}. @code{fc} uses @code{ed} if @code{EDITOR} is unset. | |
8440 | ||
8441 | @item | |
8442 | As noted above, Bash requires the @code{xpg_echo} option to be enabled for | |
8443 | the @code{echo} builtin to be fully conformant. | |
8444 | ||
8445 | @end enumerate | |
8446 | ||
8447 | Bash can be configured to be @sc{posix}-conformant by default, by specifying | |
8448 | the @option{--enable-strict-posix-default} to @code{configure} when building | |
8449 | (@pxref{Optional Features}). | |
8450 | ||
8451 | @node Shell Compatibility Mode | |
8452 | @section Shell Compatibility Mode | |
8453 | @cindex Compatibility Level | |
8454 | @cindex Compatibility Mode | |
8455 | ||
8456 | Bash-4.0 introduced the concept of a @dfn{shell compatibility level}, | |
8457 | specified as a set of options to the shopt builtin | |
8458 | (@code{compat31}, | |
8459 | @code{compat32}, | |
8460 | @code{compat40}, | |
8461 | @code{compat41}, | |
8462 | and so on). | |
8463 | There is only one current | |
8464 | compatibility level -- each option is mutually exclusive. | |
8465 | The compatibility level is intended to allow users to select behavior | |
8466 | from previous versions that is incompatible with newer versions | |
8467 | while they migrate scripts to use current features and | |
8468 | behavior. It's intended to be a temporary solution. | |
8469 | ||
8470 | This section does not mention behavior that is standard for a particular | |
8471 | version (e.g., setting @code{compat32} means that quoting the rhs of the regexp | |
8472 | matching operator quotes special regexp characters in the word, which is | |
8473 | default behavior in bash-3.2 and subsequent versions). | |
8474 | ||
8475 | If a user enables, say, @code{compat32}, it may affect the behavior of other | |
8476 | compatibility levels up to and including the current compatibility level. | |
8477 | The idea is that each compatibility level controls behavior that changed | |
8478 | in that version of Bash, | |
8479 | but that behavior may have been present in earlier versions. | |
8480 | For instance, the change to use locale-based comparisons with the @code{[[} | |
8481 | command came in bash-4.1, and earlier versions used ASCII-based comparisons, | |
8482 | so enabling @code{compat32} will enable ASCII-based comparisons as well. | |
8483 | That granularity may not be sufficient for | |
8484 | all uses, and as a result users should employ compatibility levels carefully. | |
8485 | Read the documentation for a particular feature to find out the | |
8486 | current behavior. | |
8487 | ||
8488 | Bash-4.3 introduced a new shell variable: @env{BASH_COMPAT}. | |
8489 | The value assigned | |
8490 | to this variable (a decimal version number like 4.2, or an integer | |
8491 | corresponding to the @code{compat}@var{NN} option, like 42) determines the | |
8492 | compatibility level. | |
8493 | ||
8494 | Starting with bash-4.4, Bash has begun deprecating older compatibility | |
8495 | levels. | |
8496 | Eventually, the options will be removed in favor of @env{BASH_COMPAT}. | |
8497 | ||
8498 | Bash-5.0 is the final version for which there will be an individual shopt | |
8499 | option for the previous version. Users should use @env{BASH_COMPAT} | |
8500 | on bash-5.0 and later versions. | |
8501 | ||
8502 | The following table describes the behavior changes controlled by each | |
8503 | compatibility level setting. | |
8504 | The @code{compat}@var{NN} tag is used as shorthand for setting the | |
8505 | compatibility level | |
8506 | to @var{NN} using one of the following mechanisms. | |
8507 | For versions prior to bash-5.0, the compatibility level may be set using | |
8508 | the corresponding @code{compat}@var{NN} shopt option. | |
8509 | For bash-4.3 and later versions, the @env{BASH_COMPAT} variable is preferred, | |
8510 | and it is required for bash-5.1 and later versions. | |
8511 | ||
8512 | @table @code | |
8513 | @item compat31 | |
8514 | @itemize @bullet | |
8515 | @item | |
8516 | quoting the rhs of the @code{[[} command's regexp matching operator (=~) | |
8517 | has no special effect | |
8518 | @end itemize | |
8519 | ||
8520 | @item compat32 | |
8521 | @itemize @bullet | |
8522 | @item | |
8523 | interrupting a command list such as "a ; b ; c" causes the execution | |
8524 | of the next command in the list (in bash-4.0 and later versions, | |
8525 | the shell acts as if it received the interrupt, so | |
8526 | interrupting one command in a list aborts the execution of the | |
8527 | entire list) | |
8528 | @end itemize | |
8529 | ||
8530 | @item compat40 | |
8531 | @itemize @bullet | |
8532 | @item | |
8533 | the @samp{<} and @samp{>} operators to the @code{[[} command do not | |
8534 | consider the current locale when comparing strings; they use ASCII | |
8535 | ordering. | |
8536 | Bash versions prior to bash-4.1 use ASCII collation and strcmp(3); | |
8537 | bash-4.1 and later use the current locale's collation sequence and | |
8538 | strcoll(3). | |
8539 | @end itemize | |
8540 | ||
8541 | @item compat41 | |
8542 | @itemize @bullet | |
8543 | @item | |
8544 | in posix mode, @code{time} may be followed by options and still be | |
8545 | recognized as a reserved word (this is @sc{posix} interpretation 267) | |
8546 | @item | |
8547 | in posix mode, the parser requires that an even number of single | |
8548 | quotes occur in the @var{word} portion of a double-quoted $@{@dots{}@} | |
8549 | parameter expansion and treats them specially, so that characters within | |
8550 | the single quotes are considered quoted | |
8551 | (this is @sc{posix} interpretation 221) | |
8552 | @end itemize | |
8553 | ||
8554 | @item compat42 | |
8555 | @itemize @bullet | |
8556 | @item | |
8557 | the replacement string in double-quoted pattern substitution does not | |
8558 | undergo quote removal, as it does in versions after bash-4.2 | |
8559 | @item | |
8560 | in posix mode, single quotes are considered special when expanding | |
8561 | the @var{word} portion of a double-quoted $@{@dots{}@} parameter expansion | |
8562 | and can be used to quote a closing brace or other special character | |
8563 | (this is part of @sc{posix} interpretation 221); | |
8564 | in later versions, single quotes | |
8565 | are not special within double-quoted word expansions | |
8566 | @end itemize | |
8567 | ||
8568 | @item compat43 | |
8569 | @itemize @bullet | |
8570 | @item | |
8571 | the shell does not print a warning message if an attempt is made to | |
8572 | use a quoted compound assignment as an argument to declare | |
8573 | (e.g., declare -a foo='(1 2)'). Later versions warn that this usage is | |
8574 | deprecated | |
8575 | @item | |
8576 | word expansion errors are considered non-fatal errors that cause the | |
8577 | current command to fail, even in posix mode | |
8578 | (the default behavior is to make them fatal errors that cause the shell | |
8579 | to exit) | |
8580 | @item | |
8581 | when executing a shell function, the loop state (while/until/etc.) | |
8582 | is not reset, so @code{break} or @code{continue} in that function will break | |
8583 | or continue loops in the calling context. Bash-4.4 and later reset | |
8584 | the loop state to prevent this | |
8585 | @end itemize | |
8586 | ||
8587 | @item compat44 | |
8588 | @itemize @bullet | |
8589 | @item | |
8590 | the shell sets up the values used by @env{BASH_ARGV} and @env{BASH_ARGC} | |
8591 | so they can expand to the shell's positional parameters even if extended | |
8592 | debugging mode is not enabled | |
8593 | @item | |
8594 | a subshell inherits loops from its parent context, so @code{break} | |
8595 | or @code{continue} will cause the subshell to exit. | |
8596 | Bash-5.0 and later reset the loop state to prevent the exit | |
8597 | @item | |
8598 | variable assignments preceding builtins like @code{export} and @code{readonly} | |
8599 | that set attributes continue to affect variables with the same | |
8600 | name in the calling environment even if the shell is not in posix | |
8601 | mode | |
8602 | @end itemize | |
8603 | ||
8604 | @item compat50 (set using BASH_COMPAT) | |
8605 | @itemize @bullet | |
8606 | @item | |
8607 | Bash-5.1 changed the way @code{$RANDOM} is generated to introduce slightly | |
8608 | more randomness. If the shell compatibility level is set to 50 or | |
8609 | lower, it reverts to the method from bash-5.0 and previous versions, | |
8610 | so seeding the random number generator by assigning a value to | |
8611 | @env{RANDOM} will produce the same sequence as in bash-5.0 | |
8612 | @item | |
8613 | If the command hash table is empty, Bash versions prior to bash-5.1 | |
8614 | printed an informational message to that effect, even when producing | |
8615 | output that can be reused as input. Bash-5.1 suppresses that message | |
8616 | when the @option{-l} option is supplied. | |
8617 | @end itemize | |
8618 | ||
8619 | @item compat51 (set using BASH_COMPAT) | |
8620 | @itemize @bullet | |
8621 | @item | |
8622 | The @code{unset} builtin will unset the array @code{a} given an argument like | |
8623 | @samp{a[@@]}. | |
8624 | Bash-5.2 will unset an element with key @samp{@@} (associative arrays) | |
8625 | or remove all the elements without unsetting the array (indexed arrays) | |
8626 | @item | |
8627 | arithmetic commands ( ((...)) ) and the expressions in an arithmetic for | |
8628 | statement can be expanded more than once | |
8629 | @item | |
8630 | expressions used as arguments to arithmetic operators in the @code{[[} | |
8631 | conditional command can be expanded more than once | |
8632 | @item | |
8633 | the expressions in substring parameter brace expansion can be | |
8634 | expanded more than once | |
8635 | @item | |
8636 | the expressions in the $(( ... )) word expansion can be expanded | |
8637 | more than once | |
8638 | @item | |
8639 | arithmetic expressions used as indexed array subscripts can be | |
8640 | expanded more than once | |
8641 | @item | |
8642 | @code{test -v}, when given an argument of @samp{A[@@]}, where @var{A} is | |
8643 | an existing associative array, will return true if the array has any set | |
8644 | elements. | |
8645 | Bash-5.2 will look for and report on a key named @samp{@@} | |
8646 | @item | |
8647 | the $@{@var{parameter}[:]=@var{value}@} word expansion will return | |
8648 | @var{value}, before any variable-specific transformations have been | |
8649 | performed (e.g., converting to lowercase). | |
8650 | Bash-5.2 will return the final value assigned to the variable. | |
8651 | @item | |
8652 | Parsing command substitutions will behave as if extended glob | |
8653 | (@pxref{The Shopt Builtin}) | |
8654 | is enabled, so that parsing a command substitution containing an extglob | |
8655 | pattern (say, as part of a shell function) will not fail. | |
8656 | This assumes the intent is to enable extglob before the command is executed | |
8657 | and word expansions are performed. | |
8658 | It will fail at word expansion time if extglob hasn't been | |
8659 | enabled by the time the command is executed. | |
8660 | @end itemize | |
8661 | @end table | |
8662 | ||
8663 | @node Job Control | |
8664 | @chapter Job Control | |
8665 | ||
8666 | This chapter discusses what job control is, how it works, and how | |
8667 | Bash allows you to access its facilities. | |
8668 | ||
8669 | @menu | |
8670 | * Job Control Basics:: How job control works. | |
8671 | * Job Control Builtins:: Bash builtin commands used to interact | |
8672 | with job control. | |
8673 | * Job Control Variables:: Variables Bash uses to customize job | |
8674 | control. | |
8675 | @end menu | |
8676 | ||
8677 | @node Job Control Basics | |
8678 | @section Job Control Basics | |
8679 | @cindex job control | |
8680 | @cindex foreground | |
8681 | @cindex background | |
8682 | @cindex suspending jobs | |
8683 | ||
8684 | Job control | |
8685 | refers to the ability to selectively stop (suspend) | |
8686 | the execution of processes and continue (resume) | |
8687 | their execution at a later point. A user typically employs | |
8688 | this facility via an interactive interface supplied jointly | |
8689 | by the operating system kernel's terminal driver and Bash. | |
8690 | ||
8691 | The shell associates a @var{job} with each pipeline. It keeps a | |
8692 | table of currently executing jobs, which may be listed with the | |
8693 | @code{jobs} command. When Bash starts a job | |
8694 | asynchronously, it prints a line that looks | |
8695 | like: | |
8696 | @example | |
8697 | [1] 25647 | |
8698 | @end example | |
8699 | @noindent | |
8700 | indicating that this job is job number 1 and that the process @sc{id} | |
8701 | of the last process in the pipeline associated with this job is | |
8702 | 25647. All of the processes in a single pipeline are members of | |
8703 | the same job. Bash uses the @var{job} abstraction as the | |
8704 | basis for job control. | |
8705 | ||
8706 | To facilitate the implementation of the user interface to job | |
8707 | control, the operating system maintains the notion of a current terminal | |
8708 | process group @sc{id}. Members of this process group (processes whose | |
8709 | process group @sc{id} is equal to the current terminal process group | |
8710 | @sc{id}) receive keyboard-generated signals such as @code{SIGINT}. | |
8711 | These processes are said to be in the foreground. Background | |
8712 | processes are those whose process group @sc{id} differs from the | |
8713 | terminal's; such processes are immune to keyboard-generated | |
8714 | signals. Only foreground processes are allowed to read from or, if | |
8715 | the user so specifies with @code{stty tostop}, write to the terminal. | |
8716 | Background processes which attempt to | |
8717 | read from (write to when @code{stty tostop} is in effect) the | |
8718 | terminal are sent a @code{SIGTTIN} (@code{SIGTTOU}) | |
8719 | signal by the kernel's terminal driver, | |
8720 | which, unless caught, suspends the process. | |
8721 | ||
8722 | If the operating system on which Bash is running supports | |
8723 | job control, Bash contains facilities to use it. Typing the | |
8724 | @dfn{suspend} character (typically @samp{^Z}, Control-Z) while a | |
8725 | process is running causes that process to be stopped and returns | |
8726 | control to Bash. Typing the @dfn{delayed suspend} character | |
8727 | (typically @samp{^Y}, Control-Y) causes the process to be stopped | |
8728 | when it attempts to read input from the terminal, and control to | |
8729 | be returned to Bash. The user then manipulates the state of | |
8730 | this job, using the @code{bg} command to continue it in the | |
8731 | background, the @code{fg} command to continue it in the | |
8732 | foreground, or the @code{kill} command to kill it. A @samp{^Z} | |
8733 | takes effect immediately, and has the additional side effect of | |
8734 | causing pending output and typeahead to be discarded. | |
8735 | ||
8736 | There are a number of ways to refer to a job in the shell. The | |
8737 | character @samp{%} introduces a job specification (@dfn{jobspec}). | |
8738 | ||
8739 | Job number @code{n} may be referred to as @samp{%n}. | |
8740 | The symbols @samp{%%} and @samp{%+} refer to the shell's notion of the | |
8741 | current job, which is the last job stopped while it was in the foreground | |
8742 | or started in the background. | |
8743 | A single @samp{%} (with no accompanying job specification) also refers | |
8744 | to the current job. | |
8745 | The previous job may be referenced using @samp{%-}. | |
8746 | If there is only a single job, @samp{%+} and @samp{%-} can both be used | |
8747 | to refer to that job. | |
8748 | In output pertaining to jobs (e.g., the output of the @code{jobs} | |
8749 | command), the current job is always flagged with a @samp{+}, and the | |
8750 | previous job with a @samp{-}. | |
8751 | ||
8752 | A job may also be referred to | |
8753 | using a prefix of the name used to start it, or using a substring | |
8754 | that appears in its command line. For example, @samp{%ce} refers | |
8755 | to a stopped job whose command name begins with @samp{ce}. | |
8756 | Using @samp{%?ce}, on the | |
8757 | other hand, refers to any job containing the string @samp{ce} in | |
8758 | its command line. If the prefix or substring matches more than one job, | |
8759 | Bash reports an error. | |
8760 | ||
8761 | Simply naming a job can be used to bring it into the foreground: | |
8762 | @samp{%1} is a synonym for @samp{fg %1}, bringing job 1 from the | |
8763 | background into the foreground. Similarly, @samp{%1 &} resumes | |
8764 | job 1 in the background, equivalent to @samp{bg %1} | |
8765 | ||
8766 | The shell learns immediately whenever a job changes state. | |
8767 | Normally, Bash waits until it is about to print a prompt | |
8768 | before reporting changes in a job's status so as to not interrupt | |
8769 | any other output. | |
8770 | If the @option{-b} option to the @code{set} builtin is enabled, | |
8771 | Bash reports such changes immediately (@pxref{The Set Builtin}). | |
8772 | Any trap on @code{SIGCHLD} is executed for each child process | |
8773 | that exits. | |
8774 | ||
8775 | If an attempt to exit Bash is made while jobs are stopped, (or running, if | |
8776 | the @code{checkjobs} option is enabled -- see @ref{The Shopt Builtin}), the | |
8777 | shell prints a warning message, and if the @code{checkjobs} option is | |
8778 | enabled, lists the jobs and their statuses. | |
8779 | The @code{jobs} command may then be used to inspect their status. | |
8780 | If a second attempt to exit is made without an intervening command, | |
8781 | Bash does not print another warning, and any stopped jobs are terminated. | |
8782 | ||
8783 | When the shell is waiting for a job or process using the @code{wait} | |
8784 | builtin, and job control is enabled, @code{wait} will return when the | |
8785 | job changes state. The @option{-f} option causes @code{wait} to wait | |
8786 | until the job or process terminates before returning. | |
8787 | ||
8788 | @node Job Control Builtins | |
8789 | @section Job Control Builtins | |
8790 | ||
8791 | @table @code | |
8792 | ||
8793 | @item bg | |
8794 | @btindex bg | |
8795 | @example | |
8796 | bg [@var{jobspec} @dots{}] | |
8797 | @end example | |
8798 | ||
8799 | Resume each suspended job @var{jobspec} in the background, as if it | |
8800 | had been started with @samp{&}. | |
8801 | If @var{jobspec} is not supplied, the current job is used. | |
8802 | The return status is zero unless it is run when job control is not | |
8803 | enabled, or, when run with job control enabled, any | |
8804 | @var{jobspec} was not found or specifies a job | |
8805 | that was started without job control. | |
8806 | ||
8807 | @item fg | |
8808 | @btindex fg | |
8809 | @example | |
8810 | fg [@var{jobspec}] | |
8811 | @end example | |
8812 | ||
8813 | Resume the job @var{jobspec} in the foreground and make it the current job. | |
8814 | If @var{jobspec} is not supplied, the current job is used. | |
8815 | The return status is that of the command placed into the foreground, | |
8816 | or non-zero if run when job control is disabled or, when run with | |
8817 | job control enabled, @var{jobspec} does not specify a valid job or | |
8818 | @var{jobspec} specifies a job that was started without job control. | |
8819 | ||
8820 | @item jobs | |
8821 | @btindex jobs | |
8822 | @example | |
8823 | jobs [-lnprs] [@var{jobspec}] | |
8824 | jobs -x @var{command} [@var{arguments}] | |
8825 | @end example | |
8826 | ||
8827 | The first form lists the active jobs. The options have the | |
8828 | following meanings: | |
8829 | ||
8830 | @table @code | |
8831 | @item -l | |
8832 | List process @sc{id}s in addition to the normal information. | |
8833 | ||
8834 | @item -n | |
8835 | Display information only about jobs that have changed status since | |
8836 | the user was last notified of their status. | |
8837 | ||
8838 | @item -p | |
8839 | List only the process @sc{id} of the job's process group leader. | |
8840 | ||
8841 | @item -r | |
8842 | Display only running jobs. | |
8843 | ||
8844 | @item -s | |
8845 | Display only stopped jobs. | |
8846 | @end table | |
8847 | ||
8848 | If @var{jobspec} is given, | |
8849 | output is restricted to information about that job. | |
8850 | If @var{jobspec} is not supplied, the status of all jobs is | |
8851 | listed. | |
8852 | ||
8853 | If the @option{-x} option is supplied, @code{jobs} replaces any | |
8854 | @var{jobspec} found in @var{command} or @var{arguments} with the | |
8855 | corresponding process group @sc{id}, and executes @var{command}, | |
8856 | passing it @var{argument}s, returning its exit status. | |
8857 | ||
8858 | @item kill | |
8859 | @btindex kill | |
8860 | @example | |
8861 | kill [-s @var{sigspec}] [-n @var{signum}] [-@var{sigspec}] @var{jobspec} or @var{pid} | |
8862 | kill -l|-L [@var{exit_status}] | |
8863 | @end example | |
8864 | ||
8865 | Send a signal specified by @var{sigspec} or @var{signum} to the process | |
8866 | named by job specification @var{jobspec} or process @sc{id} @var{pid}. | |
8867 | @var{sigspec} is either a case-insensitive signal name such as | |
8868 | @code{SIGINT} (with or without the @code{SIG} prefix) | |
8869 | or a signal number; @var{signum} is a signal number. | |
8870 | If @var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used. | |
8871 | The @option{-l} option lists the signal names. | |
8872 | If any arguments are supplied when @option{-l} is given, the names of the | |
8873 | signals corresponding to the arguments are listed, and the return status | |
8874 | is zero. | |
8875 | @var{exit_status} is a number specifying a signal number or the exit | |
8876 | status of a process terminated by a signal. | |
8877 | The @option{-L} option is equivalent to @option{-l}. | |
8878 | The return status is zero if at least one signal was successfully sent, | |
8879 | or non-zero if an error occurs or an invalid option is encountered. | |
8880 | ||
8881 | @item wait | |
8882 | @btindex wait | |
8883 | @example | |
8884 | wait [-fn] [-p @var{varname}] [@var{jobspec} or @var{pid} @dots{}] | |
8885 | @end example | |
8886 | ||
8887 | Wait until the child process specified by each process @sc{id} @var{pid} | |
8888 | or job specification @var{jobspec} exits and return the exit status of the | |
8889 | last command waited for. | |
8890 | If a job spec is given, all processes in the job are waited for. | |
8891 | If no arguments are given, | |
8892 | @code{wait} waits for all running background jobs and | |
8893 | the last-executed process substitution, if its process id is the same as | |
8894 | @var{$!}, | |
8895 | and the return status is zero. | |
8896 | If the @option{-n} option is supplied, @code{wait} waits for a single job | |
8897 | from the list of @var{pid}s or @var{jobspec}s or, if no arguments are | |
8898 | supplied, any job, | |
8899 | to complete and returns its exit status. | |
8900 | If none of the supplied arguments is a child of the shell, or if no arguments | |
8901 | are supplied and the shell has no unwaited-for children, the exit status | |
8902 | is 127. | |
8903 | If the @option{-p} option is supplied, the process or job identifier of the job | |
8904 | for which the exit status is returned is assigned to the variable | |
8905 | @var{varname} named by the option argument. | |
8906 | The variable will be unset initially, before any assignment. | |
8907 | This is useful only when the @option{-n} option is supplied. | |
8908 | Supplying the @option{-f} option, when job control is enabled, | |
8909 | forces @code{wait} to wait for each @var{pid} or @var{jobspec} to | |
8910 | terminate before returning its status, instead of returning when it changes | |
8911 | status. | |
8912 | If neither @var{jobspec} nor @var{pid} specifies an active child process | |
8913 | of the shell, the return status is 127. | |
8914 | If @code{wait} is interrupted by a signal, the return status will be greater | |
8915 | than 128, as described above (@pxref{Signals}). | |
8916 | Otherwise, the return status is the exit status | |
8917 | of the last process or job waited for. | |
8918 | ||
8919 | @item disown | |
8920 | @btindex disown | |
8921 | @example | |
8922 | disown [-ar] [-h] [@var{jobspec} @dots{} | @var{pid} @dots{} ] | |
8923 | @end example | |
8924 | ||
8925 | Without options, remove each @var{jobspec} from the table of | |
8926 | active jobs. | |
8927 | If the @option{-h} option is given, the job is not removed from the table, | |
8928 | but is marked so that @code{SIGHUP} is not sent to the job if the shell | |
8929 | receives a @code{SIGHUP}. | |
8930 | If @var{jobspec} is not present, and neither the @option{-a} nor the | |
8931 | @option{-r} option is supplied, the current job is used. | |
8932 | If no @var{jobspec} is supplied, the @option{-a} option means to remove or | |
8933 | mark all jobs; the @option{-r} option without a @var{jobspec} | |
8934 | argument restricts operation to running jobs. | |
8935 | ||
8936 | @item suspend | |
8937 | @btindex suspend | |
8938 | @example | |
8939 | suspend [-f] | |
8940 | @end example | |
8941 | ||
8942 | Suspend the execution of this shell until it receives a | |
8943 | @code{SIGCONT} signal. | |
8944 | A login shell, | |
8945 | or a shell without job control enabled, | |
8946 | cannot be suspended; the @option{-f} | |
8947 | option can be used to override this and force the suspension. | |
8948 | The return status is 0 unless the shell is a login shell | |
8949 | or job control is not enabled | |
8950 | and | |
8951 | @option{-f} | |
8952 | is not supplied. | |
8953 | ||
8954 | @end table | |
8955 | ||
8956 | When job control is not active, the @code{kill} and @code{wait} | |
8957 | builtins do not accept @var{jobspec} arguments. They must be | |
8958 | supplied process @sc{id}s. | |
8959 | ||
8960 | @node Job Control Variables | |
8961 | @section Job Control Variables | |
8962 | ||
8963 | @vtable @code | |
8964 | ||
8965 | @item auto_resume | |
8966 | This variable controls how the shell interacts with the user and | |
8967 | job control. If this variable exists then single word simple | |
8968 | commands without redirections are treated as candidates for resumption | |
8969 | of an existing job. There is no ambiguity allowed; if there is | |
8970 | more than one job beginning with the string typed, then | |
8971 | the most recently accessed job will be selected. | |
8972 | The name of a stopped job, in this context, is the command line | |
8973 | used to start it. If this variable is set to the value @samp{exact}, | |
8974 | the string supplied must match the name of a stopped job exactly; | |
8975 | if set to @samp{substring}, | |
8976 | the string supplied needs to match a substring of the name of a | |
8977 | stopped job. The @samp{substring} value provides functionality | |
8978 | analogous to the @samp{%?} job @sc{id} (@pxref{Job Control Basics}). | |
8979 | If set to any other value, the supplied string must | |
8980 | be a prefix of a stopped job's name; this provides functionality | |
8981 | analogous to the @samp{%} job @sc{id}. | |
8982 | ||
8983 | @end vtable | |
8984 | ||
8985 | @set readline-appendix | |
8986 | @set history-appendix | |
8987 | @cindex Readline, how to use | |
8988 | @include rluser.texi | |
8989 | @cindex History, how to use | |
8990 | @include hsuser.texi | |
8991 | @clear readline-appendix | |
8992 | @clear history-appendix | |
8993 | ||
8994 | @node Installing Bash | |
8995 | @chapter Installing Bash | |
8996 | ||
8997 | This chapter provides basic instructions for installing Bash on | |
8998 | the various supported platforms. The distribution supports the | |
8999 | @sc{gnu} operating systems, nearly every version of Unix, and several | |
9000 | non-Unix systems such as BeOS and Interix. | |
9001 | Other independent ports exist for | |
9002 | @sc{ms-dos}, @sc{os/2}, and Windows platforms. | |
9003 | ||
9004 | @menu | |
9005 | * Basic Installation:: Installation instructions. | |
9006 | * Compilers and Options:: How to set special options for various | |
9007 | systems. | |
9008 | * Compiling For Multiple Architectures:: How to compile Bash for more | |
9009 | than one kind of system from | |
9010 | the same source tree. | |
9011 | * Installation Names:: How to set the various paths used by the installation. | |
9012 | * Specifying the System Type:: How to configure Bash for a particular system. | |
9013 | * Sharing Defaults:: How to share default configuration values among GNU | |
9014 | programs. | |
9015 | * Operation Controls:: Options recognized by the configuration program. | |
9016 | * Optional Features:: How to enable and disable optional features when | |
9017 | building Bash. | |
9018 | @end menu | |
9019 | ||
9020 | @node Basic Installation | |
9021 | @section Basic Installation | |
9022 | @cindex installation | |
9023 | @cindex configuration | |
9024 | @cindex Bash installation | |
9025 | @cindex Bash configuration | |
9026 | ||
9027 | These are installation instructions for Bash. | |
9028 | ||
9029 | The simplest way to compile Bash is: | |
9030 | ||
9031 | @enumerate | |
9032 | @item | |
9033 | @code{cd} to the directory containing the source code and type | |
9034 | @samp{./configure} to configure Bash for your system. If you're | |
9035 | using @code{csh} on an old version of System V, you might need to | |
9036 | type @samp{sh ./configure} instead to prevent @code{csh} from trying | |
9037 | to execute @code{configure} itself. | |
9038 | ||
9039 | Running @code{configure} takes some time. | |
9040 | While running, it prints messages telling which features it is | |
9041 | checking for. | |
9042 | ||
9043 | @item | |
9044 | Type @samp{make} to compile Bash and build the @code{bashbug} bug | |
9045 | reporting script. | |
9046 | ||
9047 | @item | |
9048 | Optionally, type @samp{make tests} to run the Bash test suite. | |
9049 | ||
9050 | @item | |
9051 | Type @samp{make install} to install @code{bash} and @code{bashbug}. | |
9052 | This will also install the manual pages and Info file, message translation | |
9053 | files, some supplemental documentation, a number of example loadable | |
9054 | builtin commands, and a set of header files for developing loadable | |
9055 | builtins. | |
9056 | You may need additional privileges to install @code{bash} to your | |
9057 | desired destination, so @samp{sudo make install} might be required. | |
9058 | More information about controlling the locations where @code{bash} and | |
9059 | other files are installed is below (@pxref{Installation Names}). | |
9060 | ||
9061 | @end enumerate | |
9062 | ||
9063 | The @code{configure} shell script attempts to guess correct | |
9064 | values for various system-dependent variables used during | |
9065 | compilation. It uses those values to create a @file{Makefile} in | |
9066 | each directory of the package (the top directory, the | |
9067 | @file{builtins}, @file{doc}, @file{po}, and @file{support} directories, | |
9068 | each directory under @file{lib}, and several others). It also creates a | |
9069 | @file{config.h} file containing system-dependent definitions. | |
9070 | Finally, it creates a shell script named @code{config.status} that you | |
9071 | can run in the future to recreate the current configuration, a | |
9072 | file @file{config.cache} that saves the results of its tests to | |
9073 | speed up reconfiguring, and a file @file{config.log} containing | |
9074 | compiler output (useful mainly for debugging @code{configure}). | |
9075 | If at some point | |
9076 | @file{config.cache} contains results you don't want to keep, you | |
9077 | may remove or edit it. | |
9078 | ||
9079 | To find out more about the options and arguments that the | |
9080 | @code{configure} script understands, type | |
9081 | ||
9082 | @example | |
9083 | bash-4.2$ ./configure --help | |
9084 | @end example | |
9085 | ||
9086 | @noindent | |
9087 | at the Bash prompt in your Bash source directory. | |
9088 | ||
9089 | If you want to build Bash in a directory separate from the source | |
9090 | directory -- to build for multiple architectures, for example -- | |
9091 | just use the full path to the configure script. The following commands | |
9092 | will build bash in a directory under @file{/usr/local/build} from | |
9093 | the source code in @file{/usr/local/src/bash-4.4}: | |
9094 | ||
9095 | @example | |
9096 | mkdir /usr/local/build/bash-4.4 | |
9097 | cd /usr/local/build/bash-4.4 | |
9098 | bash /usr/local/src/bash-4.4/configure | |
9099 | make | |
9100 | @end example | |
9101 | ||
9102 | See @ref{Compiling For Multiple Architectures} for more information | |
9103 | about building in a directory separate from the source. | |
9104 | ||
9105 | If you need to do unusual things to compile Bash, please | |
9106 | try to figure out how @code{configure} could check whether or not | |
9107 | to do them, and mail diffs or instructions to | |
9108 | @email{bash-maintainers@@gnu.org} so they can be | |
9109 | considered for the next release. | |
9110 | ||
9111 | The file @file{configure.ac} is used to create @code{configure} | |
9112 | by a program called Autoconf. | |
9113 | You only need @file{configure.ac} if you want to change it or regenerate | |
9114 | @code{configure} using a newer version of Autoconf. | |
9115 | If you do this, make sure you are using Autoconf version 2.69 or | |
9116 | newer. | |
9117 | ||
9118 | You can remove the program binaries and object files from the | |
9119 | source code directory by typing @samp{make clean}. To also remove the | |
9120 | files that @code{configure} created (so you can compile Bash for | |
9121 | a different kind of computer), type @samp{make distclean}. | |
9122 | ||
9123 | @node Compilers and Options | |
9124 | @section Compilers and Options | |
9125 | ||
9126 | Some systems require unusual options for compilation or linking | |
9127 | that the @code{configure} script does not know about. You can | |
9128 | give @code{configure} initial values for variables by setting | |
9129 | them in the environment. Using a Bourne-compatible shell, you | |
9130 | can do that on the command line like this: | |
9131 | ||
9132 | @example | |
9133 | CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure | |
9134 | @end example | |
9135 | ||
9136 | On systems that have the @code{env} program, you can do it like this: | |
9137 | ||
9138 | @example | |
9139 | env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure | |
9140 | @end example | |
9141 | ||
9142 | The configuration process uses GCC to build Bash if it | |
9143 | is available. | |
9144 | ||
9145 | @node Compiling For Multiple Architectures | |
9146 | @section Compiling For Multiple Architectures | |
9147 | ||
9148 | You can compile Bash for more than one kind of computer at the | |
9149 | same time, by placing the object files for each architecture in their | |
9150 | own directory. To do this, you must use a version of @code{make} that | |
9151 | supports the @code{VPATH} variable, such as GNU @code{make}. | |
9152 | @code{cd} to the | |
9153 | directory where you want the object files and executables to go and run | |
9154 | the @code{configure} script from the source directory | |
9155 | (@pxref{Basic Installation}). | |
9156 | You may need to | |
9157 | supply the @option{--srcdir=PATH} argument to tell @code{configure} where the | |
9158 | source files are. @code{configure} automatically checks for the | |
9159 | source code in the directory that @code{configure} is in and in `..'. | |
9160 | ||
9161 | If you have to use a @code{make} that does not support the @code{VPATH} | |
9162 | variable, you can compile Bash for one architecture at a | |
9163 | time in the source code directory. After you have installed | |
9164 | Bash for one architecture, use @samp{make distclean} before | |
9165 | reconfiguring for another architecture. | |
9166 | ||
9167 | Alternatively, if your system supports symbolic links, you can use the | |
9168 | @file{support/mkclone} script to create a build tree which has | |
9169 | symbolic links back to each file in the source directory. Here's an | |
9170 | example that creates a build directory in the current directory from a | |
9171 | source directory @file{/usr/gnu/src/bash-2.0}: | |
9172 | ||
9173 | @example | |
9174 | bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 . | |
9175 | @end example | |
9176 | ||
9177 | @noindent | |
9178 | The @code{mkclone} script requires Bash, so you must have already built | |
9179 | Bash for at least one architecture before you can create build | |
9180 | directories for other architectures. | |
9181 | ||
9182 | @node Installation Names | |
9183 | @section Installation Names | |
9184 | ||
9185 | By default, @samp{make install} will install into | |
9186 | @file{/usr/local/bin}, @file{/usr/local/man}, etc.; | |
9187 | that is, the @dfn{installation prefix} defaults to @file{/usr/local}. | |
9188 | You can specify an installation prefix other than @file{/usr/local} by | |
9189 | giving @code{configure} the option @option{--prefix=@var{PATH}}, | |
9190 | or by specifying a value for the @env{prefix} @samp{make} | |
9191 | variable when running @samp{make install} | |
9192 | (e.g., @samp{make install prefix=@var{PATH}}). | |
9193 | The @env{prefix} variable provides a default for @env{exec_prefix} and | |
9194 | other variables used when installing bash. | |
9195 | ||
9196 | You can specify separate installation prefixes for | |
9197 | architecture-specific files and architecture-independent files. | |
9198 | If you give @code{configure} the option | |
9199 | @option{--exec-prefix=@var{PATH}}, @samp{make install} will use | |
9200 | @var{PATH} as the prefix for installing programs and libraries. | |
9201 | Documentation and other data files will still use the regular prefix. | |
9202 | ||
9203 | If you would like to change the installation locations for a single run, | |
9204 | you can specify these variables as arguments to @code{make}: | |
9205 | @samp{make install exec_prefix=/} will install @code{bash} and | |
9206 | @code{bashbug} into @file{/bin} instead of the default @file{/usr/local/bin}. | |
9207 | ||
9208 | If you want to see the files bash will install and where it will install | |
9209 | them without changing anything on your system, specify the variable | |
9210 | @env{DESTDIR} as an argument to @code{make}. Its value should be the | |
9211 | absolute directory path you'd like to use as the root of your sample | |
9212 | installation tree. For example, | |
9213 | ||
9214 | @example | |
9215 | mkdir /fs1/bash-install | |
9216 | make install DESTDIR=/fs1/bash-install | |
9217 | @end example | |
9218 | ||
9219 | @noindent | |
9220 | will install @code{bash} into @file{/fs1/bash-install/usr/local/bin/bash}, | |
9221 | the documentation into directories within | |
9222 | @file{/fs1/bash-install/usr/local/share}, the example loadable builtins into | |
9223 | @file{/fs1/bash-install/usr/local/lib/bash}, and so on. | |
9224 | You can use the usual @env{exec_prefix} and @env{prefix} variables to alter | |
9225 | the directory paths beneath the value of @env{DESTDIR}. | |
9226 | ||
9227 | The GNU Makefile standards provide a more complete description of these | |
9228 | variables and their effects. | |
9229 | ||
9230 | @node Specifying the System Type | |
9231 | @section Specifying the System Type | |
9232 | ||
9233 | There may be some features @code{configure} can not figure out | |
9234 | automatically, but needs to determine by the type of host Bash | |
9235 | will run on. Usually @code{configure} can figure that | |
9236 | out, but if it prints a message saying it can not guess the host | |
9237 | type, give it the @option{--host=TYPE} option. @samp{TYPE} can | |
9238 | either be a short name for the system type, such as @samp{sun4}, | |
9239 | or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM} | |
9240 | (e.g., @samp{i386-unknown-freebsd4.2}). | |
9241 | ||
9242 | See the file @file{support/config.sub} for the possible | |
9243 | values of each field. | |
9244 | ||
9245 | @node Sharing Defaults | |
9246 | @section Sharing Defaults | |
9247 | ||
9248 | If you want to set default values for @code{configure} scripts to | |
9249 | share, you can create a site shell script called | |
9250 | @code{config.site} that gives default values for variables like | |
9251 | @code{CC}, @code{cache_file}, and @code{prefix}. @code{configure} | |
9252 | looks for @file{PREFIX/share/config.site} if it exists, then | |
9253 | @file{PREFIX/etc/config.site} if it exists. Or, you can set the | |
9254 | @code{CONFIG_SITE} environment variable to the location of the site | |
9255 | script. A warning: the Bash @code{configure} looks for a site script, | |
9256 | but not all @code{configure} scripts do. | |
9257 | ||
9258 | @node Operation Controls | |
9259 | @section Operation Controls | |
9260 | ||
9261 | @code{configure} recognizes the following options to control how it | |
9262 | operates. | |
9263 | ||
9264 | @table @code | |
9265 | ||
9266 | @item --cache-file=@var{file} | |
9267 | Use and save the results of the tests in | |
9268 | @var{file} instead of @file{./config.cache}. Set @var{file} to | |
9269 | @file{/dev/null} to disable caching, for debugging | |
9270 | @code{configure}. | |
9271 | ||
9272 | @item --help | |
9273 | Print a summary of the options to @code{configure}, and exit. | |
9274 | ||
9275 | @item --quiet | |
9276 | @itemx --silent | |
9277 | @itemx -q | |
9278 | Do not print messages saying which checks are being made. | |
9279 | ||
9280 | @item --srcdir=@var{dir} | |
9281 | Look for the Bash source code in directory @var{dir}. Usually | |
9282 | @code{configure} can determine that directory automatically. | |
9283 | ||
9284 | @item --version | |
9285 | Print the version of Autoconf used to generate the @code{configure} | |
9286 | script, and exit. | |
9287 | @end table | |
9288 | ||
9289 | @code{configure} also accepts some other, not widely used, boilerplate | |
9290 | options. @samp{configure --help} prints the complete list. | |
9291 | ||
9292 | @node Optional Features | |
9293 | @section Optional Features | |
9294 | ||
9295 | The Bash @code{configure} has a number of @option{--enable-@var{feature}} | |
9296 | options, where @var{feature} indicates an optional part of Bash. | |
9297 | There are also several @option{--with-@var{package}} options, | |
9298 | where @var{package} is something like @samp{bash-malloc} or @samp{purify}. | |
9299 | To turn off the default use of a package, use | |
9300 | @option{--without-@var{package}}. To configure Bash without a feature | |
9301 | that is enabled by default, use @option{--disable-@var{feature}}. | |
9302 | ||
9303 | Here is a complete list of the @option{--enable-} and | |
9304 | @option{--with-} options that the Bash @code{configure} recognizes. | |
9305 | ||
9306 | @table @code | |
9307 | @item --with-afs | |
9308 | Define if you are using the Andrew File System from Transarc. | |
9309 | ||
9310 | @item --with-bash-malloc | |
9311 | Use the Bash version of | |
9312 | @code{malloc} in the directory @file{lib/malloc}. This is not the same | |
9313 | @code{malloc} that appears in @sc{gnu} libc, but an older version | |
9314 | originally derived from the 4.2 @sc{bsd} @code{malloc}. This @code{malloc} | |
9315 | is very fast, but wastes some space on each allocation. | |
9316 | This option is enabled by default. | |
9317 | The @file{NOTES} file contains a list of systems for | |
9318 | which this should be turned off, and @code{configure} disables this | |
9319 | option automatically for a number of systems. | |
9320 | ||
9321 | @item --with-curses | |
9322 | Use the curses library instead of the termcap library. This should | |
9323 | be supplied if your system has an inadequate or incomplete termcap | |
9324 | database. | |
9325 | ||
9326 | @item --with-gnu-malloc | |
9327 | A synonym for @code{--with-bash-malloc}. | |
9328 | ||
9329 | @item --with-installed-readline[=@var{PREFIX}] | |
9330 | Define this to make Bash link with a locally-installed version of Readline | |
9331 | rather than the version in @file{lib/readline}. This works only with | |
9332 | Readline 5.0 and later versions. If @var{PREFIX} is @code{yes} or not | |
9333 | supplied, @code{configure} uses the values of the make variables | |
9334 | @code{includedir} and @code{libdir}, which are subdirectories of @code{prefix} | |
9335 | by default, to find the installed version of Readline if it is not in | |
9336 | the standard system include and library directories. | |
9337 | If @var{PREFIX} is @code{no}, Bash links with the version in | |
9338 | @file{lib/readline}. | |
9339 | If @var{PREFIX} is set to any other value, @code{configure} treats it as | |
9340 | a directory pathname and looks for | |
9341 | the installed version of Readline in subdirectories of that directory | |
9342 | (include files in @var{PREFIX}/@code{include} and the library in | |
9343 | @var{PREFIX}/@code{lib}). | |
9344 | ||
9345 | @item --with-libintl-prefix[=@var{PREFIX}] | |
9346 | Define this to make Bash link with a locally-installed version of the | |
9347 | libintl library instead of the version in @file{lib/intl}. | |
9348 | ||
9349 | @item --with-libiconv-prefix[=@var{PREFIX}] | |
9350 | Define this to make Bash look for libiconv in @var{PREFIX} instead of the | |
9351 | standard system locations. There is no version included with Bash. | |
9352 | ||
9353 | @item --enable-minimal-config | |
9354 | This produces a shell with minimal features, close to the historical | |
9355 | Bourne shell. | |
9356 | @end table | |
9357 | ||
9358 | There are several @option{--enable-} options that alter how Bash is | |
9359 | compiled, linked, and installed, rather than changing run-time features. | |
9360 | ||
9361 | @table @code | |
9362 | @item --enable-largefile | |
9363 | Enable support for @uref{http://www.unix.org/version2/whatsnew/lfs20mar.html, | |
9364 | large files} if the operating system requires special compiler options | |
9365 | to build programs which can access large files. This is enabled by | |
9366 | default, if the operating system provides large file support. | |
9367 | ||
9368 | @item --enable-profiling | |
9369 | This builds a Bash binary that produces profiling information to be | |
9370 | processed by @code{gprof} each time it is executed. | |
9371 | ||
9372 | @item --enable-separate-helpfiles | |
9373 | Use external files for the documentation displayed by the @code{help} builtin | |
9374 | instead of storing the text internally. | |
9375 | ||
9376 | @item --enable-static-link | |
9377 | This causes Bash to be linked statically, if @code{gcc} is being used. | |
9378 | This could be used to build a version to use as root's shell. | |
9379 | ||
9380 | @end table | |
9381 | ||
9382 | The @samp{minimal-config} option can be used to disable all of | |
9383 | the following options, but it is processed first, so individual | |
9384 | options may be enabled using @samp{enable-@var{feature}}. | |
9385 | ||
9386 | All of the following options except for | |
9387 | @samp{alt-array-implementation}, | |
9388 | @samp{disabled-builtins}, | |
9389 | @samp{direxpand-default}, | |
9390 | @samp{strict-posix-default}, | |
9391 | and | |
9392 | @samp{xpg-echo-default} are | |
9393 | enabled by default, unless the operating system does not provide the | |
9394 | necessary support. | |
9395 | ||
9396 | @table @code | |
9397 | @item --enable-alias | |
9398 | Allow alias expansion and include the @code{alias} and @code{unalias} | |
9399 | builtins (@pxref{Aliases}). | |
9400 | ||
9401 | @item --enable-alt-array-implementation | |
9402 | This builds bash using an alternate implementation of arrays | |
9403 | (@pxref{Arrays}) that provides faster access at the expense of using | |
9404 | more memory (sometimes many times more, depending on how sparse an array is). | |
9405 | ||
9406 | @item --enable-arith-for-command | |
9407 | Include support for the alternate form of the @code{for} command | |
9408 | that behaves like the C language @code{for} statement | |
9409 | (@pxref{Looping Constructs}). | |
9410 | ||
9411 | @item --enable-array-variables | |
9412 | Include support for one-dimensional array shell variables | |
9413 | (@pxref{Arrays}). | |
9414 | ||
9415 | @item --enable-bang-history | |
9416 | Include support for @code{csh}-like history substitution | |
9417 | (@pxref{History Interaction}). | |
9418 | ||
9419 | @item --enable-brace-expansion | |
9420 | Include @code{csh}-like brace expansion | |
9421 | ( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ). | |
9422 | See @ref{Brace Expansion}, for a complete description. | |
9423 | ||
9424 | @item --enable-casemod-attributes | |
9425 | Include support for case-modifying attributes in the @code{declare} builtin | |
9426 | and assignment statements. Variables with the @code{uppercase} attribute, | |
9427 | for example, will have their values converted to uppercase upon assignment. | |
9428 | ||
9429 | @item --enable-casemod-expansion | |
9430 | Include support for case-modifying word expansions. | |
9431 | ||
9432 | @item --enable-command-timing | |
9433 | Include support for recognizing @code{time} as a reserved word and for | |
9434 | displaying timing statistics for the pipeline following @code{time} | |
9435 | (@pxref{Pipelines}). | |
9436 | This allows pipelines as well as shell builtins and functions to be timed. | |
9437 | ||
9438 | @item --enable-cond-command | |
9439 | Include support for the @code{[[} conditional command. | |
9440 | (@pxref{Conditional Constructs}). | |
9441 | ||
9442 | @item --enable-cond-regexp | |
9443 | Include support for matching @sc{posix} regular expressions using the | |
9444 | @samp{=~} binary operator in the @code{[[} conditional command. | |
9445 | (@pxref{Conditional Constructs}). | |
9446 | ||
9447 | @item --enable-coprocesses | |
9448 | Include support for coprocesses and the @code{coproc} reserved word | |
9449 | (@pxref{Pipelines}). | |
9450 | ||
9451 | @item --enable-debugger | |
9452 | Include support for the bash debugger (distributed separately). | |
9453 | ||
9454 | @item --enable-dev-fd-stat-broken | |
9455 | If calling @code{stat} on /dev/fd/@var{N} returns different results than | |
9456 | calling @code{fstat} on file descriptor @var{N}, supply this option to | |
9457 | enable a workaround. | |
9458 | This has implications for conditional commands that test file attributes. | |
9459 | ||
9460 | @item --enable-direxpand-default | |
9461 | Cause the @code{direxpand} shell option (@pxref{The Shopt Builtin}) | |
9462 | to be enabled by default when the shell starts. | |
9463 | It is normally disabled by default. | |
9464 | ||
9465 | @item --enable-directory-stack | |
9466 | Include support for a @code{csh}-like directory stack and the | |
9467 | @code{pushd}, @code{popd}, and @code{dirs} builtins | |
9468 | (@pxref{The Directory Stack}). | |
9469 | ||
9470 | @item --enable-disabled-builtins | |
9471 | Allow builtin commands to be invoked via @samp{builtin xxx} | |
9472 | even after @code{xxx} has been disabled using @samp{enable -n xxx}. | |
9473 | See @ref{Bash Builtins}, for details of the @code{builtin} and | |
9474 | @code{enable} builtin commands. | |
9475 | ||
9476 | @item --enable-dparen-arithmetic | |
9477 | Include support for the @code{((@dots{}))} command | |
9478 | (@pxref{Conditional Constructs}). | |
9479 | ||
9480 | @item --enable-extended-glob | |
9481 | Include support for the extended pattern matching features described | |
9482 | above under @ref{Pattern Matching}. | |
9483 | ||
9484 | @item --enable-extended-glob-default | |
9485 | Set the default value of the @code{extglob} shell option described | |
9486 | above under @ref{The Shopt Builtin} to be enabled. | |
9487 | ||
9488 | @item --enable-function-import | |
9489 | Include support for importing function definitions exported by another | |
9490 | instance of the shell from the environment. This option is enabled by | |
9491 | default. | |
9492 | ||
9493 | @item --enable-glob-asciirange-default | |
9494 | Set the default value of the @code{globasciiranges} shell option described | |
9495 | above under @ref{The Shopt Builtin} to be enabled. | |
9496 | This controls the behavior of character ranges when used in pattern matching | |
9497 | bracket expressions. | |
9498 | ||
9499 | @item --enable-help-builtin | |
9500 | Include the @code{help} builtin, which displays help on shell builtins and | |
9501 | variables (@pxref{Bash Builtins}). | |
9502 | ||
9503 | @item --enable-history | |
9504 | Include command history and the @code{fc} and @code{history} | |
9505 | builtin commands (@pxref{Bash History Facilities}). | |
9506 | ||
9507 | @item --enable-job-control | |
9508 | This enables the job control features (@pxref{Job Control}), | |
9509 | if the operating system supports them. | |
9510 | ||
9511 | @item --enable-multibyte | |
9512 | This enables support for multibyte characters if the operating | |
9513 | system provides the necessary support. | |
9514 | ||
9515 | @item --enable-net-redirections | |
9516 | This enables the special handling of filenames of the form | |
9517 | @code{/dev/tcp/@var{host}/@var{port}} and | |
9518 | @code{/dev/udp/@var{host}/@var{port}} | |
9519 | when used in redirections (@pxref{Redirections}). | |
9520 | ||
9521 | @item --enable-process-substitution | |
9522 | This enables process substitution (@pxref{Process Substitution}) if | |
9523 | the operating system provides the necessary support. | |
9524 | ||
9525 | @item --enable-progcomp | |
9526 | Enable the programmable completion facilities | |
9527 | (@pxref{Programmable Completion}). | |
9528 | If Readline is not enabled, this option has no effect. | |
9529 | ||
9530 | @item --enable-prompt-string-decoding | |
9531 | Turn on the interpretation of a number of backslash-escaped characters | |
9532 | in the @env{$PS0}, @env{$PS1}, @env{$PS2}, and @env{$PS4} prompt | |
9533 | strings. See @ref{Controlling the Prompt}, for a complete list of prompt | |
9534 | string escape sequences. | |
9535 | ||
9536 | @item --enable-readline | |
9537 | Include support for command-line editing and history with the Bash | |
9538 | version of the Readline library (@pxref{Command Line Editing}). | |
9539 | ||
9540 | @item --enable-restricted | |
9541 | Include support for a @dfn{restricted shell}. If this is enabled, Bash, | |
9542 | when called as @code{rbash}, enters a restricted mode. See | |
9543 | @ref{The Restricted Shell}, for a description of restricted mode. | |
9544 | ||
9545 | @item --enable-select | |
9546 | Include the @code{select} compound command, which allows the generation of | |
9547 | simple menus (@pxref{Conditional Constructs}). | |
9548 | ||
9549 | @item --enable-single-help-strings | |
9550 | Store the text displayed by the @code{help} builtin as a single string for | |
9551 | each help topic. This aids in translating the text to different languages. | |
9552 | You may need to disable this if your compiler cannot handle very long string | |
9553 | literals. | |
9554 | ||
9555 | @item --enable-strict-posix-default | |
9556 | Make Bash @sc{posix}-conformant by default (@pxref{Bash POSIX Mode}). | |
9557 | ||
9558 | @item --enable-translatable-strings | |
9559 | Enable support for @code{$"@var{string}"} translatable strings | |
9560 | (@pxref{Locale Translation}). | |
9561 | ||
9562 | @item --enable-usg-echo-default | |
9563 | A synonym for @code{--enable-xpg-echo-default}. | |
9564 | ||
9565 | @item --enable-xpg-echo-default | |
9566 | Make the @code{echo} builtin expand backslash-escaped characters by default, | |
9567 | without requiring the @option{-e} option. | |
9568 | This sets the default value of the @code{xpg_echo} shell option to @code{on}, | |
9569 | which makes the Bash @code{echo} behave more like the version specified in | |
9570 | the Single Unix Specification, version 3. | |
9571 | @xref{Bash Builtins}, for a description of the escape sequences that | |
9572 | @code{echo} recognizes. | |
9573 | @end table | |
9574 | ||
9575 | The file @file{config-top.h} contains C Preprocessor | |
9576 | @samp{#define} statements for options which are not settable from | |
9577 | @code{configure}. | |
9578 | Some of these are not meant to be changed; beware of the consequences if | |
9579 | you do. | |
9580 | Read the comments associated with each definition for more | |
9581 | information about its effect. | |
9582 | ||
9583 | @node Reporting Bugs | |
9584 | @appendix Reporting Bugs | |
9585 | ||
9586 | Please report all bugs you find in Bash. | |
9587 | But first, you should | |
9588 | make sure that it really is a bug, and that it appears in the latest | |
9589 | version of Bash. | |
9590 | The latest version of Bash is always available for FTP from | |
9591 | @uref{ftp://ftp.gnu.org/pub/gnu/bash/} and from | |
9592 | @uref{http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz}. | |
9593 | ||
9594 | Once you have determined that a bug actually exists, use the | |
9595 | @code{bashbug} command to submit a bug report. | |
9596 | If you have a fix, you are encouraged to mail that as well! | |
9597 | Suggestions and `philosophical' bug reports may be mailed | |
9598 | to @email{bug-bash@@gnu.org} or posted to the Usenet | |
9599 | newsgroup @code{gnu.bash.bug}. | |
9600 | ||
9601 | All bug reports should include: | |
9602 | @itemize @bullet | |
9603 | @item | |
9604 | The version number of Bash. | |
9605 | @item | |
9606 | The hardware and operating system. | |
9607 | @item | |
9608 | The compiler used to compile Bash. | |
9609 | @item | |
9610 | A description of the bug behaviour. | |
9611 | @item | |
9612 | A short script or `recipe' which exercises the bug and may be used | |
9613 | to reproduce it. | |
9614 | @end itemize | |
9615 | ||
9616 | @noindent | |
9617 | @code{bashbug} inserts the first three items automatically into | |
9618 | the template it provides for filing a bug report. | |
9619 | ||
9620 | Please send all reports concerning this manual to | |
9621 | @email{bug-bash@@gnu.org}. | |
9622 | ||
9623 | @node Major Differences From The Bourne Shell | |
9624 | @appendix Major Differences From The Bourne Shell | |
9625 | ||
9626 | Bash implements essentially the same grammar, parameter and | |
9627 | variable expansion, redirection, and quoting as the Bourne Shell. | |
9628 | Bash uses the @sc{posix} standard as the specification of | |
9629 | how these features are to be implemented. There are some | |
9630 | differences between the traditional Bourne shell and Bash; this | |
9631 | section quickly details the differences of significance. A | |
9632 | number of these differences are explained in greater depth in | |
9633 | previous sections. | |
9634 | This section uses the version of @code{sh} included in SVR4.2 (the | |
9635 | last version of the historical Bourne shell) as the baseline reference. | |
9636 | ||
9637 | @itemize @bullet | |
9638 | ||
9639 | @item | |
9640 | Bash is @sc{posix}-conformant, even where the @sc{posix} specification | |
9641 | differs from traditional @code{sh} behavior (@pxref{Bash POSIX Mode}). | |
9642 | ||
9643 | @item | |
9644 | Bash has multi-character invocation options (@pxref{Invoking Bash}). | |
9645 | ||
9646 | @item | |
9647 | Bash has command-line editing (@pxref{Command Line Editing}) and | |
9648 | the @code{bind} builtin. | |
9649 | ||
9650 | @item | |
9651 | Bash provides a programmable word completion mechanism | |
9652 | (@pxref{Programmable Completion}), and builtin commands | |
9653 | @code{complete}, @code{compgen}, and @code{compopt}, to | |
9654 | manipulate it. | |
9655 | ||
9656 | @item | |
9657 | Bash has command history (@pxref{Bash History Facilities}) and the | |
9658 | @code{history} and @code{fc} builtins to manipulate it. | |
9659 | The Bash history list maintains timestamp information and uses the | |
9660 | value of the @code{HISTTIMEFORMAT} variable to display it. | |
9661 | ||
9662 | @item | |
9663 | Bash implements @code{csh}-like history expansion | |
9664 | (@pxref{History Interaction}). | |
9665 | ||
9666 | @item | |
9667 | Bash has one-dimensional array variables (@pxref{Arrays}), and the | |
9668 | appropriate variable expansions and assignment syntax to use them. | |
9669 | Several of the Bash builtins take options to act on arrays. | |
9670 | Bash provides a number of built-in array variables. | |
9671 | ||
9672 | @item | |
9673 | The @code{$'@dots{}'} quoting syntax, which expands ANSI-C | |
9674 | backslash-escaped characters in the text between the single quotes, | |
9675 | is supported (@pxref{ANSI-C Quoting}). | |
9676 | ||
9677 | @item | |
9678 | Bash supports the @code{$"@dots{}"} quoting syntax to do | |
9679 | locale-specific translation of the characters between the double | |
9680 | quotes. The @option{-D}, @option{--dump-strings}, and @option{--dump-po-strings} | |
9681 | invocation options list the translatable strings found in a script | |
9682 | (@pxref{Locale Translation}). | |
9683 | ||
9684 | @item | |
9685 | Bash implements the @code{!} keyword to negate the return value of | |
9686 | a pipeline (@pxref{Pipelines}). | |
9687 | Very useful when an @code{if} statement needs to act only if a test fails. | |
9688 | The Bash @samp{-o pipefail} option to @code{set} will cause a pipeline to | |
9689 | return a failure status if any command fails. | |
9690 | ||
9691 | @item | |
9692 | Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}). | |
9693 | The display of the timing statistics may be controlled with the | |
9694 | @env{TIMEFORMAT} variable. | |
9695 | ||
9696 | @item | |
9697 | Bash implements the @code{for (( @var{expr1} ; @var{expr2} ; @var{expr3} ))} | |
9698 | arithmetic for command, similar to the C language (@pxref{Looping Constructs}). | |
9699 | ||
9700 | @item | |
9701 | Bash includes the @code{select} compound command, which allows the | |
9702 | generation of simple menus (@pxref{Conditional Constructs}). | |
9703 | ||
9704 | @item | |
9705 | Bash includes the @code{[[} compound command, which makes conditional | |
9706 | testing part of the shell grammar (@pxref{Conditional Constructs}), including | |
9707 | optional regular expression matching. | |
9708 | ||
9709 | @item | |
9710 | Bash provides optional case-insensitive matching for the @code{case} and | |
9711 | @code{[[} constructs. | |
9712 | ||
9713 | @item | |
9714 | Bash includes brace expansion (@pxref{Brace Expansion}) and tilde | |
9715 | expansion (@pxref{Tilde Expansion}). | |
9716 | ||
9717 | @item | |
9718 | Bash implements command aliases and the @code{alias} and @code{unalias} | |
9719 | builtins (@pxref{Aliases}). | |
9720 | ||
9721 | @item | |
9722 | Bash provides shell arithmetic, the @code{((} compound command | |
9723 | (@pxref{Conditional Constructs}), | |
9724 | and arithmetic expansion (@pxref{Shell Arithmetic}). | |
9725 | ||
9726 | @item | |
9727 | Variables present in the shell's initial environment are automatically | |
9728 | exported to child processes. The Bourne shell does not normally do | |
9729 | this unless the variables are explicitly marked using the @code{export} | |
9730 | command. | |
9731 | ||
9732 | @item | |
9733 | Bash supports the @samp{+=} assignment operator, which appends to the value | |
9734 | of the variable named on the left hand side. | |
9735 | ||
9736 | @item | |
9737 | Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%} | |
9738 | and @samp{##} expansions to remove leading or trailing substrings from | |
9739 | variable values (@pxref{Shell Parameter Expansion}). | |
9740 | ||
9741 | @item | |
9742 | The expansion @code{$@{#xx@}}, which returns the length of @code{$@{xx@}}, | |
9743 | is supported (@pxref{Shell Parameter Expansion}). | |
9744 | ||
9745 | @item | |
9746 | The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}}, | |
9747 | which expands to the substring of @code{var}'s value of length | |
9748 | @var{length}, beginning at @var{offset}, is present | |
9749 | (@pxref{Shell Parameter Expansion}). | |
9750 | ||
9751 | @item | |
9752 | The expansion | |
9753 | @code{$@{@var{var}/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}}, | |
9754 | which matches @var{pattern} and replaces it with @var{replacement} in | |
9755 | the value of @var{var}, is available (@pxref{Shell Parameter Expansion}). | |
9756 | ||
9757 | @item | |
9758 | The expansion @code{$@{!@var{prefix}*@}} expansion, which expands to | |
9759 | the names of all shell variables whose names begin with @var{prefix}, | |
9760 | is available (@pxref{Shell Parameter Expansion}). | |
9761 | ||
9762 | @item | |
9763 | Bash has indirect variable expansion using @code{$@{!word@}} | |
9764 | (@pxref{Shell Parameter Expansion}). | |
9765 | ||
9766 | @item | |
9767 | Bash can expand positional parameters beyond @code{$9} using | |
9768 | @code{$@{@var{num}@}}. | |
9769 | ||
9770 | @item | |
9771 | The @sc{posix} @code{$()} form of command substitution | |
9772 | is implemented (@pxref{Command Substitution}), | |
9773 | and preferred to the Bourne shell's @code{``} (which | |
9774 | is also implemented for backwards compatibility). | |
9775 | ||
9776 | @item | |
9777 | Bash has process substitution (@pxref{Process Substitution}). | |
9778 | ||
9779 | @item | |
9780 | Bash automatically assigns variables that provide information about the | |
9781 | current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host | |
9782 | (@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}), | |
9783 | and the instance of Bash that is running (@env{BASH}, | |
9784 | @env{BASH_VERSION}, and @env{BASH_VERSINFO}). @xref{Bash Variables}, | |
9785 | for details. | |
9786 | ||
9787 | @item | |
9788 | The @env{IFS} variable is used to split only the results of expansion, | |
9789 | not all words (@pxref{Word Splitting}). | |
9790 | This closes a longstanding shell security hole. | |
9791 | ||
9792 | @item | |
9793 | The filename expansion bracket expression code uses @samp{!} and @samp{^} | |
9794 | to negate the set of characters between the brackets. | |
9795 | The Bourne shell uses only @samp{!}. | |
9796 | ||
9797 | @item | |
9798 | Bash implements the full set of @sc{posix} filename expansion operators, | |
9799 | including character classes, equivalence classes, and | |
9800 | collating symbols (@pxref{Filename Expansion}). | |
9801 | ||
9802 | @item | |
9803 | Bash implements extended pattern matching features when the @code{extglob} | |
9804 | shell option is enabled (@pxref{Pattern Matching}). | |
9805 | ||
9806 | @item | |
9807 | It is possible to have a variable and a function with the same name; | |
9808 | @code{sh} does not separate the two name spaces. | |
9809 | ||
9810 | @item | |
9811 | Bash functions are permitted to have local variables using the | |
9812 | @code{local} builtin, and thus useful recursive functions may be written | |
9813 | (@pxref{Bash Builtins}). | |
9814 | ||
9815 | @item | |
9816 | Variable assignments preceding commands affect only that command, even | |
9817 | builtins and functions (@pxref{Environment}). | |
9818 | In @code{sh}, all variable assignments | |
9819 | preceding commands are global unless the command is executed from the | |
9820 | file system. | |
9821 | ||
9822 | @item | |
9823 | Bash performs filename expansion on filenames specified as operands | |
9824 | to input and output redirection operators (@pxref{Redirections}). | |
9825 | ||
9826 | @item | |
9827 | Bash contains the @samp{<>} redirection operator, allowing a file to be | |
9828 | opened for both reading and writing, and the @samp{&>} redirection | |
9829 | operator, for directing standard output and standard error to the same | |
9830 | file (@pxref{Redirections}). | |
9831 | ||
9832 | @item | |
9833 | Bash includes the @samp{<<<} redirection operator, allowing a string to | |
9834 | be used as the standard input to a command. | |
9835 | ||
9836 | @item | |
9837 | Bash implements the @samp{[n]<&@var{word}} and @samp{[n]>&@var{word}} | |
9838 | redirection operators, which move one file descriptor to another. | |
9839 | ||
9840 | @item | |
9841 | Bash treats a number of filenames specially when they are | |
9842 | used in redirection operators (@pxref{Redirections}). | |
9843 | ||
9844 | @item | |
9845 | Bash can open network connections to arbitrary machines and services | |
9846 | with the redirection operators (@pxref{Redirections}). | |
9847 | ||
9848 | @item | |
9849 | The @code{noclobber} option is available to avoid overwriting existing | |
9850 | files with output redirection (@pxref{The Set Builtin}). | |
9851 | The @samp{>|} redirection operator may be used to override @code{noclobber}. | |
9852 | ||
9853 | @item | |
9854 | The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins}) | |
9855 | each take @option{-L} and @option{-P} options to switch between logical and | |
9856 | physical modes. | |
9857 | ||
9858 | @item | |
9859 | Bash allows a function to override a builtin with the same name, and provides | |
9860 | access to that builtin's functionality within the function via the | |
9861 | @code{builtin} and @code{command} builtins (@pxref{Bash Builtins}). | |
9862 | ||
9863 | @item | |
9864 | The @code{command} builtin allows selective disabling of functions | |
9865 | when command lookup is performed (@pxref{Bash Builtins}). | |
9866 | ||
9867 | @item | |
9868 | Individual builtins may be enabled or disabled using the @code{enable} | |
9869 | builtin (@pxref{Bash Builtins}). | |
9870 | ||
9871 | @item | |
9872 | The Bash @code{exec} builtin takes additional options that allow users | |
9873 | to control the contents of the environment passed to the executed | |
9874 | command, and what the zeroth argument to the command is to be | |
9875 | (@pxref{Bourne Shell Builtins}). | |
9876 | ||
9877 | @item | |
9878 | Shell functions may be exported to children via the environment | |
9879 | using @code{export -f} (@pxref{Shell Functions}). | |
9880 | ||
9881 | @item | |
9882 | The Bash @code{export}, @code{readonly}, and @code{declare} builtins can | |
9883 | take a @option{-f} option to act on shell functions, a @option{-p} option to | |
9884 | display variables with various attributes set in a format that can be | |
9885 | used as shell input, a @option{-n} option to remove various variable | |
9886 | attributes, and @samp{name=value} arguments to set variable attributes | |
9887 | and values simultaneously. | |
9888 | ||
9889 | @item | |
9890 | The Bash @code{hash} builtin allows a name to be associated with | |
9891 | an arbitrary filename, even when that filename cannot be found by | |
9892 | searching the @env{$PATH}, using @samp{hash -p} | |
9893 | (@pxref{Bourne Shell Builtins}). | |
9894 | ||
9895 | @item | |
9896 | Bash includes a @code{help} builtin for quick reference to shell | |
9897 | facilities (@pxref{Bash Builtins}). | |
9898 | ||
9899 | @item | |
9900 | The @code{printf} builtin is available to display formatted output | |
9901 | (@pxref{Bash Builtins}). | |
9902 | ||
9903 | @item | |
9904 | The Bash @code{read} builtin (@pxref{Bash Builtins}) | |
9905 | will read a line ending in @samp{\} with | |
9906 | the @option{-r} option, and will use the @env{REPLY} variable as a | |
9907 | default if no non-option arguments are supplied. | |
9908 | The Bash @code{read} builtin | |
9909 | also accepts a prompt string with the @option{-p} option and will use | |
9910 | Readline to obtain the line when given the @option{-e} option. | |
9911 | The @code{read} builtin also has additional options to control input: | |
9912 | the @option{-s} option will turn off echoing of input characters as | |
9913 | they are read, the @option{-t} option will allow @code{read} to time out | |
9914 | if input does not arrive within a specified number of seconds, the | |
9915 | @option{-n} option will allow reading only a specified number of | |
9916 | characters rather than a full line, and the @option{-d} option will read | |
9917 | until a particular character rather than newline. | |
9918 | ||
9919 | @item | |
9920 | The @code{return} builtin may be used to abort execution of scripts | |
9921 | executed with the @code{.} or @code{source} builtins | |
9922 | (@pxref{Bourne Shell Builtins}). | |
9923 | ||
9924 | @item | |
9925 | Bash includes the @code{shopt} builtin, for finer control of shell | |
9926 | optional capabilities (@pxref{The Shopt Builtin}), and allows these options | |
9927 | to be set and unset at shell invocation (@pxref{Invoking Bash}). | |
9928 | ||
9929 | @item | |
9930 | Bash has much more optional behavior controllable with the @code{set} | |
9931 | builtin (@pxref{The Set Builtin}). | |
9932 | ||
9933 | @item | |
9934 | The @samp{-x} (@option{xtrace}) option displays commands other than | |
9935 | simple commands when performing an execution trace | |
9936 | (@pxref{The Set Builtin}). | |
9937 | ||
9938 | @item | |
9939 | The @code{test} builtin (@pxref{Bourne Shell Builtins}) | |
9940 | is slightly different, as it implements the @sc{posix} algorithm, | |
9941 | which specifies the behavior based on the number of arguments. | |
9942 | ||
9943 | @item | |
9944 | Bash includes the @code{caller} builtin, which displays the context of | |
9945 | any active subroutine call (a shell function or a script executed with | |
9946 | the @code{.} or @code{source} builtins). This supports the Bash | |
9947 | debugger. | |
9948 | ||
9949 | @item | |
9950 | The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a | |
9951 | @code{DEBUG} pseudo-signal specification, similar to @code{EXIT}. | |
9952 | Commands specified with a @code{DEBUG} trap are executed before every | |
9953 | simple command, @code{for} command, @code{case} command, | |
9954 | @code{select} command, every arithmetic @code{for} command, and before | |
9955 | the first command executes in a shell function. | |
9956 | The @code{DEBUG} trap is not inherited by shell functions unless the | |
9957 | function has been given the @code{trace} attribute or the | |
9958 | @code{functrace} option has been enabled using the @code{shopt} builtin. | |
9959 | The @code{extdebug} shell option has additional effects on the | |
9960 | @code{DEBUG} trap. | |
9961 | ||
9962 | The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an | |
9963 | @code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}. | |
9964 | Commands specified with an @code{ERR} trap are executed after a simple | |
9965 | command fails, with a few exceptions. | |
9966 | The @code{ERR} trap is not inherited by shell functions unless the | |
9967 | @code{-o errtrace} option to the @code{set} builtin is enabled. | |
9968 | ||
9969 | The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a | |
9970 | @code{RETURN} pseudo-signal specification, similar to | |
9971 | @code{EXIT} and @code{DEBUG}. | |
9972 | Commands specified with a @code{RETURN} trap are executed before | |
9973 | execution resumes after a shell function or a shell script executed with | |
9974 | @code{.} or @code{source} returns. | |
9975 | The @code{RETURN} trap is not inherited by shell functions unless the | |
9976 | function has been given the @code{trace} attribute or the | |
9977 | @code{functrace} option has been enabled using the @code{shopt} builtin. | |
9978 | ||
9979 | @item | |
9980 | The Bash @code{type} builtin is more extensive and gives more information | |
9981 | about the names it finds (@pxref{Bash Builtins}). | |
9982 | ||
9983 | @item | |
9984 | The Bash @code{umask} builtin permits a @option{-p} option to cause | |
9985 | the output to be displayed in the form of a @code{umask} command | |
9986 | that may be reused as input (@pxref{Bourne Shell Builtins}). | |
9987 | ||
9988 | @item | |
9989 | Bash implements a @code{csh}-like directory stack, and provides the | |
9990 | @code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it | |
9991 | (@pxref{The Directory Stack}). | |
9992 | Bash also makes the directory stack visible as the value of the | |
9993 | @env{DIRSTACK} shell variable. | |
9994 | ||
9995 | @item | |
9996 | Bash interprets special backslash-escaped characters in the prompt | |
9997 | strings when interactive (@pxref{Controlling the Prompt}). | |
9998 | ||
9999 | @item | |
10000 | The Bash restricted mode is more useful (@pxref{The Restricted Shell}); | |
10001 | the SVR4.2 shell restricted mode is too limited. | |
10002 | ||
10003 | @item | |
10004 | The @code{disown} builtin can remove a job from the internal shell | |
10005 | job table (@pxref{Job Control Builtins}) or suppress the sending | |
10006 | of @code{SIGHUP} to a job when the shell exits as the result of a | |
10007 | @code{SIGHUP}. | |
10008 | ||
10009 | @item | |
10010 | Bash includes a number of features to support a separate debugger for | |
10011 | shell scripts. | |
10012 | ||
10013 | @item | |
10014 | The SVR4.2 shell has two privilege-related builtins | |
10015 | (@code{mldmode} and @code{priv}) not present in Bash. | |
10016 | ||
10017 | @item | |
10018 | Bash does not have the @code{stop} or @code{newgrp} builtins. | |
10019 | ||
10020 | @item | |
10021 | Bash does not use the @env{SHACCT} variable or perform shell accounting. | |
10022 | ||
10023 | @item | |
10024 | The SVR4.2 @code{sh} uses a @env{TIMEOUT} variable like Bash uses | |
10025 | @env{TMOUT}. | |
10026 | ||
10027 | @end itemize | |
10028 | ||
10029 | @noindent | |
10030 | More features unique to Bash may be found in @ref{Bash Features}. | |
10031 | ||
10032 | ||
10033 | @appendixsec Implementation Differences From The SVR4.2 Shell | |
10034 | ||
10035 | Since Bash is a completely new implementation, it does not suffer from | |
10036 | many of the limitations of the SVR4.2 shell. For instance: | |
10037 | ||
10038 | @itemize @bullet | |
10039 | ||
10040 | @item | |
10041 | Bash does not fork a subshell when redirecting into or out of | |
10042 | a shell control structure such as an @code{if} or @code{while} | |
10043 | statement. | |
10044 | ||
10045 | @item | |
10046 | Bash does not allow unbalanced quotes. The SVR4.2 shell will silently | |
10047 | insert a needed closing quote at @code{EOF} under certain circumstances. | |
10048 | This can be the cause of some hard-to-find errors. | |
10049 | ||
10050 | @item | |
10051 | The SVR4.2 shell uses a baroque memory management scheme based on | |
10052 | trapping @code{SIGSEGV}. If the shell is started from a process with | |
10053 | @code{SIGSEGV} blocked (e.g., by using the @code{system()} C library | |
10054 | function call), it misbehaves badly. | |
10055 | ||
10056 | @item | |
10057 | In a questionable attempt at security, the SVR4.2 shell, | |
10058 | when invoked without the @option{-p} option, will alter its real | |
10059 | and effective @sc{uid} and @sc{gid} if they are less than some | |
10060 | magic threshold value, commonly 100. | |
10061 | This can lead to unexpected results. | |
10062 | ||
10063 | @item | |
10064 | The SVR4.2 shell does not allow users to trap @code{SIGSEGV}, | |
10065 | @code{SIGALRM}, or @code{SIGCHLD}. | |
10066 | ||
10067 | @item | |
10068 | The SVR4.2 shell does not allow the @env{IFS}, @env{MAILCHECK}, | |
10069 | @env{PATH}, @env{PS1}, or @env{PS2} variables to be unset. | |
10070 | ||
10071 | @item | |
10072 | The SVR4.2 shell treats @samp{^} as the undocumented equivalent of | |
10073 | @samp{|}. | |
10074 | ||
10075 | @item | |
10076 | Bash allows multiple option arguments when it is invoked (@code{-x -v}); | |
10077 | the SVR4.2 shell allows only one option argument (@code{-xv}). In | |
10078 | fact, some versions of the shell dump core if the second argument begins | |
10079 | with a @samp{-}. | |
10080 | ||
10081 | @item | |
10082 | The SVR4.2 shell exits a script if any builtin fails; Bash exits | |
10083 | a script only if one of the @sc{posix} special builtins fails, and | |
10084 | only for certain failures, as enumerated in the @sc{posix} standard. | |
10085 | ||
10086 | @item | |
10087 | The SVR4.2 shell behaves differently when invoked as @code{jsh} | |
10088 | (it turns on job control). | |
10089 | @end itemize | |
10090 | ||
10091 | @node GNU Free Documentation License | |
10092 | @appendix GNU Free Documentation License | |
10093 | ||
10094 | @include fdl.texi | |
10095 | ||
10096 | @node Indexes | |
10097 | @appendix Indexes | |
10098 | ||
10099 | @menu | |
10100 | * Builtin Index:: Index of Bash builtin commands. | |
10101 | * Reserved Word Index:: Index of Bash reserved words. | |
10102 | * Variable Index:: Quick reference helps you find the | |
10103 | variable you want. | |
10104 | * Function Index:: Index of bindable Readline functions. | |
10105 | * Concept Index:: General index for concepts described in | |
10106 | this manual. | |
10107 | @end menu | |
10108 | ||
10109 | @node Builtin Index | |
10110 | @appendixsec Index of Shell Builtin Commands | |
10111 | @printindex bt | |
10112 | ||
10113 | @node Reserved Word Index | |
10114 | @appendixsec Index of Shell Reserved Words | |
10115 | @printindex rw | |
10116 | ||
10117 | @node Variable Index | |
10118 | @appendixsec Parameter and Variable Index | |
10119 | @printindex vr | |
10120 | ||
10121 | @node Function Index | |
10122 | @appendixsec Function Index | |
10123 | @printindex fn | |
10124 | ||
10125 | @node Concept Index | |
10126 | @appendixsec Concept Index | |
10127 | @printindex cp | |
10128 | ||
10129 | @bye |