There are some variables which are set internally by the shell and which are available to the user:
Name Description
$1 - $9 these variables are the positional parameters. $0 the name of the command currently being executed. $# the number of positional arguments given to this invocation of the shell. $? the exit status of the last command executed is given as a decimal string. When a command completes successfully, it returns the exit status of 0 (zero), otherwise it returns a non-zero exit status. $$ the process number of this shell - useful for including in filenames, to make them unique. $! the process id of the last command run in the background. $- the current options supplied to this invocation of the shell. $* a string containing all the arguments to the shell, starting at $1. $@ same as above, except when quoted.
$* and $@ when unquoted are identical and expand into the arguments.
"$*" is a single word, comprising all the arguments to the shell, joined together with spaces. For example '1 2' 3 becomes "1 2 3".
"$@" is identical to the arguments received by the shell, the resulting list of words completely match what was given to the shell. For example '1 2' 3 becomes "1 2" "3"