bash: Special Parameters

1 
1 3.4.2 Special Parameters
1 ------------------------
1 
1 The shell treats several parameters specially.  These parameters may
1 only be referenced; assignment to them is not allowed.
1 
1 '*'
1      ($*) Expands to the positional parameters, starting from one.  When
1      the expansion is not within double quotes, each positional
1      parameter expands to a separate word.  In contexts where it is
1      performed, those words are subject to further word splitting and
1      pathname expansion.  When the expansion occurs within double
1      quotes, it expands to a single word with the value of each
1      parameter separated by the first character of the 'IFS' special
1      variable.  That is, '"$*"' is equivalent to '"$1C$2C..."', where C
1      is the first character of the value of the 'IFS' variable.  If
1      'IFS' is unset, the parameters are separated by spaces.  If 'IFS'
1      is null, the parameters are joined without intervening separators.
1 
1 '@'
1      ($@) Expands to the positional parameters, starting from one.  When
1      the expansion occurs within double quotes, each parameter expands
1      to a separate word.  That is, '"$@"' is equivalent to '"$1" "$2"
1      ...'.  If the double-quoted expansion occurs within a word, the
1      expansion of the first parameter is joined with the beginning part
1      of the original word, and the expansion of the last parameter is
1      joined with the last part of the original word.  When there are no
1      positional parameters, '"$@"' and '$@' expand to nothing (i.e.,
1      they are removed).
1 
1 '#'
1      ($#) Expands to the number of positional parameters in decimal.
1 
1 '?'
1      ($?)  Expands to the exit status of the most recently executed
1      foreground pipeline.
1 
1 '-'
1      ($-, a hyphen.)  Expands to the current option flags as specified
1      upon invocation, by the 'set' builtin command, or those set by the
1      shell itself (such as the '-i' option).
1 
1 '$'
1      ($$) Expands to the process ID of the shell.  In a '()' subshell,
1      it expands to the process ID of the invoking shell, not the
1      subshell.
1 
1 '!'
1      ($!)  Expands to the process ID of the job most recently placed
1      into the background, whether executed as an asynchronous command or
1      using the 'bg' builtin (⇒Job Control Builtins).
1 
1 '0'
1      ($0) Expands to the name of the shell or shell script.  This is set
1      at shell initialization.  If Bash is invoked with a file of
1      commands (⇒Shell Scripts), '$0' is set to the name of that
11      file.  If Bash is started with the '-c' option (⇒Invoking
      Bash), then '$0' is set to the first argument after the string to
1      be executed, if one is present.  Otherwise, it is set to the
1      filename used to invoke Bash, as given by argument zero.
1 
1 '_'
1      ($_, an underscore.)  At shell startup, set to the absolute
1      pathname used to invoke the shell or shell script being executed as
1      passed in the environment or argument list.  Subsequently, expands
1      to the last argument to the previous command, after expansion.
1      Also set to the full pathname used to invoke each command executed
1      and placed in the environment exported to that command.  When
1      checking mail, this parameter holds the name of the mail file.
1