Positional parameters are the arguments passed to a shell script or function, accessed through the special variables $1, $2, $3, and so on. Several related variables expose information about them:
- $0 — the name of the script (or shell)
- $1, $2, ... — individual arguments
- $# — number of arguments
- $@ — all arguments as separate words (use
"$@"to preserve spacing) - $* — all arguments as a single word, joined by the first char of IFS
- $$ — the shell's PID
- $? — exit code of the last command
- $! — PID of the last background job
#!/bin/bash
echo "script: $0"
echo "args: $#"
echo "first: $1"
for arg in "$@"; do
echo "got: $arg"
done
The distinction between "$@" and "$*" matters: the former expands to each argument as a separate word, preserving spaces within arguments, while the latter flattens them into one. Always use "$@" in loops, unless you have a specific reason not to. The shift builtin drops the first positional parameter, shifting the rest down, which is useful for parsing options.
Related terms: Shell Script, bash
Discussed in:
- Chapter 14: Shell Scripting — Positional Parameters
Also defined in: Textbook of Linux