Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between $# and ${#@}

I was looking at the following code and found that both $# and ${#@} print the same value. Could someone tell me what's the difference between the two?

# length.sh

E_NO_ARGS=65

if [ $# -eq 0 ]  # Must have command-line args to demo script.
then
  echo "Please invoke this script with one or more command-line arguments."
  exit $E_NO_ARGS
fi  

var01=abcdEFGH28ij
echo "var01 = ${var01}"
echo "Length of var01 = ${#var01}"
# Now, let's try embedding a space.
var02="abcd EFGH28ij"
echo "var02 = ${var02}"
echo "Length of var02 = ${#var02}"

echo "Number of command-line arguments passed to script = ${#@}"
echo "Number of command-line arguments passed to script = $#"

exit 0
like image 961
attaboy182 Avatar asked May 26 '15 21:05

attaboy182


1 Answers

Per manual page (3.5.3 Shell Parameter Expansion):

${#parameter}

Parameter length. The length in characters of the value of parameter is substituted. If parameter is * or @, the value substituted is the number of positional parameters. If parameter is an array name subscripted by * or @, the value substituted is the number of elements in the array.

So ${#@} is just a special case since $# is the usual way to express the number of positional parameters.

like image 128
Thomas Dickey Avatar answered Nov 04 '22 15:11

Thomas Dickey