Bash Reference Manual
Taken from man pages but reworded, rearranged and examples to make it so even I can see how to do something with bash!
from version 3.2.57 there exists version 5.1 as of 12/2020
- What is a shell? What's Bash?
A user interface, command language interpreter, a macro processor
which takes text and symbols, expanding them to create larger expressions and executes commands.
Files containing commands can be treated as commands. Ones with the same name as commands are executed instead of the system command.
for i in 3 2 1 ; do echo $i ; done
for(( i=1; i<3; i++ )) do echo $i; done
i=0; until [ $i -gt 3 ]; do echo $i ; ((i++)) ; done
while [ `itsready` ]; do echo 1;done
- Command Line Editing
if then elif else fi
for do done
DGG made this nice stuff from, what is now, and old version of the docs.
The truth is out there
> bash --help # as of 7/28/16
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu)
Usage: bash [GNU long option] [option] ...
bash [GNU long option] [option] script-file ...
GNU long options:
--init-file --login --noediting --noprofile --norc --rcfile
--posix --restricted --protected --rpm-requires
-irsD or -c command or -O shopt_option (invocation only)
-abefhkmnptuvxBCHP or -o option
Type `bash -c "help set"' for more information about shell options.
Type `bash -c help' for more information about shell builtin commands.
Set the variable corresponding to option-name:
(The following are rearranged, i.e. not exactly as displayed.)
> sh -c "help set"
set: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
|Mark variables which are modified or created for export.
|the shell will perform brace expansion
|Exit immediately if a command exits with a non-zero status.
|ERR trap is inherited by shell functions.
|If set, the DEBUG trap is inherited by shell functions.
|Remember the location of commands (i.e. save them in a cache like structure)
| enable command history
!nth style history substitution. Default on when shell is interactive.
-nth command or first argument(
!^) or last argument(
!$) or all arguments (
geek.nz has more info.
|the shell will not exit upon reading EOF
|All assignment arguments are placed in the environment for a command,
not just those that precede the command name.
|disallow existing regular files to be overwritten by redirection of output.
|Disable file name generation (globbing).
| Job control is enabled.
|Notify of job termination immediately.
|Treat unset variables as an error when substituting.
|Exit after reading and executing one command.
|do not follow symbolic links when executing commands such as
cd which change the current directory.
| the return value of a pipeline is the status of
the last command to exit with a non-zero status,
or zero if no command exited with a non-zero status
|Turned on whenever the real and effective user ids do not match.
Disables processing of the $ENV file and importing of shell functions.
Turning this option off causes the effective uid and gid to be set to
the real uid and gid.
| use a vi-style line editing
| use an emacs-style line editing
|Read commands but do not execute them.
|display shell input lines as they are read.
|display commands and arguments as they are executed.
|operate as 1003.2 standard
|allow comments to appear in interactive commands
- Assign any remaining arguments to the positional parameters.
-v are turned off.
Using + causes flags to be turned off.
The flags can be used at invocation of the shell,
current set of flags may be found in
echo $- himBH (hashall, jobcontrol, Braceexpand, HistExpand )
The remaining n ARGs are positional parameters and are assigned, in order, to
$1, $2, … $n.
If no ARGs are given, all variables are output.
Mac OS has an older version of bash 3.2.57.(1). It will not include newer versions,
as well as several other commands (including:
becuse they have a GPL V3 license that explicitly restricts commercial Unix vendors from including them.
Where there is an open source command you are allowed to install it (in an unprotected directory, safe from Mac OS upgrades).
Package managers that can add them include: Homebrew, MacPorts, Fink.
@Real-World-Systems.com : BASH_VERSION=GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
> ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Nov 20 2014 /bin/sh -> bash
Changes of note:
> /bin/sh -c 'echo -e "Hello\n\tWorld"'
> /bin/bash -c 'echo -e "Hello\n\tWorld"'
Severly hacked by Dennis G German beginning 12/18/01 and continuing today
Sub versions up to -53 exist( these do not change functionally but correct bugs