1 This is the Bash FAQ, version 3.34, for Bash version 3.2.
3 This document contains a set of frequently-asked questions concerning
4 Bash, the GNU Bourne-Again Shell. Bash is a freely-available command
5 interpreter with advanced features for both interactive use and shell
8 Another good source of basic information about shells is the collection
9 of FAQ articles periodically posted to comp.unix.shell.
11 Questions and comments concerning this document should be sent to
14 This document is available for anonymous FTP with the URL
16 ftp://ftp.cwru.edu/pub/bash/FAQ
18 The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
26 A2) What's the latest version?
27 A3) Where can I get it?
28 A4) On what machines will bash run?
29 A5) Will bash run on operating systems other than Unix?
30 A6) How can I build bash with gcc?
31 A7) How can I make bash my login shell?
32 A8) I just changed my login shell to bash, and now I can't FTP into my
34 A9) What's the `POSIX Shell and Utilities standard'?
35 A10) What is the bash `posix mode'?
37 Section B: The latest version
39 B1) What's new in version 3.2?
40 B2) Are there any user-visible incompatibilities between bash-3.2 and
43 Section C: Differences from other Unix shells
45 C1) How does bash differ from sh, the Bourne shell?
46 C2) How does bash differ from the Korn shell, version ksh88?
47 C3) Which new features in ksh-93 are not in bash, and which are?
49 Section D: Why does bash do some things differently than other Unix shells?
51 D1) Why does bash run a different version of `command' than
52 `which command' says it will?
53 D2) Why doesn't bash treat brace expansions exactly like csh?
54 D3) Why doesn't bash have csh variable modifiers?
55 D4) How can I make my csh aliases work when I convert to bash?
56 D5) How can I pipe standard output and standard error from one command to
57 another, like csh does with `|&'?
58 D6) Now that I've converted from ksh to bash, are there equivalents to
59 ksh features like autoloaded functions and the `whence' command?
61 Section E: Why does bash do certain things the way it does?
63 E1) Why is the bash builtin `test' slightly different from /bin/test?
64 E2) Why does bash sometimes say `Broken pipe'?
65 E3) When I have terminal escape sequences in my prompt, why does bash
66 wrap lines at the wrong column?
67 E4) If I pipe the output of a command into `read variable', why doesn't
68 the output show up in $variable when the read command finishes?
69 E5) I have a bunch of shell scripts that use backslash-escaped characters
70 in arguments to `echo'. Bash doesn't interpret these characters. Why
71 not, and how can I make it understand them?
72 E6) Why doesn't a while or for loop get suspended when I type ^Z?
73 E7) What about empty for loops in Makefiles?
74 E8) Why does the arithmetic evaluation code complain about `08'?
75 E9) Why does the pattern matching expression [A-Z]* match files beginning
76 with every letter except `z'?
77 E10) Why does `cd //' leave $PWD as `//'?
78 E11) If I resize my xterm while another program is running, why doesn't bash
80 E12) Why don't negative offsets in substring expansion work like I expect?
81 E13) Why does filename completion misbehave if a colon appears in the filename?
83 Section F: Things to watch out for on certain Unix versions
85 F1) Why can't I use command line editing in my `cmdtool'?
86 F2) I built bash on Solaris 2. Why do globbing expansions and filename
87 completion chop off the first few characters of each filename?
88 F3) Why does bash dump core after I interrupt username completion or
89 `~user' tilde expansion on a machine running NIS?
90 F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
91 F5) Why does bash report syntax errors when my C News scripts use a
92 redirection before a subshell command?
93 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
94 F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
97 Section G: How can I get bash to do certain common things?
99 G1) How can I get bash to read and display eight-bit characters?
100 G2) How do I write a function `x' to replace builtin command `x', but
101 still invoke the command from within the function?
102 G3) How can I find the value of a shell variable whose name is the value
103 of another shell variable?
104 G4) How can I make the bash `time' reserved word print timing output that
105 looks like the output from my system's /usr/bin/time?
106 G5) How do I get the current directory into my prompt?
107 G6) How can I rename "*.foo" to "*.bar"?
108 G7) How can I translate a filename from uppercase to lowercase?
109 G8) How can I write a filename expansion (globbing) pattern that will match
110 all files in the current directory except "." and ".."?
112 Section H: Where do I go from here?
114 H1) How do I report bugs in bash, and where should I look for fixes and
116 H2) What kind of bash documentation is there?
117 H3) What's coming in future versions?
118 H4) What's on the bash `wish list'?
119 H5) When will the next release appear?
122 Section A: The Basics
126 Bash is a Unix command interpreter (shell). It is an implementation of
127 the Posix 1003.2 shell standard, and resembles the Korn and System V
130 Bash contains a number of enhancements over those shells, both
131 for interactive use and shell programming. Features geared
132 toward interactive use include command line editing, command
133 history, job control, aliases, and prompt expansion. Programming
134 features include additional variable expansions, shell
135 arithmetic, and a number of variables and options to control
138 Bash was originally written by Brian Fox of the Free Software
139 Foundation. The current developer and maintainer is Chet Ramey
140 of Case Western Reserve University.
142 A2) What's the latest version?
144 The latest version is 3.2, first made available on 12 October, 2006.
146 A3) Where can I get it?
148 Bash is the GNU project's shell, and so is available from the
149 master GNU archive site, ftp.gnu.org, and its mirrors. The
150 latest version is also available for FTP from ftp.cwru.edu.
151 The following URLs tell how to get version 3.2:
153 ftp://ftp.gnu.org/pub/gnu/bash/bash-3.2.tar.gz
154 ftp://ftp.cwru.edu/pub/bash/bash-3.2.tar.gz
156 Formatted versions of the documentation are available with the URLs:
158 ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-3.2.tar.gz
159 ftp://ftp.cwru.edu/pub/bash/bash-doc-3.2.tar.gz
161 Any patches for the current version are available with the URL:
163 ftp://ftp.cwru.edu/pub/bash/bash-3.2-patches/
165 A4) On what machines will bash run?
167 Bash has been ported to nearly every version of Unix. All you
168 should have to do to build it on a machine for which a port
169 exists is to type `configure' and then `make'. The build process
170 will attempt to discover the version of Unix you have and tailor
171 itself accordingly, using a script created by GNU autoconf.
173 More information appears in the file `INSTALL' in the distribution.
175 The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
176 explains how to obtain binary versions of bash for most of the major
177 commercial Unix systems.
179 A5) Will bash run on operating systems other than Unix?
181 Configuration specifics for Unix-like systems such as QNX and
182 LynxOS are included in the distribution. Bash-2.05 and later
183 versions should compile and run on Minix 2.0 (patches were
184 contributed), but I don't believe anyone has built bash-2.x on
185 earlier Minix versions yet.
187 Bash has been ported to versions of Windows implementing the Win32
188 programming interface. This includes Windows 95 and Windows NT.
189 The port was done by Cygnus Solutions (now part of Red Hat) as part
190 of their CYGWIN project. For more information about the project, see
191 http://www.cygwin.com/.
193 Cygnus originally ported bash-1.14.7, and that port was part of their
194 early GNU-Win32 (the original name) releases. Cygnus has also done
195 ports of bash-2.05b and bash-3.0 to the CYGWIN environment, and both
196 are available as part of their current release. Bash-3.2 is currently
197 being tested and should be available soon.
199 Bash-2.05b and later versions should require no local Cygnus changes to
200 build and run under CYGWIN.
202 DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
203 of the DJGPP project. For more information on the project, see
205 http://www.delorie.com/djgpp/
207 I have been told that the original DJGPP port was done by Daisuke Aoyama.
209 Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
210 is available for DJGPP V2. The files are available as:
212 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
213 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
214 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
216 Mark began to work with bash-2.05, but I don't know the current status.
218 Bash-3.0 compiles and runs with no modifications under Microsoft's Services
219 for Unix (SFU), once known as Interix. I do not anticipate any problems
220 with building bash-3.1 or bash-3.2.
222 A6) How can I build bash with gcc?
224 Bash configures to use gcc by default if it is available. Read the
225 file INSTALL in the distribution for more information.
227 A7) How can I make bash my login shell?
229 Some machines let you use `chsh' to change your login shell. Other
230 systems use `passwd -s' or `passwd -e'. If one of these works for
231 you, that's all you need. Note that many systems require the full
232 pathname to a shell to appear in /etc/shells before you can make it
233 your login shell. For this, you may need the assistance of your
234 friendly local system administrator.
236 If you cannot do this, you can still use bash as your login shell, but
237 you need to perform some tricks. The basic idea is to add a command
238 to your login shell's startup file to replace your login shell with
241 For example, if your login shell is csh or tcsh, and you have installed
242 bash in /usr/gnu/bin/bash, add the following line to ~/.login:
244 if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
246 (the `--login' tells bash that it is a login shell).
248 It's not a good idea to put this command into ~/.cshrc, because every
249 csh you run without the `-f' option, even ones started to run csh scripts,
250 reads that file. If you must put the command in ~/.cshrc, use something
253 if ( $?prompt ) exec /usr/gnu/bin/bash --login
255 to ensure that bash is exec'd only when the csh is interactive.
257 If your login shell is sh or ksh, you have to do two things.
259 First, create an empty file in your home directory named `.bash_profile'.
260 The existence of this file will prevent the exec'd bash from trying to
261 read ~/.profile, and re-execing itself over and over again. ~/.bash_profile
262 is the first file bash tries to read initialization commands from when
263 it is invoked as a login shell.
265 Next, add a line similar to the above to ~/.profile:
267 [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
268 exec /usr/gnu/bin/bash --login
270 This will cause login shells to replace themselves with bash running as
271 a login shell. Once you have this working, you can copy your initialization
272 code from ~/.profile to ~/.bash_profile.
274 I have received word that the recipe supplied above is insufficient for
275 machines running CDE. CDE has a maze of twisty little startup files, all
278 If you cannot change your login shell in the password file to bash, you
279 will have to (apparently) live with CDE using the shell in the password
280 file to run its startup scripts. If you have changed your shell to bash,
281 there is code in the CDE startup files (on Solaris, at least) that attempts
282 to do the right thing. It is, however, often broken, and may require that
283 you use the $BASH_ENV trick described below.
285 `dtterm' claims to use $SHELL as the default program to start, so if you
286 can change $SHELL in the CDE startup files, you should be able to use bash
287 in your terminal windows.
289 Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
290 to read your login shell's startup files. You may be able to use bash for
291 the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
292 well, but I have not tried this.
294 You can use the above `exec' recipe to start bash when not logging in with
295 CDE by testing the value of the DT variable:
297 if [ -n "$DT" ]; then
298 [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
301 If CDE starts its shells non-interactively during login, the login shell
302 startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
303 To get around this problem, append a line similar to the following to your
306 BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
308 and add the following line to the beginning of ~/.bash_profile:
312 A8) I just changed my login shell to bash, and now I can't FTP into my
315 You must add the full pathname to bash to the file /etc/shells. As
316 noted in the answer to the previous question, many systems require
317 this before you can make bash your login shell.
319 Most versions of ftpd use this file to prohibit `special' users
320 such as `uucp' and `news' from using FTP.
322 A9) What's the `POSIX Shell and Utilities standard'?
324 POSIX is a name originally coined by Richard Stallman for a
325 family of open system standards based on UNIX. There are a
326 number of aspects of UNIX under consideration for
327 standardization, from the basic system services at the system
328 call and C library level to applications and tools to system
329 administration and management. Each area of standardization is
330 assigned to a working group in the 1003 series.
332 The POSIX Shell and Utilities standard was originally developed by
333 IEEE Working Group 1003.2 (POSIX.2). Today it has been merged with
334 the original 1003.1 Working Group and is maintained by the Austin
335 Group (a joint working group of the IEEE, The Open Group and
336 ISO/IEC SC22/WG15). Today the Shell and Utilities are a volume
337 within the set of documents that make up IEEE Std 1003.1-2001, and
338 thus now the former POSIX.2 (from 1992) is now part of the current
339 POSIX.1 standard (POSIX 1003.1-2001).
341 The Shell and Utilities volume concentrates on the command
342 interpreter interface and utility programs commonly executed from
343 the command line or by other programs. The standard is freely
344 available on the web at http://www.UNIX-systems.org/version3/ .
345 Work continues at the Austin Group on maintenance issues; see
346 http://www.opengroup.org/austin/ to join the discussions.
348 Bash is concerned with the aspects of the shell's behavior defined
349 by the POSIX Shell and Utilities volume. The shell command
350 language has of course been standardized, including the basic flow
351 control and program execution constructs, I/O redirection and
352 pipelining, argument handling, variable expansion, and quoting.
354 The `special' builtins, which must be implemented as part of the
355 shell to provide the desired functionality, are specified as
356 being part of the shell; examples of these are `eval' and
357 `export'. Other utilities appear in the sections of POSIX not
358 devoted to the shell which are commonly (and in some cases must
359 be) implemented as builtin commands, such as `read' and `test'.
360 POSIX also specifies aspects of the shell's interactive
361 behavior as part of the UPE, including job control and command
362 line editing. Only vi-style line editing commands have been
363 standardized; emacs editing commands were left out due to
366 The latest version of the POSIX Shell and Utilities standard is
367 available (now updated to the 2004 Edition) as part of the Single
368 UNIX Specification Version 3 at
370 http://www.UNIX-systems.org/version3/
372 A10) What is the bash `posix mode'?
374 Although bash is an implementation of the POSIX shell
375 specification, there are areas where the bash default behavior
376 differs from that spec. The bash `posix mode' changes the bash
377 behavior in these areas so that it obeys the spec more closely.
379 Posix mode is entered by starting bash with the --posix or
380 '-o posix' option or executing `set -o posix' after bash is running.
382 The specific aspects of bash which change when posix mode is
383 active are listed in the file POSIX in the bash distribution.
384 They are also listed in a section in the Bash Reference Manual
385 (from which that file is generated).
387 Section B: The latest version
389 B1) What's new in version 3.2?
391 Bash-3.2 is the second maintenance release of the third major release of
392 bash. It contains the following significant new features (see the manual
393 page for complete descriptions and the CHANGES and NEWS files in the
394 bash-3.2 distribution).
396 o Bash-3.2 now checks shell scripts for NUL characters rather than non-printing
397 characters when deciding whether or not a script is a binary file.
399 o Quoting the string argument to the [[ command's =~ (regexp) operator now
400 forces string matching, as with the other pattern-matching operators.
402 A short feature history dating from Bash-2.0:
404 Bash-3.1 contained the following new features:
406 o Bash-3.1 may now be configured and built in a mode that enforces strict
409 o The `+=' assignment operator, which appends to the value of a string or
410 array variable, has been implemented.
412 o It is now possible to ignore case when matching in contexts other than
413 filename generation using the new `nocasematch' shell option.
415 Bash-3.0 contained the following new features:
417 o Features to support the bash debugger have been implemented, and there
418 is a new `extdebug' option to turn the non-default options on
420 o HISTCONTROL is now a colon-separated list of options and has been
421 extended with a new `erasedups' option that will result in only one
422 copy of a command being kept in the history list
424 o Brace expansion has been extended with a new {x..y} form, producing
425 sequences of digits or characters
427 o Timestamps are now kept with history entries, with an option to save
428 and restore them from the history file; there is a new HISTTIMEFORMAT
429 variable describing how to display the timestamps when listing history
432 o The `[[' command can now perform extended regular expression (egrep-like)
433 matching, with matched subexpressions placed in the BASH_REMATCH array
436 o A new `pipefail' option causes a pipeline to return a failure status if
437 any command in it fails
439 o The `jobs', `kill', and `wait' builtins now accept job control notation
440 in their arguments even if job control is not enabled
442 o The `gettext' package and libintl have been integrated, and the shell
443 messages may be translated into other languages
445 Bash-2.05b introduced the following new features:
447 o support for multibyte characters has been added to both bash and readline
449 o the DEBUG trap is now run *before* simple commands, ((...)) commands,
450 [[...]] conditional commands, and for ((...)) loops
452 o the shell now performs arithmetic in the largest integer size the machine
455 o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
456 and inserts the result into the expanded prompt
458 o there is a new `here-string' redirection operator: <<< word
460 o when displaying variables, function attributes and definitions are shown
461 separately, allowing them to be re-used as input (attempting to re-use
462 the old output would result in syntax errors).
464 o `read' has a new `-u fd' option to read from a specified file descriptor
466 o the bash debugger in examples/bashdb has been modified to work with the
467 new DEBUG trap semantics, the command set has been made more gdb-like,
468 and the changes to $LINENO make debugging functions work better
470 o the expansion of $LINENO inside a shell function is only relative to the
471 function start if the shell is interactive -- if the shell is running a
472 script, $LINENO expands to the line number in the script. This is as
475 Bash-2.05a introduced the following new features:
477 o The `printf' builtin has undergone major work
479 o There is a new read-only `shopt' option: login_shell, which is set by
480 login shells and unset otherwise
482 o New `\A' prompt string escape sequence; expanding to time in 24-hour
485 o New `-A group/-g' option to complete and compgen; goes group name
488 o New [+-]O invocation option to set and unset `shopt' options at startup
490 o ksh-like `ERR' trap
492 o `for' loops now allow empty word lists after the `in' reserved word
494 o new `hard' and `soft' arguments for the `ulimit' builtin
496 o Readline can be configured to place the user at the same point on the line
497 when retrieving commands from the history list
499 o Readline can be configured to skip `hidden' files (filenames with a leading
500 `.' on Unix) when performing completion
502 Bash-2.05 introduced the following new features:
504 o This version has once again reverted to using locales and strcoll(3) when
505 processing pattern matching bracket expressions, as POSIX requires.
506 o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
507 per the new GNU coding standards.
508 o The /dev/tcp and /dev/udp redirections now accept service names as well as
510 o `complete' and `compgen' now take a `-o value' option, which controls some
511 of the aspects of that compspec. Valid values are:
513 default - perform bash default completion if programmable
514 completion produces no matches
515 dirnames - perform directory name completion if programmable
516 completion produces no matches
517 filenames - tell readline that the compspec produces filenames,
518 so it can do things like append slashes to
519 directory names and suppress trailing spaces
520 o A new loadable builtin, realpath, which canonicalizes and expands symlinks
521 in pathname arguments.
522 o When `set' is called without options, it prints function defintions in a
523 way that allows them to be reused as input. This affects `declare' and
524 `declare -p' as well. This only happens when the shell is not in POSIX
525 mode, since POSIX.2 forbids this behavior.
527 Bash-2.04 introduced the following new features:
529 o Programmable word completion with the new `complete' and `compgen' builtins;
530 examples are provided in examples/complete/complete-examples
531 o `history' has a new `-d' option to delete a history entry
532 o `bind' has a new `-x' option to bind key sequences to shell commands
533 o The prompt expansion code has new `\j' and `\l' escape sequences
534 o The `no_empty_cmd_completion' shell option, if enabled, inhibits
535 command completion when TAB is typed on an empty line
536 o `help' has a new `-s' option to print a usage synopsis
537 o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
538 o New ksh93-style arithmetic for command:
539 for ((expr1 ; expr2; expr3 )); do list; done
540 o `read' has new options: `-t', `-n', `-d', `-s'
541 o The redirection code handles several filenames specially: /dev/fd/N,
542 /dev/stdin, /dev/stdout, /dev/stderr
543 o The redirection code now recognizes /dev/tcp/HOST/PORT and
544 /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
545 to the specified port on the specified host
546 o The ${!prefix*} expansion has been implemented
547 o A new FUNCNAME variable, which expands to the name of a currently-executing
549 o The GROUPS variable is no longer readonly
550 o A new shopt `xpg_echo' variable, to control the behavior of echo with
551 respect to backslash-escape sequences at runtime
552 o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
554 The version of Readline released with Bash-2.04, Readline-4.1, had several
555 new features as well:
557 o Parentheses matching is always compiled into readline, and controllable
558 with the new `blink-matching-paren' variable
559 o The history-search-forward and history-search-backward functions now leave
560 point at the end of the line when the search string is empty, like
561 reverse-search-history, and forward-search-history
562 o A new function for applications: rl_on_new_line_with_prompt()
563 o New variables for applications: rl_already_prompted, and rl_gnu_readline_p
566 Bash-2.03 had very few new features, in keeping with the convention
567 that odd-numbered releases provide mainly bug fixes. A number of new
568 features were added to Readline, mostly at the request of the Cygnus
571 A new shopt option, `restricted_shell', so that startup files can test
572 whether or not the shell was started in restricted mode
573 Filename generation is now performed on the words between ( and ) in
574 compound array assignments (this is really a bug fix)
575 OLDPWD is now auto-exported, as POSIX.2 requires
576 ENV and BASH_ENV are read-only variables in a restricted shell
577 Bash may now be linked against an already-installed Readline library,
578 as long as the Readline library is version 4 or newer
579 All shells begun with the `--login' option will source the login shell
580 startup files, even if the shell is not interactive
582 There were lots of changes to the version of the Readline library released
583 along with Bash-2.03. For a complete list of the changes, read the file
584 CHANGES in the Bash-2.03 distribution.
586 Bash-2.02 contained the following new features:
588 a new version of malloc (based on the old GNU malloc code in previous
589 bash versions) that is more page-oriented, more conservative
590 with memory usage, does not `orphan' large blocks when they
591 are freed, is usable on 64-bit machines, and has allocation
592 checking turned on unconditionally
593 POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
594 POSIX.2-style globbing equivalence classes
595 POSIX.2-style globbing collating symbols
596 the ksh [[...]] extended conditional command
597 the ksh egrep-style extended pattern matching operators
598 a new `printf' builtin
599 the ksh-like $(<filename) command substitution, which is equivalent to
601 new tilde prefixes that expand to directories from the directory stack
602 new `**' arithmetic operator to do exponentiation
603 case-insensitive globbing (filename expansion)
604 menu completion a la tcsh
605 `magic-space' history expansion function like tcsh
606 the readline inputrc `language' has a new file inclusion directive ($include)
608 Bash-2.01 contained only a few new features:
610 new `GROUPS' builtin array variable containing the user's group list
611 new bindable readline commands: history-and-alias-expand-line and
614 Bash-2.0 contained extensive changes and new features from bash-1.14.7.
617 new `time' reserved word to time pipelines, shell builtins, and
619 one-dimensional arrays with a new compound assignment statement,
620 appropriate expansion constructs and modifications to some
621 of the builtins (read, declare, etc.) to use them
622 new quoting syntaxes for ANSI-C string expansion and locale-specific
624 new expansions to do substring extraction, pattern replacement, and
625 indirect variable expansion
626 new builtins: `disown' and `shopt'
627 new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
628 MACHTYPE, BASH_VERSINFO
629 special handling of many unused or redundant variables removed
630 (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
631 dynamic loading of new builtin commands; many loadable examples provided
632 new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
633 history and aliases available in shell scripts
634 new readline variables: enable-keypad, mark-directories, input-meta,
635 visible-stats, disable-completion, comment-begin
636 new readline commands to manipulate the mark and operate on the region
637 new readline emacs mode commands and bindings for ksh-88 compatibility
638 updated and extended builtins
640 expanded (and now documented) restricted shell mode
642 implementation stuff:
643 autoconf-based configuration
644 nearly all of the bugs reported since version 1.14 have been fixed
645 most builtins converted to use builtin `getopt' for consistency
646 most builtins use -p option to display output in a reusable form
648 grammar tighter and smaller (66 reduce-reduce conflicts gone)
649 lots of code now smaller and faster
650 test suite greatly expanded
652 B2) Are there any user-visible incompatibilities between bash-3.2 and
655 There are a few incompatibilities between version 2.05b and version 3.2.
656 They are detailed in the file COMPAT in the bash distribution. That file
657 is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
658 if if you find something that's not mentioned there.
660 Section C: Differences from other Unix shells
662 C1) How does bash differ from sh, the Bourne shell?
664 This is a non-comprehensive list of features that differentiate bash
665 from the SVR4.2 shell. The bash manual page explains these more
668 Things bash has that sh does not:
669 long invocation options
670 [+-]O invocation option
672 `!' reserved word to invert pipeline return value
673 `time' reserved word to time pipelines and shell builtins
674 the `function' reserved word
675 the `select' compound command and reserved word
676 arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
677 new $'...' and $"..." quoting
678 the $(...) form of command substitution
679 the $(<filename) form of command substitution, equivalent to
681 the ${#param} parameter value length operator
682 the ${!param} indirect parameter expansion operator
683 the ${!param*} prefix expansion operator
684 the ${param:offset[:length]} parameter substring operator
685 the ${param/pat[/string]} parameter pattern substitution operator
686 expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
687 expansion of positional parameters beyond $9 with ${num}
688 variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
689 TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
690 LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
691 ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
692 HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
693 PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
694 SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
698 variable arrays with new compound assignment syntax
699 redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
700 prompt string special char translation and variable expansion
701 auto-export of variables in initial environment
702 command search finds functions before builtins
703 bash return builtin will exit a file sourced with `.'
704 builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
705 export -n/-f/-p/name=value, pwd -L/-P,
706 read -e/-p/-a/-t/-n/-d/-s/-u,
707 readonly -a/-f/name=value, trap -l, set +o,
708 set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
709 unset -f/-v, ulimit -i/-m/-p/-q/-u/-x,
710 type -a/-p/-t/-f/-P, suspend -f, kill -n,
711 test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
712 bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
713 bash restricted shell mode is more extensive
714 bash allows functions and variables with the same name
717 arithmetic expansion with $((...)) and `let' builtin
718 the `[[...]]' extended conditional command
720 aliases and alias/unalias builtins
721 local variables in functions and `local' builtin
722 readline and command-line editing with programmable completion
723 command history and history/fc builtins
724 csh-like history expansion
725 other new bash builtins: bind, command, compgen, complete, builtin,
726 declare/typeset, dirs, enable, fc, help,
727 history, logout, popd, pushd, disown, shopt,
730 filename generation when using output redirection (command >a*)
731 POSIX.2-style globbing character classes
732 POSIX.2-style globbing equivalence classes
733 POSIX.2-style globbing collating symbols
734 egrep-like extended pattern matching operators
735 case-insensitive pattern matching and globbing
736 variable assignments preceding commands affect only that command,
737 even for builtins and functions
738 posix mode and strict posix conformance
739 redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
740 /dev/tcp/host/port, /dev/udp/host/port
741 debugger support, including `caller' builtin and new variables
743 the `+=' assignment operator
746 Things sh has that bash does not:
747 uses variable SHACCT to do shell accounting
748 includes `stop' builtin (bash can use alias stop='kill -s STOP')
750 turns on job control if called as `jsh'
751 $TIMEOUT (like bash $TMOUT)
752 `^' is a synonym for `|'
753 new SVR4.2 sh builtins: mldmode, priv
755 Implementation differences:
756 redirection to/from compound commands causes sh to create a subshell
757 bash does not allow unbalanced quotes; sh silently inserts them at EOF
758 bash does not mess with signal 11
759 sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
760 bash splits only the results of expansions on IFS, using POSIX.2
761 field splitting rules; sh splits all words on IFS
762 sh does not allow MAILCHECK to be unset (?)
763 sh does not allow traps on SIGALRM or SIGCHLD
764 bash allows multiple option arguments when invoked (e.g. -x -v);
765 sh allows only a single option argument (`sh -x -v' attempts
766 to open a file named `-v', and, on SunOS 4.1.4, dumps core.
767 On Solaris 2.4 and earlier versions, sh goes into an infinite
769 sh exits a script if any builtin fails; bash exits only if one of
770 the POSIX.2 `special' builtins fails
772 C2) How does bash differ from the Korn shell, version ksh88?
774 Things bash has or uses that ksh88 does not:
775 long invocation options
776 [-+]O invocation option
779 arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
780 arithmetic in largest machine-supported size (intmax_t)
781 posix mode and posix conformance
783 tilde expansion for assignment statements that look like $PATH
784 process substitution with named pipes if /dev/fd is not available
785 the ${!param} indirect parameter expansion operator
786 the ${!param*} prefix expansion operator
787 the ${param:offset[:length]} parameter substring operator
788 the ${param/pat[/string]} parameter pattern substitution operator
789 variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
790 TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
791 HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
792 IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
793 PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
794 GROUPS, FUNCNAME, histchars, auto_resume
795 prompt expansion with backslash escapes and command substitution
796 redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
797 more extensive and extensible editing and programmable completion
798 builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
799 exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
800 jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
801 read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
802 set -o braceexpand/-o histexpand/-o interactive-comments/
803 -o notify/-o physical/-o posix/-o hashall/-o onecmd/
804 -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
805 typeset -a/-F/-p, ulimit -i/-q/-u/-x, umask -S, alias -p,
806 shopt, disown, printf, complete, compgen
807 `!' csh-style history expansion
808 POSIX.2-style globbing character classes
809 POSIX.2-style globbing equivalence classes
810 POSIX.2-style globbing collating symbols
811 egrep-like extended pattern matching operators
812 case-insensitive pattern matching and globbing
813 `**' arithmetic operator to do exponentiation
814 redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
815 arrays of unlimited size
816 TMOUT is default timeout for `read' and `select'
817 debugger support, including the `caller' builtin
819 Timestamps in history entries
820 {x..y} brace expansion
821 The `+=' assignment operator
823 Things ksh88 has or uses that bash does not:
824 tracked aliases (alias -t)
825 variables: ERRNO, FPATH, EDITOR, VISUAL
826 co-processes (|&, >&p, <&p)
827 weirdly-scoped functions
828 typeset +f to list all function names without definitions
829 text of command history kept in a file, not memory
830 builtins: alias -x, cd old new, newgrp, print,
831 read -p/-s/var?prompt, set -A/-o gmacs/
832 -o bgnice/-o markdirs/-o trackall/-o viraw/-s,
833 typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
834 using environment to pass attributes of exported variables
835 arithmetic evaluation done on arguments to some builtins
836 reads .profile from $PWD when invoked as login shell
838 Implementation differences:
839 ksh runs last command of a pipeline in parent shell context
840 bash has brace expansion by default (ksh88 compile-time option)
841 bash has fixed startup file for all interactive shells; ksh reads $ENV
842 bash has exported functions
843 bash command search finds functions before builtins
844 bash waits for all commands in pipeline to exit before returning status
845 emacs-mode editing has some slightly different key bindings
847 C3) Which new features in ksh-93 are not in bash, and which are?
849 New things in ksh-93 not in bash-3.2:
851 floating point arithmetic and variables
852 math library functions
853 ${!name[sub]} name of subscript for associative array
854 `.' is allowed in variable names to create a hierarchical namespace
855 more extensive compound assignment syntax
857 `sleep' and `getconf' builtins (bash has loadable versions)
858 typeset -n and `nameref' variables
860 variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
861 .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
862 backreferences in pattern matching (\N)
863 `&' operator in pattern lists for matching
864 print -f (bash uses printf)
865 `fc' has been renamed to `hist'
866 `.' can execute shell functions
867 exit statuses between 0 and 255
868 FPATH and PATH mixing
871 printf %H, %P, %T, %Z modifiers, output base for %d
872 lexical scoping for local variables in `ksh' functions
873 no scoping for local variables in `POSIX' functions
875 New things in ksh-93 present in bash-3.2:
876 [n]<&word- and [n]>&word- redirections (combination dup and close)
877 for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
878 ?:, ++, --, `expr1 , expr2' arithmetic operators
879 expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
881 compound array assignment
882 the `!' reserved word
883 loadable builtins -- but ksh uses `builtin' while bash uses `enable'
884 `command', `builtin', `disown' builtins
885 new $'...' and $"..." quoting
886 FIGNORE (but bash uses GLOBIGNORE), HISTCMD
888 changes to kill builtin
889 read -A (bash uses read -a)
893 `.' restores the positional parameters when it completes
897 command and arithmetic substitution performed on PS1, PS4, and ENV
898 command name completion
899 ENV processed only for interactive shells
901 The `+=' assignment operator
903 Section D: Why does bash do some things differently than other Unix shells?
905 D1) Why does bash run a different version of `command' than
906 `which command' says it will?
908 On many systems, `which' is actually a csh script that assumes
909 you're running csh. In tcsh, `which' and its cousin `where'
910 are builtins. On other Unix systems, `which' is a perl script
911 that uses the PATH environment variable.
913 The csh script version reads the csh startup files from your
914 home directory and uses those to determine which `command' will
915 be invoked. Since bash doesn't use any of those startup files,
916 there's a good chance that your bash environment differs from
917 your csh environment. The bash `type' builtin does everything
918 `which' does, and will report correct results for the running
919 shell. If you're really wedded to the name `which', try adding
920 the following function definition to your .bashrc:
927 If you're moving from tcsh and would like to bring `where' along
928 as well, use this function:
935 D2) Why doesn't bash treat brace expansions exactly like csh?
937 The only difference between bash and csh brace expansion is that
938 bash requires a brace expression to contain at least one unquoted
939 comma if it is to be expanded. Any brace-surrounded word not
940 containing an unquoted comma is left unchanged by the brace
941 expansion code. This affords the greatest degree of sh
944 Bash, ksh, zsh, and pd-ksh all implement brace expansion this way.
946 D3) Why doesn't bash have csh variable modifiers?
948 Posix has specified a more powerful, albeit somewhat more cryptic,
949 mechanism cribbed from ksh, and bash implements it.
952 Remove smallest suffix pattern. The WORD is expanded to produce
953 a pattern. It then expands to the value of PARAMETER, with the
954 smallest portion of the suffix matched by the pattern deleted.
962 Remove largest suffix pattern. The WORD is expanded to produce
963 a pattern. It then expands to the value of PARAMETER, with the
964 largest portion of the suffix matched by the pattern deleted.
971 Remove smallest prefix pattern. The WORD is expanded to produce
972 a pattern. It then expands to the value of PARAMETER, with the
973 smallest portion of the prefix matched by the pattern deleted.
980 Remove largest prefix pattern. The WORD is expanded to produce
981 a pattern. It then expands to the value of PARAMETER, with the
982 largest portion of the prefix matched by the pattern deleted.
1001 D4) How can I make my csh aliases work when I convert to bash?
1003 Bash uses a different syntax to support aliases than csh does.
1004 The details can be found in the documentation. We have provided
1005 a shell script which does most of the work of conversion for you;
1006 this script can be found in ./examples/misc/aliasconv.sh. Here is
1009 Start csh in the normal way for you. (e.g., `csh')
1011 Pipe the output of `alias' through `aliasconv.sh', saving the
1012 results into `bash_aliases':
1014 alias | bash aliasconv.sh >bash_aliases
1016 Edit `bash_aliases', carefully reading through any created
1017 functions. You will need to change the names of some csh specific
1018 variables to the bash equivalents. The script converts $cwd to
1019 $PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
1020 to $PS1. You may also have to add quotes to avoid unwanted
1023 For example, the csh alias:
1025 alias cd 'cd \!*; echo $cwd'
1027 is converted to the bash function:
1029 cd () { command cd "$@"; echo $PWD ; }
1031 The only thing that needs to be done is to quote $PWD:
1033 cd () { command cd "$@"; echo "$PWD" ; }
1035 Merge the edited file into your ~/.bashrc.
1037 There is an additional, more ambitious, script in
1038 examples/misc/cshtobash that attempts to convert your entire csh
1039 environment to its bash equivalent. This script can be run as
1040 simply `cshtobash' to convert your normal interactive
1041 environment, or as `cshtobash ~/.login' to convert your login
1044 D5) How can I pipe standard output and standard error from one command to
1045 another, like csh does with `|&'?
1048 command 2>&1 | command2
1050 The key is to remember that piping is performed before redirection, so
1051 file descriptor 1 points to the pipe when it is duplicated onto file
1054 D6) Now that I've converted from ksh to bash, are there equivalents to
1055 ksh features like autoloaded functions and the `whence' command?
1057 There are features in ksh-88 and ksh-93 that do not have direct bash
1058 equivalents. Most, however, can be emulated with very little trouble.
1060 ksh-88 feature Bash equivalent
1061 -------------- ---------------
1062 compiled-in aliases set up aliases in .bashrc; some ksh aliases are
1063 bash builtins (hash, history, type)
1064 coprocesses named pipe pairs (one for read, one for write)
1065 typeset +f declare -F
1066 cd, print, whence function substitutes in examples/functions/kshenv
1067 autoloaded functions examples/functions/autoload is the same as typeset -fu
1068 read var?prompt read -p prompt var
1070 ksh-93 feature Bash equivalent
1071 -------------- ---------------
1072 sleep, getconf Bash has loadable versions in examples/loadables
1073 ${.sh.version} $BASH_VERSION
1078 Section E: How can I get bash to do certain things, and why does bash do
1079 things the way it does?
1081 E1) Why is the bash builtin `test' slightly different from /bin/test?
1083 The specific example used here is [ ! x -o x ], which is false.
1085 Bash's builtin `test' implements the Posix.2 spec, which can be
1086 summarized as follows (the wording is due to David Korn):
1088 Here is the set of rules for processing test arguments.
1091 1 Arg: True iff argument is not null.
1092 2 Args: If first arg is !, True iff second argument is null.
1093 If first argument is unary, then true if unary test is true
1095 3 Args: If second argument is a binary operator, do binary test of $1 $3
1096 If first argument is !, negate two argument test of $2 $3
1097 If first argument is `(' and third argument is `)', do the
1098 one-argument test of the second argument.
1100 4 Args: If first argument is !, negate three argument test of $2 $3 $4.
1101 Otherwise unspecified
1102 5 or more Args: unspecified. (Historical shells would use their
1105 The operators -a and -o are considered binary operators for the purpose
1108 As you can see, the test becomes (not (x or x)), which is false.
1110 E2) Why does bash sometimes say `Broken pipe'?
1112 If a sequence of commands appears in a pipeline, and one of the
1113 reading commands finishes before the writer has finished, the
1114 writer receives a SIGPIPE signal. Many other shells special-case
1115 SIGPIPE as an exit status in the pipeline and do not report it.
1120 `head' can finish before `ps' writes all of its output, and ps
1121 will try to write on a pipe without a reader. In that case, bash
1122 will print `Broken pipe' to stderr when ps is killed by a
1125 As of bash-3.1, bash does not report SIGPIPE errors by default. You
1126 can build a version of bash that will report such errors.
1128 E3) When I have terminal escape sequences in my prompt, why does bash
1129 wrap lines at the wrong column?
1131 Readline, the line editing library that bash uses, does not know
1132 that the terminal escape sequences do not take up space on the
1133 screen. The redisplay code assumes, unless told otherwise, that
1134 each character in the prompt is a `printable' character that
1135 takes up one character position on the screen.
1137 You can use the bash prompt expansion facility (see the PROMPTING
1138 section in the manual page) to tell readline that sequences of
1139 characters in the prompt strings take up no screen space.
1141 Use the \[ escape to begin a sequence of non-printing characters,
1142 and the \] escape to signal the end of such a sequence.
1144 E4) If I pipe the output of a command into `read variable', why doesn't
1145 the output show up in $variable when the read command finishes?
1147 This has to do with the parent-child relationship between Unix
1148 processes. It affects all commands run in pipelines, not just
1149 simple calls to `read'. For example, piping a command's output
1150 into a `while' loop that repeatedly calls `read' will result in
1153 Each element of a pipeline, even a builtin or shell function,
1154 runs in a separate process, a child of the shell running the
1155 pipeline. A subprocess cannot affect its parent's environment.
1156 When the `read' command sets the variable to the input, that
1157 variable is set only in the subshell, not the parent shell. When
1158 the subshell exits, the value of the variable is lost.
1160 Many pipelines that end with `read variable' can be converted
1161 into command substitutions, which will capture the output of
1162 a specified command. The output can then be assigned to a
1165 grep ^gnu /usr/lib/news/active | wc -l | read ngroup
1167 can be converted into
1169 ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
1171 This does not, unfortunately, work to split the text among
1172 multiple variables, as read does when given multiple variable
1173 arguments. If you need to do this, you can either use the
1174 command substitution above to read the output into a variable
1175 and chop up the variable using the bash pattern removal
1176 expansion operators or use some variant of the following
1179 Say /usr/local/bin/ipaddr is the following shell script:
1182 host `hostname` | awk '/address/ {print $NF}'
1186 /usr/local/bin/ipaddr | read A B C D
1188 to break the local machine's IP address into separate octets, use
1192 set -- $(/usr/local/bin/ipaddr)
1194 A="$1" B="$2" C="$3" D="$4"
1196 Beware, however, that this will change the shell's positional
1197 parameters. If you need them, you should save them before doing
1200 This is the general approach -- in most cases you will not need to
1201 set $IFS to a different value.
1203 Some other user-supplied alternatives include:
1205 read A B C D << HERE
1206 $(IFS=.; echo $(/usr/local/bin/ipaddr))
1209 and, where process substitution is available,
1211 read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
1213 E5) I have a bunch of shell scripts that use backslash-escaped characters
1214 in arguments to `echo'. Bash doesn't interpret these characters. Why
1215 not, and how can I make it understand them?
1217 This is the behavior of echo on most Unix System V machines.
1219 The bash builtin `echo' is modeled after the 9th Edition
1220 Research Unix version of `echo'. It does not interpret
1221 backslash-escaped characters in its argument strings by default;
1222 it requires the use of the -e option to enable the
1223 interpretation. The System V echo provides no way to disable the
1224 special characters; the bash echo has a -E option to disable
1227 There is a configuration option that will make bash behave like
1228 the System V echo and interpret things like `\t' by default. Run
1229 configure with the --enable-xpg-echo-default option to turn this
1230 on. Be aware that this will cause some of the tests run when you
1231 type `make tests' to fail.
1233 There is a shell option, `xpg_echo', settable with `shopt', that will
1234 change the behavior of echo at runtime. Enabling this option turns
1235 on expansion of backslash-escape sequences.
1237 E6) Why doesn't a while or for loop get suspended when I type ^Z?
1239 This is a consequence of how job control works on Unix. The only
1240 thing that can be suspended is the process group. This is a single
1241 command or pipeline of commands that the shell forks and executes.
1243 When you run a while or for loop, the only thing that the shell forks
1244 and executes are any commands in the while loop test and commands in
1245 the loop bodies. These, therefore, are the only things that can be
1246 suspended when you type ^Z.
1248 If you want to be able to stop the entire loop, you need to put it
1249 within parentheses, which will force the loop into a subshell that
1250 may be stopped (and subsequently restarted) as a single unit.
1252 E7) What about empty for loops in Makefiles?
1254 It's fairly common to see constructs like this in automatically-generated
1262 for d in ${SUBDIRS}; do \
1263 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1266 When SUBDIRS is empty, this results in a command like this being passed to
1270 ( cd $d && ${MAKE} ${MFLAGS} clean )
1273 In versions of bash before bash-2.05a, this was a syntax error. If the
1274 reserved word `in' was present, a word must follow it before the semicolon
1275 or newline. The language in the manual page referring to the list of words
1276 being empty referred to the list after it is expanded. These versions of
1277 bash required that there be at least one word following the `in' when the
1278 construct was parsed.
1280 The idiomatic Makefile solution is something like:
1285 subdirs=$SUBDIRS ; for d in $$subdirs; do \
1286 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1289 The latest updated POSIX standard has changed this: the word list
1290 is no longer required. Bash versions 2.05a and later accept the
1293 E8) Why does the arithmetic evaluation code complain about `08'?
1295 The bash arithmetic evaluation code (used for `let', $(()), (()), and in
1296 other places), interprets a leading `0' in numeric constants as denoting
1297 an octal number, and a leading `0x' as denoting hexadecimal. This is
1298 in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
1299 arithmetic constants should be handled as signed long integers as defined
1300 by the ANSI/ISO C standard.
1302 The POSIX.2 interpretation committee has confirmed this:
1304 http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
1306 E9) Why does the pattern matching expression [A-Z]* match files beginning
1307 with every letter except `z'?
1309 Bash-2.03, Bash-2.05 and later versions honor the current locale setting
1310 when processing ranges within pattern matching bracket expressions ([A-Z]).
1311 This is what POSIX.2 and SUSv3/XPG6 specify.
1313 The behavior of the matcher in bash-2.05 and later versions depends on the
1314 current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will
1315 result in the traditional behavior ([A-Z] matches all uppercase ASCII
1316 characters). Many other locales, including the en_US locale (the default
1317 on many US versions of Linux) collate the upper and lower case letters like
1322 which means that [A-Z] matches every letter except `z'. Others collate like
1326 which means that [A-Z] matches every letter except `a'.
1328 The portable way to specify upper case letters is [:upper:] instead of
1329 A-Z; lower case may be specified as [:lower:] instead of a-z.
1331 Look at the manual pages for setlocale(3), strcoll(3), and, if it is
1332 present, locale(1). If you have locale(1), you can use it to find
1333 your current locale information even if you do not have any of the
1340 into /etc/profile and inspect any shell scripts run from cron for
1341 constructs like [A-Z]. This will prevent things like
1345 from removing every file in the current directory except those beginning
1346 with `z' and still allow individual users to change the collation order.
1347 Users may put the above command into their own profiles as well, of course.
1349 E10) Why does `cd //' leave $PWD as `//'?
1351 POSIX.2, in its description of `cd', says that *three* or more leading
1352 slashes may be replaced with a single slash when canonicalizing the
1353 current working directory.
1355 This is, I presume, for historical compatibility. Certain versions of
1356 Unix, and early network file systems, used paths of the form
1357 //hostname/path to access `path' on server `hostname'.
1359 E11) If I resize my xterm while another program is running, why doesn't bash
1362 This is another issue that deals with job control.
1364 The kernel maintains a notion of a current terminal process group. Members
1365 of this process group (processes whose process group ID is equal to the
1366 current terminal process group ID) receive terminal-generated signals like
1367 SIGWINCH. (For more details, see the JOB CONTROL section of the bash
1370 If a terminal is resized, the kernel sends SIGWINCH to each member of
1371 the terminal's current process group (the `foreground' process group).
1373 When bash is running with job control enabled, each pipeline (which may be
1374 a single command) is run in its own process group, different from bash's
1375 process group. This foreground process group receives the SIGWINCH; bash
1376 does not. Bash has no way of knowing that the terminal has been resized.
1378 There is a `checkwinsize' option, settable with the `shopt' builtin, that
1379 will cause bash to check the window size and adjust its idea of the
1380 terminal's dimensions each time a process stops or exits and returns control
1381 of the terminal to bash. Enable it with `shopt -s checkwinsize'.
1383 E12) Why don't negative offsets in substring expansion work like I expect?
1385 When substring expansion of the form ${param:offset[:length} is used,
1386 an `offset' that evaluates to a number less than zero counts back from
1387 the end of the expanded value of $param.
1389 When a negative `offset' begins with a minus sign, however, unexpected things
1390 can happen. Consider
1395 intending to print the last four characters of $a. The problem is that
1396 ${param:-word} already has a well-defined meaning: expand to word if the
1397 expanded value of param is unset or null, and $param otherwise.
1399 To use negative offsets that begin with a minus sign, separate the
1400 minus sign and the colon with a space.
1402 E13) Why does filename completion misbehave if a colon appears in the filename?
1404 Filename completion (and word completion in general) may appear to behave
1405 improperly if there is a colon in the word to be completed.
1407 The colon is special to readline's word completion code: it is one of the
1408 characters that breaks words for the completer. Readline uses these characters
1409 in sort of the same way that bash uses $IFS: they break or separate the words
1410 the completion code hands to the application-specific or default word
1411 completion functions. The original intent was to make it easy to edit
1412 colon-separated lists (such as $PATH in bash) in various applications using
1415 This is complicated by the fact that some versions of the popular
1416 `bash-completion' programmable completion package have problems with the
1417 default completion behavior in the presence of colons.
1419 The current set of completion word break characters is available in bash as
1420 the value of the COMP_WORDBREAKS variable. Removing `:' from that value is
1421 enough to make the colon not special to completion:
1423 COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
1425 You can also quote the colon with a backslash to achieve the same result
1428 Section F: Things to watch out for on certain Unix versions
1430 F1) Why can't I use command line editing in my `cmdtool'?
1432 The problem is `cmdtool' and bash fighting over the input. When
1433 scrolling is enabled in a cmdtool window, cmdtool puts the tty in
1434 `raw mode' to permit command-line editing using the mouse for
1435 applications that cannot do it themselves. As a result, bash and
1436 cmdtool each try to read keyboard input immediately, with neither
1437 getting enough of it to be useful.
1439 This mode also causes cmdtool to not implement many of the
1440 terminal functions and control sequences appearing in the
1441 `sun-cmd' termcap entry. For a more complete explanation, see
1442 that file examples/suncmd.termcap in the bash distribution.
1444 `xterm' is a better choice, and gets along with bash much more
1447 If you must use cmdtool, you can use the termcap description in
1448 examples/suncmd.termcap. Set the TERMCAP variable to the terminal
1449 description contained in that file, i.e.
1451 TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
1453 Then export TERMCAP and start a new cmdtool window from that shell.
1454 The bash command-line editing should behave better in the new
1455 cmdtool. If this works, you can put the assignment to TERMCAP
1456 in your bashrc file.
1458 F2) I built bash on Solaris 2. Why do globbing expansions and filename
1459 completion chop off the first few characters of each filename?
1461 This is the consequence of building bash on SunOS 5 and linking
1462 with the libraries in /usr/ucblib, but using the definitions
1463 and structures from files in /usr/include.
1465 The actual conflict is between the dirent structure in
1466 /usr/include/dirent.h and the struct returned by the version of
1467 `readdir' in libucb.a (a 4.3-BSD style `struct direct').
1469 Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
1470 when configuring and building bash. This will ensure that you
1471 use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
1472 link with libc before libucb.
1474 If you have installed the Sun C compiler, you may also need to
1475 put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
1478 F3) Why does bash dump core after I interrupt username completion or
1479 `~user' tilde expansion on a machine running NIS?
1481 This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
1482 client library, which is part of libc.
1484 The YP library code keeps static state -- a pointer into the data
1485 returned from the server. When YP initializes itself (setpwent),
1486 it looks at this pointer and calls free on it if it's non-null.
1489 If one of the YP functions is interrupted during getpwent (the
1490 exact function is interpretwithsave()), and returns NULL, the
1491 pointer is freed without being reset to NULL, and the function
1492 returns. The next time getpwent is called, it sees that this
1493 pointer is non-null, calls free, and the bash free() blows up
1494 because it's being asked to free freed memory.
1496 The traditional Unix mallocs allow memory to be freed multiple
1497 times; that's probably why this has never been fixed. You can
1498 run configure with the `--without-gnu-malloc' option to use
1499 the C library malloc and avoid the problem.
1501 F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
1503 The `@' character is the default `line kill' character in most
1504 versions of System V, including SVR4.2. You can change this
1505 character to whatever you want using `stty'. For example, to
1506 change the line kill character to control-u, type
1510 where the `^' and `U' can be two separate characters.
1512 F5) Why does bash report syntax errors when my C News scripts use a
1513 redirection before a subshell command?
1515 The actual command in question is something like
1519 According to the grammar given in the POSIX.2 standard, this construct
1520 is, in fact, a syntax error. Redirections may only precede `simple
1521 commands'. A subshell construct such as the above is one of the shell's
1522 `compound commands'. A redirection may only follow a compound command.
1524 This affects the mechanical transformation of commands that use `cat'
1525 to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
1526 comp.unix.shell). While most commands of the form
1530 can be converted to `< file command', shell control structures such as
1531 loops and subshells require `command < file'.
1533 The file CWRU/sh-redir-hack in the bash distribution is an
1534 (unofficial) patch to parse.y that will modify the grammar to
1535 support this construct. It will not apply with `patch'; you must
1536 modify parse.y by hand. Note that if you apply this, you must
1537 recompile with -DREDIRECTION_HACK. This introduces a large
1538 number of reduce/reduce conflicts into the shell grammar.
1540 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
1542 The short answer is that Red Hat screwed up.
1544 The long answer is that they shipped an /etc/inputrc that only works
1545 for emacs mode editing, and then screwed all the vi users by setting
1546 INPUTRC to /etc/inputrc in /etc/profile.
1548 The short fix is to do one of the following: remove or rename
1549 /etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
1550 but make sure you export it if you do), remove the assignment to
1551 INPUTRC from /etc/profile, add
1555 to the beginning of /etc/inputrc, or bracket the key bindings in
1556 /etc/inputrc with these lines
1562 F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
1565 HP/UX's support for long double is imperfect at best.
1567 GCC will support it without problems, but the HP C library functions
1568 like strtold(3) and printf(3) don't actually work with long doubles.
1569 HP implemented a `long_double' type as a 4-element array of 32-bit
1570 ints, and that is what the library functions use. The ANSI C
1571 `long double' type is a 128-bit floating point scalar.
1573 The easiest fix, until HP fixes things up, is to edit the generated
1574 config.h and #undef the HAVE_LONG_DOUBLE line. After doing that,
1575 the compilation should complete successfully.
1577 Section G: How can I get bash to do certain common things?
1579 G1) How can I get bash to read and display eight-bit characters?
1581 This is a process requiring several steps.
1583 First, you must ensure that the `physical' data path is a full eight
1584 bits. For xterms, for example, the `vt100' resources `eightBitInput'
1585 and `eightBitOutput' should be set to `true'.
1587 Once you have set up an eight-bit path, you must tell the kernel and
1588 tty driver to leave the eighth bit of characters alone when processing
1589 keyboard input. Use `stty' to do this:
1591 stty cs8 -istrip -parenb
1593 For old BSD-style systems, you can use
1601 Finally, you need to tell readline that you will be inputting and
1602 displaying eight-bit characters. You use readline variables to do
1603 this. These variables can be set in your .inputrc or using the bash
1604 `bind' builtin. Here's an example using `bind':
1606 bash$ bind 'set convert-meta off'
1607 bash$ bind 'set meta-flag on'
1608 bash$ bind 'set output-meta on'
1610 The `set' commands between the single quotes may also be placed
1613 The script examples/scripts.noah/meta.bash encapsulates the bind
1614 commands in a shell function.
1616 G2) How do I write a function `x' to replace builtin command `x', but
1617 still invoke the command from within the function?
1619 This is why the `command' and `builtin' builtins exist. The
1620 `command' builtin executes the command supplied as its first
1621 argument, skipping over any function defined with that name. The
1622 `builtin' builtin executes the builtin command given as its first
1625 For example, to write a function to replace `cd' that writes the
1626 hostname and current directory to an xterm title bar, use
1627 something like the following:
1631 builtin cd "$@" && xtitle "$HOST: $PWD"
1634 This could also be written using `command' instead of `builtin';
1635 the version above is marginally more efficient.
1637 G3) How can I find the value of a shell variable whose name is the value
1638 of another shell variable?
1640 Versions of Bash newer than Bash-2.0 support this directly. You can use
1644 For example, the following sequence of commands will echo `z':
1650 For sh compatibility, use the `eval' builtin. The important
1651 thing to remember is that `eval' expands the arguments you give
1652 it again, so you need to quote the parts of the arguments that
1653 you want `eval' to act on.
1655 For example, this expression prints the value of the last positional
1658 eval echo \"\$\{$#\}\"
1660 The expansion of the quoted portions of this expression will be
1661 deferred until `eval' runs, while the `$#' will be expanded
1662 before `eval' is executed. In versions of bash later than bash-2.0,
1666 does the same thing.
1668 This is not the same thing as ksh93 `nameref' variables, though the syntax
1669 is similar. I may add namerefs in a future bash version.
1671 G4) How can I make the bash `time' reserved word print timing output that
1672 looks like the output from my system's /usr/bin/time?
1674 The bash command timing code looks for a variable `TIMEFORMAT' and
1675 uses its value as a format string to decide how to display the
1678 The value of TIMEFORMAT is a string with `%' escapes expanded in a
1679 fashion similar in spirit to printf(3). The manual page explains
1680 the meanings of the escape sequences in the format string.
1682 If TIMEFORMAT is not set, bash acts as if the following assignment had
1685 TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
1687 The POSIX.2 default time format (used by `time -p command') is
1689 TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
1691 The BSD /usr/bin/time format can be emulated with:
1693 TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
1695 The System V /usr/bin/time format can be emulated with:
1697 TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
1699 The ksh format can be emulated with:
1701 TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
1703 G5) How do I get the current directory into my prompt?
1705 Bash provides a number of backslash-escape sequences which are expanded
1706 when the prompt string (PS1 or PS2) is displayed. The full list is in
1709 The \w expansion gives the full pathname of the current directory, with
1710 a tilde (`~') substituted for the current value of $HOME. The \W
1711 expansion gives the basename of the current directory. To put the full
1712 pathname of the current directory into the path without any tilde
1713 subsitution, use $PWD. Here are some examples:
1715 PS1='\w$ ' # current directory with tilde
1716 PS1='\W$ ' # basename of current directory
1717 PS1='$PWD$ ' # full pathname of current directory
1719 The single quotes are important in the final example to prevent $PWD from
1720 being expanded when the assignment to PS1 is performed.
1722 G6) How can I rename "*.foo" to "*.bar"?
1724 Use the pattern removal functionality described in D3. The following `for'
1725 loop will do the trick:
1731 G7) How can I translate a filename from uppercase to lowercase?
1733 The script examples/functions/lowercase, originally written by John DuBois,
1734 will do the trick. The converse is left as an exercise.
1736 G8) How can I write a filename expansion (globbing) pattern that will match
1737 all files in the current directory except "." and ".."?
1739 You must have set the `extglob' shell option using `shopt -s extglob' to use
1744 A solution that works without extended globbing is given in the Unix Shell
1745 FAQ, posted periodically to comp.unix.shell.
1747 Section H: Where do I go from here?
1749 H1) How do I report bugs in bash, and where should I look for fixes and
1752 Use the `bashbug' script to report bugs. It is built and
1753 installed at the same time as bash. It provides a standard
1754 template for reporting a problem and automatically includes
1755 information about your configuration and build environment.
1757 `bashbug' sends its reports to bug-bash@gnu.org, which
1758 is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug.
1760 Bug fixes, answers to questions, and announcements of new releases
1761 are all posted to gnu.bash.bug. Discussions concerning bash features
1762 and problems also take place there.
1764 To reach the bash maintainers directly, send mail to
1765 bash-maintainers@gnu.org.
1767 H2) What kind of bash documentation is there?
1769 First, look in the doc directory in the bash distribution. It should
1770 contain at least the following files:
1772 bash.1 an extensive, thorough Unix-style manual page
1773 builtins.1 a manual page covering just bash builtin commands
1774 bashref.texi a reference manual in GNU tex`info format
1775 bashref.info an info version of the reference manual
1777 article.ms text of an article written for The Linux Journal
1778 readline.3 a man page describing readline
1780 Postscript, HTML, and ASCII files created from the above source are
1781 available in the documentation distribution.
1783 There is additional documentation available for anonymous FTP from host
1784 ftp.cwru.edu in the `pub/bash' directory.
1786 Cameron Newham and Bill Rosenblatt have written a book on bash, published
1787 by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn
1788 Shell book. The title is ``Learning the Bash Shell'', and the ISBN number
1789 of the third edition, published in March, 2005, is 0-596-00965-8. Look for
1790 it in fine bookstores near you. This edition of the book has been updated
1793 The GNU Bash Reference Manual has been published as a printed book by
1794 Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers
1795 bash-2.0 and is available from most online bookstores (see
1796 http://www.network-theory.co.uk/bash/manual/ for details). The publisher
1797 will donate $1 to the Free Software Foundation for each copy sold.
1799 Arnold Robbins and Nelson Beebe have written ``Classic Shell Scripting'',
1800 published by O'Reilly. The first edition, with ISBN number 0-596-00595-4,
1801 was published in May, 2005.
1803 Chris F. A. Johnson, a frequent contributor to comp.unix.shell and
1804 gnu.bash.bug, has written ``Shell Scripting Recipes: A Problem-Solution
1805 Approach,'' a new book on shell scripting, concentrating on features of
1806 the POSIX standard helpful to shell script writers. The first edition from
1807 Apress, with ISBN number 1-59059-471-1, was published in May, 2005.
1809 H3) What's coming in future versions?
1811 These are features I hope to include in a future version of bash.
1813 Rocky Bernstein's bash debugger (support is included with bash-3.0)
1815 co-processes, but with a new-style syntax that looks like function declaration
1817 H4) What's on the bash `wish list' for future versions?
1819 These are features that may or may not appear in a future version of bash.
1821 breaking some of the shell functionality into embeddable libraries
1822 a module system like zsh's, using dynamic loading like builtins
1823 a bash programmer's guide with a chapter on creating loadable builtins
1824 a better loadable interface to perl with access to the shell builtins and
1825 variables (contributions gratefully accepted)
1826 ksh93-like `nameref' variables
1827 ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
1828 associated disipline functions
1829 Some of the new ksh93 pattern matching operators, like backreferencing
1831 H5) When will the next release appear?
1833 The next version will appear sometime in 2007. Never make predictions.
1835 This document is Copyright 1995-2006 by Chester Ramey.
1837 Permission is hereby granted, without written agreement and
1838 without license or royalty fees, to use, copy, and distribute
1839 this document for any purpose, provided that the above copyright
1840 notice appears in all copies of this document and that the
1841 contents of this document remain unaltered.