What does $# mean in shell?
You can always check the man page of your shell. man bash
says:
Special Parameters
# Expands to the number of positional parameters in decimal.
Therefore a shell script can check how many parameters are given with code like this:
if [ "$#" -eq 0 ]; then
echo "you did not pass any parameter"
fi
Actually,
`$` refer to `value of` and
`#` refer to `number of / total number`
So together
`$#` refer to `The value of the total number of command line arguments passed.`
Thus, you can use $#
to check the number of arguments/parameters passed like you did and handle any unexpected situations.
Similarly, we have
`$1` for `value of 1st argument passed`
`$2` for 'value of 2nd argument passed`
etc.
That is
the number of parameters with which the script has been called
the number of parameters which have been set within the script by
set -- foo bar
(when used within a function) the number of parameters with which a function has been called (
set
would work there, too).
This is explained in the bash man page in the block "Special Parameters".