home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


Book HomeBook TitleSearch this book

A.7. bash

bash is probably the most popular "third-party" shell that is available for Unix and other systems. In particular, it is the default shell on GNU/Linux systems. (It also comes on the "freeware" CD with Solaris 8.) You can get it from the Internet, via anonymous FTP to ftp.gnu.org in the directory /pub/gnu/bash. You can also order it from its maker at the address listed here.

The Free Software Foundation
59 Temple Place - Suite 330
Boston, MA  02111-1307
(617) 542-2652
(617) 542-5942 (fax)

http://www.gnu.org

Bash was written by Brian Fox and Chet Ramey. Chet Ramey currently maintains it. Its name is in line with the FSF's penchant for bad puns: it stands for Bourne-Again Shell. Although bash is easily available and you don't have to pay for it (other than the cost of media, phone calls, etc.), it's not really public domain software. While public domain software doesn't have licensing restrictions, the FSF's software does. But those restrictions are diametrically opposed to those in a commercial license:[151] instead of agreeing not to distribute the software further, you agree not to prevent it from being distributed further! In other words, you enjoy unrestricted use of the software as long as you agree not to inhibit others from doing the same. Richard Stallman, the founder of the FSF, invented this intriguing and admirable concept.

[151] Accordingly, the document that spells out these restrictions is called a copyleft.

These days, the ideals of the Free Software and Open Source movements, the GNU project, and the quality of GNU software are all well known. The most popular GNU system is GNU/Linux, which uses the Linux kernel and GNU utilities to make a complete, fully functional, Unix- and POSIX-compatible computing environment.

bash is fully compatible with the 1992 POSIX standard. It has several of the most important Korn shell features and the C shell features that the Korn shell has appropriated, including aliases, functions, tilde notation, emacs and vi editing modes, arithmetic expressions, job control, etc.

The overlap of features between bash and the Korn shell has increased in recent years. It includes many ksh93 features. But it is not an exact ksh clone. The bash FAQ, published monthly by Chet Ramey, lists the following differences between bash and ksh93. Items enclosed in square brackets ([...]) are listed in this book, but not in the FAQ.

The following new things in ksh93 are not available in bash 2.05:

  • Associative arrays

  • Floating-point arithmetic and variables

  • Math library functions

  • ${!name[sub]} name of subscript for associative array

  • "." is allowed in variable names to create a hierarchical namespace

  • More extensive compound assignment syntax

  • Discipline functions

  • sleep and getconf built-ins (bash has loadable versions)

  • typeset -n and nameref variables

  • The KEYBD trap

  • The variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version, .sh.name, .sh.subscript, .sh.value, HISTEDIT [The .sh.match variable also]

  • Backreferences in pattern matching (\N)

  • The & operator in pattern lists for matching

  • print -f (bash uses printf)

  • fc has been renamed to hist

  • The dot command (.) can execute shell functions

  • Exit statuses between 0 and 255

  • The set -o pipefail option

  • The += variable assignment operator

  • TMOUT is default timeout for read and select

  • <&n- and >&n- redirections (combination dup and close) [Here-strings with <<<]

  • FPATH and PATH mixing

  • getopts -a

  • The -R invocation option

  • DEBUG trap now executed before each simple command, instead of after

  • The printf %H, %P, %T modifiers, and an output base for %d [Also %Z.]

The following new things in ksh93 are present in bash 2.05:

  • The for ((...;...;...)) ; do list; done arithmetic for command

  • The ?:, ++, --, and comma (,) arithmetic operators

  • The shell variable expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]}, ${!param*}

  • Compound array assignment

  • The ! reserved word

  • Loadable built-ins -- but ksh uses builtin while bash uses enable

  • The command, builtin, and disown built-ins

  • New $'...' and $"..." quoting

  • FIGNORE (but bash uses GLOBIGNORE), HISTCMD

  • set -o notify, set -C

  • Changes to kill built-in

  • read -A (bash uses read -a)

  • read -t/read -d

  • trap -p

  • exec -a/exec -c

  • The dot command (.) restores the positional parameters when it completes

  • The test command conforms to POSIX.

  • umask -S

  • unalias -a

  • Command and arithmetic substitution performed on PS1, PS4, and ENV

  • Command name completion

  • ENV processed only for interactive shells

bash has many features of its own that make it a very powerful and flexible environment. Here are some of the highlights:

We're compelled to say that many users prefer bash to the Korn shell. With the increasing popularity of GNU/Linux and various BSD-derived systems, it's not clear which shell has the larger user base. In any case, bash is definitely an excellent choice. We recommend the book Learning the bash Shell by Cameron Newham and Bill Rosenblatt, published by O'Reilly & Associates. (It is based on the first edition of this book.)



Library Navigation Links

Copyright © 2003 O'Reilly & Associates. All rights reserved.