24. Special Parameters
Bash supports a lot of special read only parameters. The positional parameters 1, 2, 3, ... are set to the parameters which were given to a Bash script or Shell function:
$ ppars() {
echo $1, $2, $3
}
$ ppars Oranges lemons
Oranges, lemons,
@ and * expands each positional parameter to a single word:
$ ppars() {
echo $@
}
$ ppars Oranges lemons
Oranges lemons
Within double quotes * expands all postional parameters to a single word only, separated by the first character of the variable IFS:
$ ppars() {
IFS="~|-"
echo "$*"
}
$ ppars Oranges lemons
Oranges~lemons
"#" expands to the number of positional parameters:
$ pnum() {
echo $#
}
$ pnum Oranges lemons
2
"?" expands to exit status the most recently executed foreground pipe:
$ (exit 255)
$ echo $?
255
"-" expands to the current option flags set by the set command or given when invoking bash:
$ set -b
$ echo $-
bhimBH
"$" expands to the pid of the shell:
echo $$
4936
"0" expands to the name of the bash script:
$ echo $0
"_" expands initially to the absolute path of the Bash script, otherwise to the last argument of last called command:
$ ls /root /home
$ echo $_
/home