= 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 [[Bash/Variables|here]]. <> ---- == Bash Internals == === Limits === `$FUNCNEST` is the maximum nesting level for [[Bash/Function|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 [[Bash/ShellOptions|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 [[Bash/Alias|aliases]]. `$BASH_CMDS` is an associative array of [[Bash/BuiltinCommands|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 [[Bash/Pipeline|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` [[Bash/ShellOptions#Compatibility_Mode|shell option]]. ---- == Completion == The following are all only useful for programming [[Bash/Completion|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` [[Bash/BuiltinCommands#Fc|builtin]]. ---- == Filename Expansion == `$FIGNORE` is a colon-delimited list of suffixes to ignore when evaluating [[Bash/Expansion#Filename_Expansion|filename expansion]]. `$GLOBIGNORE` s a colon-delimited list of patterns to ignore when evaluating filename expansion. ---- == Get Opts == The `getopts` [[Bash/BuiltinCommands#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 [[Bash/Expansion#History_Expansion|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 [[Bash/JobControl#Coprocess|coprocess]] name is not specified for the `coproc` [[Bash/BuiltinCommands#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. ---- == Mail == 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` [[Bash/BuiltinCommands#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` [[Bash/BuiltinCommands#Cd|builtin]]. `$DIRSTACK` is an array containing the directory stack, as manipulated by the `popd` and `pushd` [[Bash/BuiltinCommands#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 [[Bash/Select|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` [[Bash/BuiltinCommands#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 ''i''th subexpression. ---- == Time == `$TIMEFORMAT` sets the format for how the `time` [[Bash/BuiltinCommands#Time|builtin]] will display. ---- == Tracing == `$BASH_XTRACEFD` will, if set to an integer corresponding to a valid [[Bash/FileDescriptor|file descriptor]], cause [[Bash/ShellOptions#Tracing|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 [[Bash/ShellOptions#Tracing|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. ---- CategoryRicottone