1 This is the Bash FAQ, version 3.27, for Bash version 3.0.
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.0?
40 B2) Are there any user-visible incompatibilities between bash-3.0 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?
82 Section F: Things to watch out for on certain Unix versions
84 F1) Why can't I use command line editing in my `cmdtool'?
85 F2) I built bash on Solaris 2. Why do globbing expansions and filename
86 completion chop off the first few characters of each filename?
87 F3) Why does bash dump core after I interrupt username completion or
88 `~user' tilde expansion on a machine running NIS?
89 F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
90 F5) Why does bash report syntax errors when my C News scripts use a
91 redirection before a subshell command?
92 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
93 F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
96 Section G: How can I get bash to do certain common things?
98 G1) How can I get bash to read and display eight-bit characters?
99 G2) How do I write a function `x' to replace builtin command `x', but
100 still invoke the command from within the function?
101 G3) How can I find the value of a shell variable whose name is the value
102 of another shell variable?
103 G4) How can I make the bash `time' reserved word print timing output that
104 looks like the output from my system's /usr/bin/time?
105 G5) How do I get the current directory into my prompt?
106 G6) How can I rename "*.foo" to "*.bar"?
107 G7) How can I translate a filename from uppercase to lowercase?
108 G8) How can I write a filename expansion (globbing) pattern that will match
109 all files in the current directory except "." and ".."?
111 Section H: Where do I go from here?
113 H1) How do I report bugs in bash, and where should I look for fixes and
115 H2) What kind of bash documentation is there?
116 H3) What's coming in future versions?
117 H4) What's on the bash `wish list'?
118 H5) When will the next release appear?
121 Section A: The Basics
125 Bash is a Unix command interpreter (shell). It is an implementation of
126 the Posix 1003.2 shell standard, and resembles the Korn and System V
129 Bash contains a number of enhancements over those shells, both
130 for interactive use and shell programming. Features geared
131 toward interactive use include command line editing, command
132 history, job control, aliases, and prompt expansion. Programming
133 features include additional variable expansions, shell
134 arithmetic, and a number of variables and options to control
137 Bash was originally written by Brian Fox of the Free Software
138 Foundation. The current developer and maintainer is Chet Ramey
139 of Case Western Reserve University.
141 A2) What's the latest version?
143 The latest version is 3.0, first made available on 27 July, 2004.
145 A3) Where can I get it?
147 Bash is the GNU project's shell, and so is available from the
148 master GNU archive site, ftp.gnu.org, and its mirrors. The
149 latest version is also available for FTP from ftp.cwru.edu.
150 The following URLs tell how to get version 3.0:
152 ftp://ftp.gnu.org/pub/gnu/bash/bash-3.0.tar.gz
153 ftp://ftp.cwru.edu/pub/bash/bash-3.0.tar.gz
155 Formatted versions of the documentation are available with the URLs:
157 ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-3.0.tar.gz
158 ftp://ftp.cwru.edu/pub/bash/bash-doc-3.0.tar.gz
160 A4) On what machines will bash run?
162 Bash has been ported to nearly every version of Unix. All you
163 should have to do to build it on a machine for which a port
164 exists is to type `configure' and then `make'. The build process
165 will attempt to discover the version of Unix you have and tailor
166 itself accordingly, using a script created by GNU autoconf.
168 More information appears in the file `INSTALL' in the distribution.
170 The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
171 explains how to obtain binary versions of bash for most of the major
172 commercial Unix systems.
174 A5) Will bash run on operating systems other than Unix?
176 Configuration specifics for Unix-like systems such as QNX and
177 LynxOS are included in the distribution. Bash-2.05 and later
178 versions should compile and run on Minix 2.0 (patches were
179 contributed), but I don't believe anyone has built bash-2.x on
180 earlier Minix versions yet.
182 Bash has been ported to versions of Windows implementing the Win32
183 programming interface. This includes Windows 95 and Windows NT.
184 The port was done by Cygnus Solutions as part of their CYGWIN
185 project. For more information about the project, look at the URLs
187 http://www.cygwin.com/
188 http://sourceware.cygnus.com/cygwin
190 Cygnus originally ported bash-1.14.7, and that port was part of their
191 early GNU-Win32 (the original name) releases. Cygnus has also done a
192 port of bash-2.05 to the CYGWIN environment, and it is available as
193 part of their current release.
195 Bash-2.05b and later versions should require no local Cygnus changes to
196 build and run under CYGWIN.
198 DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
199 of the DJGPP project. For more information on the project, see
201 http://www.delorie.com/djgpp/
203 I have been told that the original DJGPP port was done by Daisuke Aoyama.
205 Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
206 is available for DJGPP V2. The files are available as:
208 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
209 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
210 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
212 Mark began to work with bash-2.05, but I don't know the current status.
214 Bash-3.0 compiles and runs with no modifications under Microsoft's Services
215 for Unix (SFU), once known as Interix.
217 A6) How can I build bash with gcc?
219 Bash configures to use gcc by default if it is available. Read the
220 file INSTALL in the distribution for more information.
222 A7) How can I make bash my login shell?
224 Some machines let you use `chsh' to change your login shell. Other
225 systems use `passwd -s' or `passwd -e'. If one of these works for
226 you, that's all you need. Note that many systems require the full
227 pathname to a shell to appear in /etc/shells before you can make it
228 your login shell. For this, you may need the assistance of your
229 friendly local system administrator.
231 If you cannot do this, you can still use bash as your login shell, but
232 you need to perform some tricks. The basic idea is to add a command
233 to your login shell's startup file to replace your login shell with
236 For example, if your login shell is csh or tcsh, and you have installed
237 bash in /usr/gnu/bin/bash, add the following line to ~/.login:
239 if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
241 (the `--login' tells bash that it is a login shell).
243 It's not a good idea to put this command into ~/.cshrc, because every
244 csh you run without the `-f' option, even ones started to run csh scripts,
245 reads that file. If you must put the command in ~/.cshrc, use something
248 if ( $?prompt ) exec /usr/gnu/bin/bash --login
250 to ensure that bash is exec'd only when the csh is interactive.
252 If your login shell is sh or ksh, you have to do two things.
254 First, create an empty file in your home directory named `.bash_profile'.
255 The existence of this file will prevent the exec'd bash from trying to
256 read ~/.profile, and re-execing itself over and over again. ~/.bash_profile
257 is the first file bash tries to read initialization commands from when
258 it is invoked as a login shell.
260 Next, add a line similar to the above to ~/.profile:
262 [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
263 exec /usr/gnu/bin/bash --login
265 This will cause login shells to replace themselves with bash running as
266 a login shell. Once you have this working, you can copy your initialization
267 code from ~/.profile to ~/.bash_profile.
269 I have received word that the recipe supplied above is insufficient for
270 machines running CDE. CDE has a maze of twisty little startup files, all
273 If you cannot change your login shell in the password file to bash, you
274 will have to (apparently) live with CDE using the shell in the password
275 file to run its startup scripts. If you have changed your shell to bash,
276 there is code in the CDE startup files (on Solaris, at least) that attempts
277 to do the right thing. It is, however, often broken, and may require that
278 you use the $BASH_ENV trick described below.
280 `dtterm' claims to use $SHELL as the default program to start, so if you
281 can change $SHELL in the CDE startup files, you should be able to use bash
282 in your terminal windows.
284 Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
285 to read your login shell's startup files. You may be able to use bash for
286 the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
287 well, but I have not tried this.
289 You can use the above `exec' recipe to start bash when not logging in with
290 CDE by testing the value of the DT variable:
292 if [ -n "$DT" ]; then
293 [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
296 If CDE starts its shells non-interactively during login, the login shell
297 startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
298 To get around this problem, append a line similar to the following to your
301 BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
303 and add the following line to the beginning of ~/.bash_profile:
307 A8) I just changed my login shell to bash, and now I can't FTP into my
310 You must add the full pathname to bash to the file /etc/shells. As
311 noted in the answer to the previous question, many systems require
312 this before you can make bash your login shell.
314 Most versions of ftpd use this file to prohibit `special' users
315 such as `uucp' and `news' from using FTP.
317 A9) What's the `POSIX Shell and Utilities standard'?
319 POSIX is a name originally coined by Richard Stallman for a
320 family of open system standards based on UNIX. There are a
321 number of aspects of UNIX under consideration for
322 standardization, from the basic system services at the system
323 call and C library level to applications and tools to system
324 administration and management. Each area of standardization is
325 assigned to a working group in the 1003 series.
327 The POSIX Shell and Utilities standard was originally developed by
328 IEEE Working Group 1003.2 (POSIX.2). Today it has been merged with
329 the original 1003.1 Working Group and is maintained by the Austin
330 Group (a joint working group of the IEEE, The Open Group and
331 ISO/IEC SC22/WG15). Today the Shell and Utilities are a volume
332 within the set of documents that make up IEEE Std 1003.1-2001, and
333 thus now the former POSIX.2 (from 1992) is now part of the current
334 POSIX.1 standard (POSIX 1003.1-2001).
336 The Shell and Utilities volume concentrates on the command
337 interpreter interface and utility programs commonly executed from
338 the command line or by other programs. The standard is freely
339 available on the web at http://www.UNIX-systems.org/version3/ .
340 Work continues at the Austin Group on maintenance issues; see
341 http://www.opengroup.org/austin/ to join the discussions.
343 Bash is concerned with the aspects of the shell's behavior defined
344 by the POSIX Shell and Utilities volume. The shell command
345 language has of course been standardized, including the basic flow
346 control and program execution constructs, I/O redirection and
347 pipelining, argument handling, variable expansion, and quoting.
349 The `special' builtins, which must be implemented as part of the
350 shell to provide the desired functionality, are specified as
351 being part of the shell; examples of these are `eval' and
352 `export'. Other utilities appear in the sections of POSIX not
353 devoted to the shell which are commonly (and in some cases must
354 be) implemented as builtin commands, such as `read' and `test'.
355 POSIX also specifies aspects of the shell's interactive
356 behavior as part of the UPE, including job control and command
357 line editing. Only vi-style line editing commands have been
358 standardized; emacs editing commands were left out due to
361 The latest version of the POSIX Shell and Utilities standard is
362 available (now updated to the 2004 Edition) as part of the Single
363 UNIX Specification Version 3 at
365 http://www.UNIX-systems.org/version3/
367 A10) What is the bash `posix mode'?
369 Although bash is an implementation of the POSIX shell
370 specification, there are areas where the bash default behavior
371 differs from that spec. The bash `posix mode' changes the bash
372 behavior in these areas so that it obeys the spec more closely.
374 Posix mode is entered by starting bash with the --posix or
375 '-o posix' option or executing `set -o posix' after bash is running.
377 The specific aspects of bash which change when posix mode is
378 active are listed in the file POSIX in the bash distribution.
379 They are also listed in a section in the Bash Reference Manual
380 (from which that file is generated).
382 Section B: The latest version
384 B1) What's new in version 3.0?
386 Bash-3.0 is the third major release of bash. The features introduced
387 in the intermediate releases following bash-2.05 have been completed.
388 Support for the bash debugger (a separate project) has been integrated.
390 Bash-3.0 contains the following new features (see the manual page for
391 complete descriptions and the CHANGES and NEWS files in the bash-3.0
394 o Features to support the bash debugger have been implemented, and there
395 is a new `extdebug' option to turn the non-default options on
397 o HISTCONTROL is now a colon-separated list of options and has been
398 extended with a new `erasedups' option that will result in only one
399 copy of a command being kept in the history list
401 o Brace expansion has been extended with a new {x..y} form, producing
402 sequences of digits or characters
404 o Timestamps are now kept with history entries, with an option to save
405 and restore them from the history file; there is a new HISTTIMEFORMAT
406 variable describing how to display the timestamps when listing history
409 o The `[[' command can now perform extended regular expression (egrep-like)
410 matching, with matched subexpressions placed in the BASH_REMATCH array
413 o A new `pipefail' option causes a pipeline to return a failure status if
414 any command in it fails
416 o The `jobs', `kill', and `wait' builtins now accept job control notation
417 in their arguments even if job control is not enabled
419 o The `gettext' package and libintl have been integrated, and the shell
420 messages may be translated into other languages
422 A short feature history dating from Bash-2.0:
424 Bash-2.05b introduced the following new features:
426 o support for multibyte characters has been added to both bash and readline
428 o the DEBUG trap is now run *before* simple commands, ((...)) commands,
429 [[...]] conditional commands, and for ((...)) loops
431 o the shell now performs arithmetic in the largest integer size the machine
434 o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
435 and inserts the result into the expanded prompt
437 o there is a new `here-string' redirection operator: <<< word
439 o when displaying variables, function attributes and definitions are shown
440 separately, allowing them to be re-used as input (attempting to re-use
441 the old output would result in syntax errors).
443 o `read' has a new `-u fd' option to read from a specified file descriptor
445 o the bash debugger in examples/bashdb has been modified to work with the
446 new DEBUG trap semantics, the command set has been made more gdb-like,
447 and the changes to $LINENO make debugging functions work better
449 o the expansion of $LINENO inside a shell function is only relative to the
450 function start if the shell is interactive -- if the shell is running a
451 script, $LINENO expands to the line number in the script. This is as
454 Bash-2.05a introduced the following new features:
456 o The `printf' builtin has undergone major work
458 o There is a new read-only `shopt' option: login_shell, which is set by
459 login shells and unset otherwise
461 o New `\A' prompt string escape sequence; expanding to time in 24-hour
464 o New `-A group/-g' option to complete and compgen; goes group name
467 o New [+-]O invocation option to set and unset `shopt' options at startup
469 o ksh-like `ERR' trap
471 o `for' loops now allow empty word lists after the `in' reserved word
473 o new `hard' and `soft' arguments for the `ulimit' builtin
475 o Readline can be configured to place the user at the same point on the line
476 when retrieving commands from the history list
478 o Readline can be configured to skip `hidden' files (filenames with a leading
479 `.' on Unix) when performing completion
481 Bash-2.05 introduced the following new features:
483 o This version has once again reverted to using locales and strcoll(3) when
484 processing pattern matching bracket expressions, as POSIX requires.
485 o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
486 per the new GNU coding standards.
487 o The /dev/tcp and /dev/udp redirections now accept service names as well as
489 o `complete' and `compgen' now take a `-o value' option, which controls some
490 of the aspects of that compspec. Valid values are:
492 default - perform bash default completion if programmable
493 completion produces no matches
494 dirnames - perform directory name completion if programmable
495 completion produces no matches
496 filenames - tell readline that the compspec produces filenames,
497 so it can do things like append slashes to
498 directory names and suppress trailing spaces
499 o A new loadable builtin, realpath, which canonicalizes and expands symlinks
500 in pathname arguments.
501 o When `set' is called without options, it prints function defintions in a
502 way that allows them to be reused as input. This affects `declare' and
503 `declare -p' as well. This only happens when the shell is not in POSIX
504 mode, since POSIX.2 forbids this behavior.
506 Bash-2.04 introduced the following new features:
508 o Programmable word completion with the new `complete' and `compgen' builtins;
509 examples are provided in examples/complete/complete-examples
510 o `history' has a new `-d' option to delete a history entry
511 o `bind' has a new `-x' option to bind key sequences to shell commands
512 o The prompt expansion code has new `\j' and `\l' escape sequences
513 o The `no_empty_cmd_completion' shell option, if enabled, inhibits
514 command completion when TAB is typed on an empty line
515 o `help' has a new `-s' option to print a usage synopsis
516 o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
517 o New ksh93-style arithmetic for command:
518 for ((expr1 ; expr2; expr3 )); do list; done
519 o `read' has new options: `-t', `-n', `-d', `-s'
520 o The redirection code handles several filenames specially: /dev/fd/N,
521 /dev/stdin, /dev/stdout, /dev/stderr
522 o The redirection code now recognizes /dev/tcp/HOST/PORT and
523 /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
524 to the specified port on the specified host
525 o The ${!prefix*} expansion has been implemented
526 o A new FUNCNAME variable, which expands to the name of a currently-executing
528 o The GROUPS variable is no longer readonly
529 o A new shopt `xpg_echo' variable, to control the behavior of echo with
530 respect to backslash-escape sequences at runtime
531 o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
533 The version of Readline released with Bash-2.04, Readline-4.1, had several
534 new features as well:
536 o Parentheses matching is always compiled into readline, and controllable
537 with the new `blink-matching-paren' variable
538 o The history-search-forward and history-search-backward functions now leave
539 point at the end of the line when the search string is empty, like
540 reverse-search-history, and forward-search-history
541 o A new function for applications: rl_on_new_line_with_prompt()
542 o New variables for applications: rl_already_prompted, and rl_gnu_readline_p
545 Bash-2.03 had very few new features, in keeping with the convention
546 that odd-numbered releases provide mainly bug fixes. A number of new
547 features were added to Readline, mostly at the request of the Cygnus
550 A new shopt option, `restricted_shell', so that startup files can test
551 whether or not the shell was started in restricted mode
552 Filename generation is now performed on the words between ( and ) in
553 compound array assignments (this is really a bug fix)
554 OLDPWD is now auto-exported, as POSIX.2 requires
555 ENV and BASH_ENV are read-only variables in a restricted shell
556 Bash may now be linked against an already-installed Readline library,
557 as long as the Readline library is version 4 or newer
558 All shells begun with the `--login' option will source the login shell
559 startup files, even if the shell is not interactive
561 There were lots of changes to the version of the Readline library released
562 along with Bash-2.03. For a complete list of the changes, read the file
563 CHANGES in the Bash-2.03 distribution.
565 Bash-2.02 contained the following new features:
567 a new version of malloc (based on the old GNU malloc code in previous
568 bash versions) that is more page-oriented, more conservative
569 with memory usage, does not `orphan' large blocks when they
570 are freed, is usable on 64-bit machines, and has allocation
571 checking turned on unconditionally
572 POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
573 POSIX.2-style globbing equivalence classes
574 POSIX.2-style globbing collating symbols
575 the ksh [[...]] extended conditional command
576 the ksh egrep-style extended pattern matching operators
577 a new `printf' builtin
578 the ksh-like $(<filename) command substitution, which is equivalent to
580 new tilde prefixes that expand to directories from the directory stack
581 new `**' arithmetic operator to do exponentiation
582 case-insensitive globbing (filename expansion)
583 menu completion a la tcsh
584 `magic-space' history expansion function like tcsh
585 the readline inputrc `language' has a new file inclusion directive ($include)
587 Bash-2.01 contained only a few new features:
589 new `GROUPS' builtin array variable containing the user's group list
590 new bindable readline commands: history-and-alias-expand-line and
593 Bash-2.0 contained extensive changes and new features from bash-1.14.7.
596 new `time' reserved word to time pipelines, shell builtins, and
598 one-dimensional arrays with a new compound assignment statement,
599 appropriate expansion constructs and modifications to some
600 of the builtins (read, declare, etc.) to use them
601 new quoting syntaxes for ANSI-C string expansion and locale-specific
603 new expansions to do substring extraction, pattern replacement, and
604 indirect variable expansion
605 new builtins: `disown' and `shopt'
606 new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
607 MACHTYPE, BASH_VERSINFO
608 special handling of many unused or redundant variables removed
609 (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
610 dynamic loading of new builtin commands; many loadable examples provided
611 new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
612 history and aliases available in shell scripts
613 new readline variables: enable-keypad, mark-directories, input-meta,
614 visible-stats, disable-completion, comment-begin
615 new readline commands to manipulate the mark and operate on the region
616 new readline emacs mode commands and bindings for ksh-88 compatibility
617 updated and extended builtins
619 expanded (and now documented) restricted shell mode
621 implementation stuff:
622 autoconf-based configuration
623 nearly all of the bugs reported since version 1.14 have been fixed
624 most builtins converted to use builtin `getopt' for consistency
625 most builtins use -p option to display output in a reusable form
627 grammar tighter and smaller (66 reduce-reduce conflicts gone)
628 lots of code now smaller and faster
629 test suite greatly expanded
631 B2) Are there any user-visible incompatibilities between bash-3.0 and
634 There are a few incompatibilities between version 1.14.7 and version 3.0.
635 They are detailed in the file COMPAT in the bash distribution. That file
636 is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
637 if if you find something that's not mentioned there.
639 Section C: Differences from other Unix shells
641 C1) How does bash differ from sh, the Bourne shell?
643 This is a non-comprehensive list of features that differentiate bash
644 from the SVR4.2 shell. The bash manual page explains these more
647 Things bash has that sh does not:
648 long invocation options
649 [+-]O invocation option
651 `!' reserved word to invert pipeline return value
652 `time' reserved word to time pipelines and shell builtins
653 the `function' reserved word
654 the `select' compound command and reserved word
655 arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
656 new $'...' and $"..." quoting
657 the $(...) form of command substitution
658 the $(<filename) form of command substitution, equivalent to
660 the ${#param} parameter value length operator
661 the ${!param} indirect parameter expansion operator
662 the ${!param*} prefix expansion operator
663 the ${param:offset[:length]} parameter substring operator
664 the ${param/pat[/string]} parameter pattern substitution operator
665 expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
666 expansion of positional parameters beyond $9 with ${num}
667 variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
668 TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
669 LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
670 ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
671 HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
672 PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
673 SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
677 variable arrays with new compound assignment syntax
678 redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
679 prompt string special char translation and variable expansion
680 auto-export of variables in initial environment
681 command search finds functions before builtins
682 bash return builtin will exit a file sourced with `.'
683 builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
684 export -n/-f/-p/name=value, pwd -L/-P,
685 read -e/-p/-a/-t/-n/-d/-s/-u,
686 readonly -a/-f/name=value, trap -l, set +o,
687 set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
688 unset -f/-v, ulimit -m/-p/-u,
689 type -a/-p/-t/-f/-P, suspend -f, kill -n,
690 test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
691 bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
692 bash restricted shell mode is more extensive
693 bash allows functions and variables with the same name
696 arithmetic expansion with $((...)) and `let' builtin
697 the `[[...]]' extended conditional command
699 aliases and alias/unalias builtins
700 local variables in functions and `local' builtin
701 readline and command-line editing with programmable completion
702 command history and history/fc builtins
703 csh-like history expansion
704 other new bash builtins: bind, command, compgen, complete, builtin,
705 declare/typeset, dirs, enable, fc, help,
706 history, logout, popd, pushd, disown, shopt,
709 filename generation when using output redirection (command >a*)
710 POSIX.2-style globbing character classes
711 POSIX.2-style globbing equivalence classes
712 POSIX.2-style globbing collating symbols
713 egrep-like extended pattern matching operators
714 case-insensitive pattern matching and globbing
715 variable assignments preceding commands affect only that command,
716 even for builtins and functions
718 redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
719 /dev/tcp/host/port, /dev/udp/host/port
720 debugger support, including `caller' builtin and new variables
724 Things sh has that bash does not:
725 uses variable SHACCT to do shell accounting
726 includes `stop' builtin (bash can use alias stop='kill -s STOP')
728 turns on job control if called as `jsh'
729 $TIMEOUT (like bash $TMOUT)
730 `^' is a synonym for `|'
731 new SVR4.2 sh builtins: mldmode, priv
733 Implementation differences:
734 redirection to/from compound commands causes sh to create a subshell
735 bash does not allow unbalanced quotes; sh silently inserts them at EOF
736 bash does not mess with signal 11
737 sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
738 bash splits only the results of expansions on IFS, using POSIX.2
739 field splitting rules; sh splits all words on IFS
740 sh does not allow MAILCHECK to be unset (?)
741 sh does not allow traps on SIGALRM or SIGCHLD
742 bash allows multiple option arguments when invoked (e.g. -x -v);
743 sh allows only a single option argument (`sh -x -v' attempts
744 to open a file named `-v', and, on SunOS 4.1.4, dumps core.
745 On Solaris 2.4 and earlier versions, sh goes into an infinite
747 sh exits a script if any builtin fails; bash exits only if one of
748 the POSIX.2 `special' builtins fails
750 C2) How does bash differ from the Korn shell, version ksh88?
752 Things bash has or uses that ksh88 does not:
753 long invocation options
754 [-+]O invocation option
757 arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
758 arithmetic in largest machine-supported size (intmax_t)
759 posix mode and posix conformance
761 tilde expansion for assignment statements that look like $PATH
762 process substitution with named pipes if /dev/fd is not available
763 the ${!param} indirect parameter expansion operator
764 the ${!param*} prefix expansion operator
765 the ${param:offset[:length]} parameter substring operator
766 the ${param/pat[/string]} parameter pattern substitution operator
767 variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
768 TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
769 HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
770 IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
771 PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
772 GROUPS, FUNCNAME, histchars, auto_resume
773 prompt expansion with backslash escapes and command substitution
774 redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
775 more extensive and extensible editing and programmable completion
776 builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
777 exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
778 jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
779 read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
780 set -o braceexpand/-o histexpand/-o interactive-comments/
781 -o notify/-o physical/-o posix/-o hashall/-o onecmd/
782 -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
783 typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,
784 disown, printf, complete, compgen
785 `!' csh-style history expansion
786 POSIX.2-style globbing character classes
787 POSIX.2-style globbing equivalence classes
788 POSIX.2-style globbing collating symbols
789 egrep-like extended pattern matching operators
790 case-insensitive pattern matching and globbing
791 `**' arithmetic operator to do exponentiation
792 redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
793 arrays of unlimited size
794 TMOUT is default timeout for `read' and `select'
795 debugger support, including the `caller' builtin
797 Timestamps in history entries
798 {x..y} brace expansion
800 Things ksh88 has or uses that bash does not:
801 tracked aliases (alias -t)
802 variables: ERRNO, FPATH, EDITOR, VISUAL
803 co-processes (|&, >&p, <&p)
804 weirdly-scoped functions
805 typeset +f to list all function names without definitions
806 text of command history kept in a file, not memory
807 builtins: alias -x, cd old new, newgrp, print,
808 read -p/-s/var?prompt, set -A/-o gmacs/
809 -o bgnice/-o markdirs/-o trackall/-o viraw/-s,
810 typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
811 using environment to pass attributes of exported variables
812 arithmetic evaluation done on arguments to some builtins
813 reads .profile from $PWD when invoked as login shell
815 Implementation differences:
816 ksh runs last command of a pipeline in parent shell context
817 bash has brace expansion by default (ksh88 compile-time option)
818 bash has fixed startup file for all interactive shells; ksh reads $ENV
819 bash has exported functions
820 bash command search finds functions before builtins
821 bash waits for all commands in pipeline to exit before returning status
822 emacs-mode editing has some slightly different key bindings
824 C3) Which new features in ksh-93 are not in bash, and which are?
826 New things in ksh-93 not in bash-3.0:
828 floating point arithmetic and variables
829 math library functions
830 ${!name[sub]} name of subscript for associative array
831 `.' is allowed in variable names to create a hierarchical namespace
832 more extensive compound assignment syntax
834 `sleep' and `getconf' builtins (bash has loadable versions)
835 typeset -n and `nameref' variables
837 variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
838 .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
839 backreferences in pattern matching (\N)
840 `&' operator in pattern lists for matching
841 print -f (bash uses printf)
842 `fc' has been renamed to `hist'
843 `.' can execute shell functions
844 exit statuses between 0 and 255
845 `+=' variable assignment operator
846 FPATH and PATH mixing
849 printf %H, %P, %T, %Z modifiers, output base for %d
850 lexical scoping for local variables in `ksh' functions
851 no scoping for local variables in `POSIX' functions
853 New things in ksh-93 present in bash-3.0:
854 [n]<&word- and [n]>&word- redirections (combination dup and close)
855 for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
856 ?:, ++, --, `expr1 , expr2' arithmetic operators
857 expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
859 compound array assignment
860 the `!' reserved word
861 loadable builtins -- but ksh uses `builtin' while bash uses `enable'
862 `command', `builtin', `disown' builtins
863 new $'...' and $"..." quoting
864 FIGNORE (but bash uses GLOBIGNORE), HISTCMD
866 changes to kill builtin
867 read -A (bash uses read -a)
871 `.' restores the positional parameters when it completes
875 command and arithmetic substitution performed on PS1, PS4, and ENV
876 command name completion
877 ENV processed only for interactive shells
880 Section D: Why does bash do some things differently than other Unix shells?
882 D1) Why does bash run a different version of `command' than
883 `which command' says it will?
885 On many systems, `which' is actually a csh script that assumes
886 you're running csh. In tcsh, `which' and its cousin `where'
887 are builtins. On other Unix systems, `which' is a perl script
888 that uses the PATH environment variable.
890 The csh script version reads the csh startup files from your
891 home directory and uses those to determine which `command' will
892 be invoked. Since bash doesn't use any of those startup files,
893 there's a good chance that your bash environment differs from
894 your csh environment. The bash `type' builtin does everything
895 `which' does, and will report correct results for the running
896 shell. If you're really wedded to the name `which', try adding
897 the following function definition to your .bashrc:
904 If you're moving from tcsh and would like to bring `where' along
905 as well, use this function:
912 D2) Why doesn't bash treat brace expansions exactly like csh?
914 The only difference between bash and csh brace expansion is that
915 bash requires a brace expression to contain at least one unquoted
916 comma if it is to be expanded. Any brace-surrounded word not
917 containing an unquoted comma is left unchanged by the brace
918 expansion code. This affords the greatest degree of sh
921 Bash, ksh, zsh, and pd-ksh all implement brace expansion this way.
923 D3) Why doesn't bash have csh variable modifiers?
925 Posix has specified a more powerful, albeit somewhat more cryptic,
926 mechanism cribbed from ksh, and bash implements it.
929 Remove smallest suffix pattern. The WORD is expanded to produce
930 a pattern. It then expands to the value of PARAMETER, with the
931 smallest portion of the suffix matched by the pattern deleted.
939 Remove largest suffix pattern. The WORD is expanded to produce
940 a pattern. It then expands to the value of PARAMETER, with the
941 largest portion of the suffix matched by the pattern deleted.
948 Remove smallest prefix pattern. The WORD is expanded to produce
949 a pattern. It then expands to the value of PARAMETER, with the
950 smallest portion of the prefix matched by the pattern deleted.
957 Remove largest prefix pattern. The WORD is expanded to produce
958 a pattern. It then expands to the value of PARAMETER, with the
959 largest portion of the prefix matched by the pattern deleted.
978 D4) How can I make my csh aliases work when I convert to bash?
980 Bash uses a different syntax to support aliases than csh does.
981 The details can be found in the documentation. We have provided
982 a shell script which does most of the work of conversion for you;
983 this script can be found in ./examples/misc/aliasconv.sh. Here is
986 Start csh in the normal way for you. (e.g., `csh')
988 Pipe the output of `alias' through `aliasconv.sh', saving the
989 results into `bash_aliases':
991 alias | bash aliasconv.sh >bash_aliases
993 Edit `bash_aliases', carefully reading through any created
994 functions. You will need to change the names of some csh specific
995 variables to the bash equivalents. The script converts $cwd to
996 $PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
997 to $PS1. You may also have to add quotes to avoid unwanted
1000 For example, the csh alias:
1002 alias cd 'cd \!*; echo $cwd'
1004 is converted to the bash function:
1006 cd () { command cd "$@"; echo $PWD ; }
1008 The only thing that needs to be done is to quote $PWD:
1010 cd () { command cd "$@"; echo "$PWD" ; }
1012 Merge the edited file into your ~/.bashrc.
1014 There is an additional, more ambitious, script in
1015 examples/misc/cshtobash that attempts to convert your entire csh
1016 environment to its bash equivalent. This script can be run as
1017 simply `cshtobash' to convert your normal interactive
1018 environment, or as `cshtobash ~/.login' to convert your login
1021 D5) How can I pipe standard output and standard error from one command to
1022 another, like csh does with `|&'?
1025 command 2>&1 | command2
1027 The key is to remember that piping is performed before redirection, so
1028 file descriptor 1 points to the pipe when it is duplicated onto file
1031 D6) Now that I've converted from ksh to bash, are there equivalents to
1032 ksh features like autoloaded functions and the `whence' command?
1034 There are features in ksh-88 and ksh-93 that do not have direct bash
1035 equivalents. Most, however, can be emulated with very little trouble.
1037 ksh-88 feature Bash equivalent
1038 -------------- ---------------
1039 compiled-in aliases set up aliases in .bashrc; some ksh aliases are
1040 bash builtins (hash, history, type)
1041 coprocesses named pipe pairs (one for read, one for write)
1042 typeset +f declare -F
1043 cd, print, whence function substitutes in examples/functions/kshenv
1044 autoloaded functions examples/functions/autoload is the same as typeset -fu
1045 read var?prompt read -p prompt var
1047 ksh-93 feature Bash equivalent
1048 -------------- ---------------
1049 sleep, getconf Bash has loadable versions in examples/loadables
1050 ${.sh.version} $BASH_VERSION
1055 Section E: How can I get bash to do certain things, and why does bash do
1056 things the way it does?
1058 E1) Why is the bash builtin `test' slightly different from /bin/test?
1060 The specific example used here is [ ! x -o x ], which is false.
1062 Bash's builtin `test' implements the Posix.2 spec, which can be
1063 summarized as follows (the wording is due to David Korn):
1065 Here is the set of rules for processing test arguments.
1068 1 Arg: True iff argument is not null.
1069 2 Args: If first arg is !, True iff second argument is null.
1070 If first argument is unary, then true if unary test is true
1072 3 Args: If second argument is a binary operator, do binary test of $1 $3
1073 If first argument is !, negate two argument test of $2 $3
1074 If first argument is `(' and third argument is `)', do the
1075 one-argument test of the second argument.
1077 4 Args: If first argument is !, negate three argument test of $2 $3 $4.
1078 Otherwise unspecified
1079 5 or more Args: unspecified. (Historical shells would use their
1082 The operators -a and -o are considered binary operators for the purpose
1085 As you can see, the test becomes (not (x or x)), which is false.
1087 E2) Why does bash sometimes say `Broken pipe'?
1089 If a sequence of commands appears in a pipeline, and one of the
1090 reading commands finishes before the writer has finished, the
1091 writer receives a SIGPIPE signal. Many other shells special-case
1092 SIGPIPE as an exit status in the pipeline and do not report it.
1097 `head' can finish before `ps' writes all of its output, and ps
1098 will try to write on a pipe without a reader. In that case, bash
1099 will print `Broken pipe' to stderr when ps is killed by a
1102 You can build a version of bash that will not report SIGPIPE errors
1103 by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
1106 E3) When I have terminal escape sequences in my prompt, why does bash
1107 wrap lines at the wrong column?
1109 Readline, the line editing library that bash uses, does not know
1110 that the terminal escape sequences do not take up space on the
1111 screen. The redisplay code assumes, unless told otherwise, that
1112 each character in the prompt is a `printable' character that
1113 takes up one character position on the screen.
1115 You can use the bash prompt expansion facility (see the PROMPTING
1116 section in the manual page) to tell readline that sequences of
1117 characters in the prompt strings take up no screen space.
1119 Use the \[ escape to begin a sequence of non-printing characters,
1120 and the \] escape to signal the end of such a sequence.
1122 E4) If I pipe the output of a command into `read variable', why doesn't
1123 the output show up in $variable when the read command finishes?
1125 This has to do with the parent-child relationship between Unix
1126 processes. It affects all commands run in pipelines, not just
1127 simple calls to `read'. For example, piping a command's output
1128 into a `while' loop that repeatedly calls `read' will result in
1131 Each element of a pipeline runs in a separate process, a child of
1132 the shell running the pipeline. A subprocess cannot affect its
1133 parent's environment. When the `read' command sets the variable
1134 to the input, that variable is set only in the subshell, not the
1135 parent shell. When the subshell exits, the value of the variable
1138 Many pipelines that end with `read variable' can be converted
1139 into command substitutions, which will capture the output of
1140 a specified command. The output can then be assigned to a
1143 grep ^gnu /usr/lib/news/active | wc -l | read ngroup
1145 can be converted into
1147 ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
1149 This does not, unfortunately, work to split the text among
1150 multiple variables, as read does when given multiple variable
1151 arguments. If you need to do this, you can either use the
1152 command substitution above to read the output into a variable
1153 and chop up the variable using the bash pattern removal
1154 expansion operators or use some variant of the following
1157 Say /usr/local/bin/ipaddr is the following shell script:
1160 host `hostname` | awk '/address/ {print $NF}'
1164 /usr/local/bin/ipaddr | read A B C D
1166 to break the local machine's IP address into separate octets, use
1170 set -- $(/usr/local/bin/ipaddr)
1172 A="$1" B="$2" C="$3" D="$4"
1174 Beware, however, that this will change the shell's positional
1175 parameters. If you need them, you should save them before doing
1178 This is the general approach -- in most cases you will not need to
1179 set $IFS to a different value.
1181 Some other user-supplied alternatives include:
1183 read A B C D << HERE
1184 $(IFS=.; echo $(/usr/local/bin/ipaddr))
1187 and, where process substitution is available,
1189 read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
1191 E5) I have a bunch of shell scripts that use backslash-escaped characters
1192 in arguments to `echo'. Bash doesn't interpret these characters. Why
1193 not, and how can I make it understand them?
1195 This is the behavior of echo on most Unix System V machines.
1197 The bash builtin `echo' is modeled after the 9th Edition
1198 Research Unix version of `echo'. It does not interpret
1199 backslash-escaped characters in its argument strings by default;
1200 it requires the use of the -e option to enable the
1201 interpretation. The System V echo provides no way to disable the
1202 special characters; the bash echo has a -E option to disable
1205 There is a configuration option that will make bash behave like
1206 the System V echo and interpret things like `\t' by default. Run
1207 configure with the --enable-xpg-echo-default option to turn this
1208 on. Be aware that this will cause some of the tests run when you
1209 type `make tests' to fail.
1211 There is a shell option, `xpg_echo', settable with `shopt', that will
1212 change the behavior of echo at runtime. Enabling this option turns
1213 on expansion of backslash-escape sequences.
1215 E6) Why doesn't a while or for loop get suspended when I type ^Z?
1217 This is a consequence of how job control works on Unix. The only
1218 thing that can be suspended is the process group. This is a single
1219 command or pipeline of commands that the shell forks and executes.
1221 When you run a while or for loop, the only thing that the shell forks
1222 and executes are any commands in the while loop test and commands in
1223 the loop bodies. These, therefore, are the only things that can be
1224 suspended when you type ^Z.
1226 If you want to be able to stop the entire loop, you need to put it
1227 within parentheses, which will force the loop into a subshell that
1228 may be stopped (and subsequently restarted) as a single unit.
1230 E7) What about empty for loops in Makefiles?
1232 It's fairly common to see constructs like this in automatically-generated
1240 for d in ${SUBDIRS}; do \
1241 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1244 When SUBDIRS is empty, this results in a command like this being passed to
1248 ( cd $d && ${MAKE} ${MFLAGS} clean )
1251 In versions of bash before bash-2.05a, this was a syntax error. If the
1252 reserved word `in' was present, a word must follow it before the semicolon
1253 or newline. The language in the manual page referring to the list of words
1254 being empty referred to the list after it is expanded. These versions of
1255 bash required that there be at least one word following the `in' when the
1256 construct was parsed.
1258 The idiomatic Makefile solution is something like:
1263 subdirs=$SUBDIRS ; for d in $$subdirs; do \
1264 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1267 The latest updated POSIX standard has changed this: the word list
1268 is no longer required. Bash versions 2.05a and later accept the
1271 E8) Why does the arithmetic evaluation code complain about `08'?
1273 The bash arithmetic evaluation code (used for `let', $(()), (()), and in
1274 other places), interprets a leading `0' in numeric constants as denoting
1275 an octal number, and a leading `0x' as denoting hexadecimal. This is
1276 in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
1277 arithmetic constants should be handled as signed long integers as defined
1278 by the ANSI/ISO C standard.
1280 The POSIX.2 interpretation committee has confirmed this:
1282 http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
1284 E9) Why does the pattern matching expression [A-Z]* match files beginning
1285 with every letter except `z'?
1287 Bash-2.03, Bash-2.05 and later versions honor the current locale setting
1288 when processing ranges within pattern matching bracket expressions ([A-Z]).
1289 This is what POSIX.2 and SUSv3/XPG6 specify.
1291 The behavior of the matcher in bash-2.05 and later versions depends on the
1292 current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will
1293 result in the traditional behavior ([A-Z] matches all uppercase ASCII
1294 characters). Many other locales, including the en_US locale (the default
1295 on many US versions of Linux) collate the upper and lower case letters like
1300 which means that [A-Z] matches every letter except `z'. Others collate like
1304 which means that [A-Z] matches every letter except `a'.
1306 The portable way to specify upper case letters is [:upper:] instead of
1307 A-Z; lower case may be specified as [:lower:] instead of a-z.
1309 Look at the manual pages for setlocale(3), strcoll(3), and, if it is
1310 present, locale(1). If you have locale(1), you can use it to find
1311 your current locale information even if you do not have any of the
1318 into /etc/profile and inspect any shell scripts run from cron for
1319 constructs like [A-Z]. This will prevent things like
1323 from removing every file in the current directory except those beginning
1324 with `z' and still allow individual users to change the collation order.
1325 Users may put the above command into their own profiles as well, of course.
1327 E10) Why does `cd //' leave $PWD as `//'?
1329 POSIX.2, in its description of `cd', says that *three* or more leading
1330 slashes may be replaced with a single slash when canonicalizing the
1331 current working directory.
1333 This is, I presume, for historical compatibility. Certain versions of
1334 Unix, and early network file systems, used paths of the form
1335 //hostname/path to access `path' on server `hostname'.
1337 E11) If I resize my xterm while another program is running, why doesn't bash
1340 This is another issue that deals with job control.
1342 The kernel maintains a notion of a current terminal process group. Members
1343 of this process group (processes whose process group ID is equal to the
1344 current terminal process group ID) receive terminal-generated signals like
1345 SIGWINCH. (For more details, see the JOB CONTROL section of the bash
1348 If a terminal is resized, the kernel sends SIGWINCH to each member of
1349 the terminal's current process group (the `foreground' process group).
1351 When bash is running with job control enabled, each pipeline (which may be
1352 a single command) is run in its own process group, different from bash's
1353 process group. This foreground process group receives the SIGWINCH; bash
1354 does not. Bash has no way of knowing that the terminal has been resized.
1356 There is a `checkwinsize' option, settable with the `shopt' builtin, that
1357 will cause bash to check the window size and adjust its idea of the
1358 terminal's dimensions each time a process stops or exits and returns control
1359 of the terminal to bash. Enable it with `shopt -s checkwinsize'.
1361 E12) Why don't negative offsets in substring expansion work like I expect?
1363 When substring expansion of the form ${param:offset[:length} is used,
1364 an `offset' that evaluates to a number less than zero counts back from
1365 the end of the expanded value of $param.
1367 When a negative `offset' begins with a minus sign, however, unexpected things
1368 can happen. Consider
1373 intending to print the last four characters of $a. The problem is that
1374 ${param:-word} already has a well-defined meaning: expand to word if the
1375 expanded value of param is unset or null, and $param otherwise.
1377 To use negative offsets that begin with a minus sign, separate the
1378 minus sign and the colon with a space.
1380 Section F: Things to watch out for on certain Unix versions
1382 F1) Why can't I use command line editing in my `cmdtool'?
1384 The problem is `cmdtool' and bash fighting over the input. When
1385 scrolling is enabled in a cmdtool window, cmdtool puts the tty in
1386 `raw mode' to permit command-line editing using the mouse for
1387 applications that cannot do it themselves. As a result, bash and
1388 cmdtool each try to read keyboard input immediately, with neither
1389 getting enough of it to be useful.
1391 This mode also causes cmdtool to not implement many of the
1392 terminal functions and control sequences appearing in the
1393 `sun-cmd' termcap entry. For a more complete explanation, see
1394 that file examples/suncmd.termcap in the bash distribution.
1396 `xterm' is a better choice, and gets along with bash much more
1399 If you must use cmdtool, you can use the termcap description in
1400 examples/suncmd.termcap. Set the TERMCAP variable to the terminal
1401 description contained in that file, i.e.
1403 TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
1405 Then export TERMCAP and start a new cmdtool window from that shell.
1406 The bash command-line editing should behave better in the new
1407 cmdtool. If this works, you can put the assignment to TERMCAP
1408 in your bashrc file.
1410 F2) I built bash on Solaris 2. Why do globbing expansions and filename
1411 completion chop off the first few characters of each filename?
1413 This is the consequence of building bash on SunOS 5 and linking
1414 with the libraries in /usr/ucblib, but using the definitions
1415 and structures from files in /usr/include.
1417 The actual conflict is between the dirent structure in
1418 /usr/include/dirent.h and the struct returned by the version of
1419 `readdir' in libucb.a (a 4.3-BSD style `struct direct').
1421 Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
1422 when configuring and building bash. This will ensure that you
1423 use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
1424 link with libc before libucb.
1426 If you have installed the Sun C compiler, you may also need to
1427 put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
1430 F3) Why does bash dump core after I interrupt username completion or
1431 `~user' tilde expansion on a machine running NIS?
1433 This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
1434 client library, which is part of libc.
1436 The YP library code keeps static state -- a pointer into the data
1437 returned from the server. When YP initializes itself (setpwent),
1438 it looks at this pointer and calls free on it if it's non-null.
1441 If one of the YP functions is interrupted during getpwent (the
1442 exact function is interpretwithsave()), and returns NULL, the
1443 pointer is freed without being reset to NULL, and the function
1444 returns. The next time getpwent is called, it sees that this
1445 pointer is non-null, calls free, and the bash free() blows up
1446 because it's being asked to free freed memory.
1448 The traditional Unix mallocs allow memory to be freed multiple
1449 times; that's probably why this has never been fixed. You can
1450 run configure with the `--without-gnu-malloc' option to use
1451 the C library malloc and avoid the problem.
1453 F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
1455 The `@' character is the default `line kill' character in most
1456 versions of System V, including SVR4.2. You can change this
1457 character to whatever you want using `stty'. For example, to
1458 change the line kill character to control-u, type
1462 where the `^' and `U' can be two separate characters.
1464 F5) Why does bash report syntax errors when my C News scripts use a
1465 redirection before a subshell command?
1467 The actual command in question is something like
1471 According to the grammar given in the POSIX.2 standard, this construct
1472 is, in fact, a syntax error. Redirections may only precede `simple
1473 commands'. A subshell construct such as the above is one of the shell's
1474 `compound commands'. A redirection may only follow a compound command.
1476 This affects the mechanical transformation of commands that use `cat'
1477 to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
1478 comp.unix.shell). While most commands of the form
1482 can be converted to `< file command', shell control structures such as
1483 loops and subshells require `command < file'.
1485 The file CWRU/sh-redir-hack in the bash distribution is an
1486 (unofficial) patch to parse.y that will modify the grammar to
1487 support this construct. It will not apply with `patch'; you must
1488 modify parse.y by hand. Note that if you apply this, you must
1489 recompile with -DREDIRECTION_HACK. This introduces a large
1490 number of reduce/reduce conflicts into the shell grammar.
1492 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
1494 The short answer is that Red Hat screwed up.
1496 The long answer is that they shipped an /etc/inputrc that only works
1497 for emacs mode editing, and then screwed all the vi users by setting
1498 INPUTRC to /etc/inputrc in /etc/profile.
1500 The short fix is to do one of the following: remove or rename
1501 /etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
1502 but make sure you export it if you do), remove the assignment to
1503 INPUTRC from /etc/profile, add
1507 to the beginning of /etc/inputrc, or bracket the key bindings in
1508 /etc/inputrc with these lines
1514 F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
1517 HP/UX's support for long double is imperfect at best.
1519 GCC will support it without problems, but the HP C library functions
1520 like strtold(3) and printf(3) don't actually work with long doubles.
1521 HP implemented a `long_double' type as a 4-element array of 32-bit
1522 ints, and that is what the library functions use. The ANSI C
1523 `long double' type is a 128-bit floating point scalar.
1525 The easiest fix, until HP fixes things up, is to edit the generated
1526 config.h and #undef the HAVE_LONG_DOUBLE line. After doing that,
1527 the compilation should complete successfully.
1529 Section G: How can I get bash to do certain common things?
1531 G1) How can I get bash to read and display eight-bit characters?
1533 This is a process requiring several steps.
1535 First, you must ensure that the `physical' data path is a full eight
1536 bits. For xterms, for example, the `vt100' resources `eightBitInput'
1537 and `eightBitOutput' should be set to `true'.
1539 Once you have set up an eight-bit path, you must tell the kernel and
1540 tty driver to leave the eighth bit of characters alone when processing
1541 keyboard input. Use `stty' to do this:
1543 stty cs8 -istrip -parenb
1545 For old BSD-style systems, you can use
1553 Finally, you need to tell readline that you will be inputting and
1554 displaying eight-bit characters. You use readline variables to do
1555 this. These variables can be set in your .inputrc or using the bash
1556 `bind' builtin. Here's an example using `bind':
1558 bash$ bind 'set convert-meta off'
1559 bash$ bind 'set meta-flag on'
1560 bash$ bind 'set output-meta on'
1562 The `set' commands between the single quotes may also be placed
1565 G2) How do I write a function `x' to replace builtin command `x', but
1566 still invoke the command from within the function?
1568 This is why the `command' and `builtin' builtins exist. The
1569 `command' builtin executes the command supplied as its first
1570 argument, skipping over any function defined with that name. The
1571 `builtin' builtin executes the builtin command given as its first
1574 For example, to write a function to replace `cd' that writes the
1575 hostname and current directory to an xterm title bar, use
1576 something like the following:
1580 builtin cd "$@" && xtitle "$HOST: $PWD"
1583 This could also be written using `command' instead of `builtin';
1584 the version above is marginally more efficient.
1586 G3) How can I find the value of a shell variable whose name is the value
1587 of another shell variable?
1589 Versions of Bash newer than Bash-2.0 support this directly. You can use
1593 For example, the following sequence of commands will echo `z':
1599 For sh compatibility, use the `eval' builtin. The important
1600 thing to remember is that `eval' expands the arguments you give
1601 it again, so you need to quote the parts of the arguments that
1602 you want `eval' to act on.
1604 For example, this expression prints the value of the last positional
1607 eval echo \"\$\{$#\}\"
1609 The expansion of the quoted portions of this expression will be
1610 deferred until `eval' runs, while the `$#' will be expanded
1611 before `eval' is executed. In versions of bash later than bash-2.0,
1615 does the same thing.
1617 This is not the same thing as ksh93 `nameref' variables, though the syntax
1618 is similar. I may add namerefs in a future bash version.
1620 G4) How can I make the bash `time' reserved word print timing output that
1621 looks like the output from my system's /usr/bin/time?
1623 The bash command timing code looks for a variable `TIMEFORMAT' and
1624 uses its value as a format string to decide how to display the
1627 The value of TIMEFORMAT is a string with `%' escapes expanded in a
1628 fashion similar in spirit to printf(3). The manual page explains
1629 the meanings of the escape sequences in the format string.
1631 If TIMEFORMAT is not set, bash acts as if the following assignment had
1634 TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
1636 The POSIX.2 default time format (used by `time -p command') is
1638 TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
1640 The BSD /usr/bin/time format can be emulated with:
1642 TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
1644 The System V /usr/bin/time format can be emulated with:
1646 TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
1648 The ksh format can be emulated with:
1650 TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
1652 G5) How do I get the current directory into my prompt?
1654 Bash provides a number of backslash-escape sequences which are expanded
1655 when the prompt string (PS1 or PS2) is displayed. The full list is in
1658 The \w expansion gives the full pathname of the current directory, with
1659 a tilde (`~') substituted for the current value of $HOME. The \W
1660 expansion gives the basename of the current directory. To put the full
1661 pathname of the current directory into the path without any tilde
1662 subsitution, use $PWD. Here are some examples:
1664 PS1='\w$ ' # current directory with tilde
1665 PS1='\W$ ' # basename of current directory
1666 PS1='$PWD$ ' # full pathname of current directory
1668 The single quotes are important in the final example to prevent $PWD from
1669 being expanded when the assignment to PS1 is performed.
1671 G6) How can I rename "*.foo" to "*.bar"?
1673 Use the pattern removal functionality described in D3. The following `for'
1674 loop will do the trick:
1680 G7) How can I translate a filename from uppercase to lowercase?
1682 The script examples/functions/lowercase, originally written by John DuBois,
1683 will do the trick. The converse is left as an exercise.
1685 G8) How can I write a filename expansion (globbing) pattern that will match
1686 all files in the current directory except "." and ".."?
1688 You must have set the `extglob' shell option using `shopt -s extglob' to use
1693 A solution that works without extended globbing is given in the Unix Shell
1694 FAQ, posted periodically to comp.unix.shell.
1696 Section H: Where do I go from here?
1698 H1) How do I report bugs in bash, and where should I look for fixes and
1701 Use the `bashbug' script to report bugs. It is built and
1702 installed at the same time as bash. It provides a standard
1703 template for reporting a problem and automatically includes
1704 information about your configuration and build environment.
1706 `bashbug' sends its reports to bug-bash@gnu.org, which
1707 is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug.
1709 Bug fixes, answers to questions, and announcements of new releases
1710 are all posted to gnu.bash.bug. Discussions concerning bash features
1711 and problems also take place there.
1713 To reach the bash maintainers directly, send mail to
1714 bash-maintainers@gnu.org.
1716 H2) What kind of bash documentation is there?
1718 First, look in the doc directory in the bash distribution. It should
1719 contain at least the following files:
1721 bash.1 an extensive, thorough Unix-style manual page
1722 builtins.1 a manual page covering just bash builtin commands
1723 bashref.texi a reference manual in GNU tex`info format
1724 bashref.info an info version of the reference manual
1726 article.ms text of an article written for The Linux Journal
1727 readline.3 a man page describing readline
1729 Postscript, HTML, and ASCII files created from the above source are
1730 available in the documentation distribution.
1732 There is additional documentation available for anonymous FTP from host
1733 ftp.cwru.edu in the `pub/bash' directory.
1735 Cameron Newham and Bill Rosenblatt have written a book on bash, published
1736 by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn
1737 Shell book. The title is ``Learning the Bash Shell'', and the ISBN number
1738 is 1-56592-147-X. Look for it in fine bookstores near you. This book
1739 covers bash-1.14, but has an appendix describing some of the new features
1742 A second edition of this book is available, published in January, 1998.
1743 The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores
1746 The GNU Bash Reference Manual has been published as a printed book by
1747 Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers
1748 bash-2.0 and is available from most online bookstores (see
1749 http://www.network-theory.co.uk/bash/manual/ for details). The publisher
1750 will donate $1 to the Free Software Foundation for each copy sold.
1752 H3) What's coming in future versions?
1754 These are features I hope to include in a future version of bash.
1756 Rocky Bernstein's bash debugger (support is included with bash-3.0)
1758 co-processes, but with a new-style syntax that looks like function declaration
1760 H4) What's on the bash `wish list' for future versions?
1762 These are features that may or may not appear in a future version of bash.
1764 breaking some of the shell functionality into embeddable libraries
1765 a module system like zsh's, using dynamic loading like builtins
1766 date-stamped command history
1767 a bash programmer's guide with a chapter on creating loadable builtins
1768 a better loadable interface to perl with access to the shell builtins and
1769 variables (contributions gratefully accepted)
1770 ksh93-like `nameref' variables
1771 ksh93-like `+=' variable assignment operator
1772 ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
1773 associated disipline functions
1774 Some of the new ksh93 pattern matching operators, like backreferencing
1776 H5) When will the next release appear?
1778 The next version will appear sometime in 2005. Never make predictions.
1780 This document is Copyright 1995-2004 by Chester Ramey.
1782 Permission is hereby granted, without written agreement and
1783 without license or royalty fees, to use, copy, and distribute
1784 this document for any purpose, provided that the above copyright
1785 notice appears in all copies of this document and that the
1786 contents of this document remain unaltered.