2010-08-27 11 views
7

Ich sehe

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

... 

} 

Was es mithilfe $ # genau vergleicht, wie sie es tut?

Antwort

7

$# repräsentiert die Anzahl der Befehlszeilenargumente, die an das Skript übergeben werden.

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 

Wenn innerhalb einer Funktion (wie in Ihrem Fall) verwendet es stellt die Anzahl der Argumente an die Funktion übergeben:

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

$# ist die Anzahl der Argumente, die an das Skript übergeben werden. Siehe die Spezialparameter Unterabschnitt der PARAMETERS Abschnitt der bash(1) Man-Seite für die vollständige Liste.

2

$# = Anzahl der an die Funktion übergebenen Argumente.

In Ihrem Code gibt die Funktion 0 zurück, wenn die Funktion nicht mit einem Parameter mindestens aufgerufen wird.