7

I see

foo() {
if [[ $# -lt 1 ]]; then
    return 0 
fi

...

}

What exactly is it comparing by using $# as it does there?

fedorqui
  • 275,237
  • 103
  • 548
  • 598
MattUebel
  • 2,737
  • 4
  • 21
  • 22

3 Answers3

7

$# represents the number of command line arguments passed to the script.

sh-3.2$ cat a.sh
echo $#  #print the number of cmd line args.
sh-3.2$ ./a.sh
0
sh-3.2$ ./a.sh foo
1
sh-3.2$ ./a.sh foo bar
2
sh-3.2$ ./a.sh foo bar baz
3

When used inside a function(as in your case) it represents the number of arguments passed to the function:

sh-3.2$ cat a.sh
foo() {
        echo $# #print the number of arguments passed to the function.
}
foo 1
foo 1 2
foo 1 2 3

sh-3.2$ ./a.sh
1
2
3
codaddict
  • 445,704
  • 82
  • 492
  • 529
3

$# is the number of arguments passed to the script. See the Special Parameters subsection of the PARAMETERS section of the bash(1) man page for the full list.

Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358
2

$# = Number of arguments passed to the function.

in your code, the function will return 0 if the function is not called with one parameter at least.

Youssef
  • 1,310
  • 1
  • 14
  • 24