2010-08-27 2 views
7

Я вижу

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

... 

} 

Что именно это сравнение с помощью $ #, как это делает там?

ответ

7

$# представляет количество аргументов командной строки передано в скрипт.

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 

При использовании внутри функции (как в вашем случае) представляет количество аргументов, переданных функции:

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 
3

$# - количество аргументов, переданных скрипту. См. Специальные параметры подраздел ПАРАМЕТРЫ раздел справочной страницы bash(1) для полного списка.

2

$# = Количество аргументов, переданных функции.

в вашем коде функция вернет 0, если функция не вызывается с одного параметра не менее.