$1 bedeutet für ....? ohne Eingabe?

$1 bedeutet für ....? ohne Eingabe?

Ich habe ein Programm, das mit dieser Zeile beginnt. Was bedeutet das? Ich habe wegen des Dollarzeichens Probleme beim Googeln.

Wie kommt $1 ohne Parameter? Und was bedeutet -d hier?

  if [ -d $1 ]; then

Und kommt das Semikolon auch, wenn die if-Bedingung gar nicht beginnt? Ich dachte, das Semikolon kommt nur am Ende einer Anweisung oder am Ende einer Bedingung, wie

   if () {  };

Antwort1

Das Semikolon ist erforderlich, da ohne Angabe, wo dieser Kontext endet (durch ein Semikolon, eine neue Zeile usw.), ifnicht bekannt ist, wo die Bedingung endet und der Bedingungsblock beginnt. Vergleichen Sie:

$ if echo then foo then; then :; fi
then foo then
$ if echo then; then :; fi
then

-dist ein Test, um zu prüfen, ob das nächste Argument ein Verzeichnis ist. Von help test(weil testes gleichwertig ist mit [):

-d FILE        True if file is a directory.

Zum Beispiel:

$ mkdir foo
$ if [ -d foo ]; then
>     echo foo is a dir
> fi
foo is a dir

$1ist das erste Argument, das an Ihr Programm übergeben wird. Beispiel:

$ cat > script << 'EOF'
> #!/bin/sh  
> echo "$1"
> EOF
$ chmod +x script
$ ./script foo
foo

Nebenbei bemerkt sollten Sie $1hier zitieren, weil es sich sonst auf mehrere Argumente ausweiten kann, was zu einem Syntaxfehler führt [:

$ dir="foo bar"
$ [ -d $dir ]
sh: 2: [: foo: unexpected operator
$ [ -d "$dir" ]
$ 

verwandte Informationen