Bash Shell Variables
This is a list of special variables that are set in bash(1) to configure it's behavior, or by bash(1) to indicate state. For programming variables, including special ones, see here.
Contents
Bash Internals
Limits
$FUNCNEST is the maximum nesting level for functions.
Constants
$BASHPID is the current shell's PID. $PPID is the PID of the shell's parent.
$BASH_VERSION is the current shell's version number. $BASH_VERSINFO is an array representing this information.
$MACHTYPE, $HOSTTYPE, and $OSTYPE describe the system on which bash(1) is running.
$EMACS and $INSIDE_EMACS are used to determine if the shell is operating within Emacs, in which case line editing will be disabled.
Parameters
$RANDOM is a random number between 0 and 32767. If set, the random number generator is seeded with that number.
$SRANDOM is a random 32-bit number that cannot be seeded.
$EPOCHSECONDS and $EPOCHREALTIME are the current time.
$SECONDS is the number of seconds since the bash(1) began running.
Files and Directories
$BASH_ENV (or $ENV) is a startup file used when bash(1) is used as a script interpretter.
$TMPDIR is the location where temporary files are written.
Not Useful
$BASHOPTS and $SHELLOPTS are a colon-delimited list of enabled shell options; the former refers to bash(1) options while the latter refers to generally portable sh(1) options. $- is the short-form of $SHELLOPTS.
$POSIXLY_CORRECT sets POSIX mode.
$BASH_ALIASES is an associative array of aliases. $BASH_CMDS is an associative array of builtins.
$BASH_LOADABLES_PATH is a colon-separated list of directories searched for dynamically loadable builtins.
$SHELL is the full pathname of the shell.
$_ is, at first, the pathname used to call the shell. Thereafter every time a command is called, $_ is the last argument to that command. Furthermore, while a command is executed, $_ is set to the pathname used to call that command. This is exposed when a command inspects its environment.
$BASH_SUBSHELL is the current nesting level of subshells. Similarly, $SHLVL is a counter for number of concurrent shells, which in some circumstances is a shell nesting level.
$BASH_COMMAND is the command currently executing. If bash(1) is executing a trap, $BASH_COMMAND will show the command that triggered the trap.
If bash(1) is called like bash -c '...', $BASH_EXECUTION_STRING is set to the command string.
$LINENO is the line number of the currently executing command.
$FUNCNAME is an array of functions currently in the call stack. $BASH_SOURCE is an array of source filenames corresponding to $FUNCNAME. Function ${FUNCNAME[i]} is defined in file ${BASH_SOURCE[i]}. Similarly, $BASH_LINENO is an array of line numbers that corresponds to $FUNCNAME. Function ${FUNCNAME[i]} is called from line number ${BASH_LINENO[i]}.
$COLUMNS and $LINES are used to indicate screen size.
$CHILD_MAX is the number of child process exit statuses to remember.
$PIPESTATUS is an array of exit statuses from each process in the most recent pipeline.
$IGNOREEOF is an integer representing the number of EOF characters that can be received before the shell exits. If set to a value that is not an integer, the interpretted value is 10. If not set, the default value is 1.
Compatibility Level
$BASH_COMPAT is the compatibility level of the shell. Setting to 4.2 or 42 is equivalent to using the compat42 shell option.
Completion
The following are all only useful for programming completion.
$COMP_LINE is the current command line prompt. $COMP_POINT is the current location of the cursor within that line.
$COMP_WORDS is an array of the current command line prompt, tokenized. $COMP_CWORD is the index of $COMP_WORDS where the cursor currently is located. $COMP_WORDBREAKS is the separators that are being used to tokenize the command line prompt.
$COMP_TYPE indicates the type of operation that trigger completion. $COMP_KEY is the key used to trigger completion.
$COMPREPLY is used to pass completions back to the shell.
$READLINE_ARGUMENT, $READLINE_LINE, $READLINE_MARK, and $READLINE_POINT are used to pass information into readline(3).
$INPUTRC is the readline(3) initialization file. The default is ~/.inputrc.
Fix Command
$FCEDIT is the editor to use with the fc builtin.
Filename Expansion
$FIGNORE is a colon-delimited list of suffixes to ignore when evaluating filename expansion.
$GLOBIGNORE s a colon-delimited list of patterns to ignore when evaluating filename expansion.
Get Opts
The getopts builtin sets two variables:
$OPTARG is the most recent options's value
$OPTIND is the most recent option's index
If $OPTERR is set to 1, error messages will propogate from the getopts builtin.
History
$HISTFILE is the bash(1) history filename.
$HISTFILESIZE is the maximum file size for $HISTFILE, while $HISTSIZE the maximum number of commands for $HISTFILE.
$HISTCONTROL and $HISTIGNORE configure which commands are recorded in the history.
$HISTCMD is the current command's history number.
If $HISTTIMEFORMAT is set, commands are recorded in the history with a timestamp formatted with this value.
$histchars configure the history expansion characters. By default this is the exclamation mark (!).
Inter Field Separator
$IFS defines the characters that should be interpreted as separating tokens.
Frequently, this is only manipulated when writing a pipeline that specially delimits items with the null byte.
Job Control
If a coprocess name is not specified for the coproc builtin, the file descriptor is set into the $COPROC array.
Locale
$LC_COLLATE, $LC_CTYPE, $LC_MESSAGES, $LC_NUMERIC, and $LC_TIME are all used in different contexts to determine the current locale.
$LANG is the fallback value. $LC_ALL overrides $LANG and all of the above if set.
If $MAIL is set, bash(1) monitors it (assuming it is a mail file or Maildir directory) and informs the user of changes.
Similarly, $MAILPATH is a colon-delimited list of locations to monitor. If set, $MAIL is not monitored.
$MAILCHECK is the number of seconds bash(1) will wait between checks. The default is 60.
Map File
If a variable name is not specified for the mapfile builtin, $MAPFILE is set as an array with that output.
Name Resolution
$HOSTNAME is the name of the current system.
$HOSTFILE is the hosts file that should be referenced for resolving names.
Paths
$PWD is the current working directory. $OLDPWD is the previous working directory.
$PATH is a colon-delimited list of directories searched for commands.
$EXECIGNORE is a a colon-delimited list of patterns to ignore when searching for commands.
$CDPATH is similarly searched by the cd builtin.
$DIRSTACK is an array containing the directory stack, as manipulated by the popd and pushd builtins.
Prompts
$PS1 is printed at the beginning of every command prompt.
$PS2 is printed at the beginning of run-on lines.
$PS3 is printed at the prompt in select menus.
$PS0 is printed after a command is entered but before it is executed.
$PS4 is printed on traces.
$PROMPT_COMMAND is either a command string or an array of command strings. These commands are executed before printing the prompt.
$PROMPT_DIRTRIM sets the number of directory names to retain when expanding the \w and \W escapes in a prompt.
Read
If a variable name is not specified for the read builtin, $REPLY is set with that output.
$TMOUT sets a timeout for the read and select builtins.
Regular Expressions
$BASH_REMATCH is an array set by the =~ operator. The first item is the substring matching the entire regular expression. ${BASH_REMATCH[i]} is the substring matching the ith subexpression.
Time
$TIMEFORMAT sets the format for how the time builtin will display.
Tracing
$BASH_XTRACEFD will, if set to an integer corresponding to a valid file descriptor, cause trace output to be written to that file descriptor.
$BASH_ARGV is an array containing all the arguments in the current shell call stack, while $BASH_ARGC is the count of those arguments. These are only set if extended debugging mode is on.
In a similar manner, $BASH_ARGV0 is the name of the shell. It is identical to $0.
User
$UID is the user's ID. $EUID is the effective EID.
$GROUPS is an array of groups the user is a member of.
$HOME is the user's home directory.