Shell, Bash, Linux; warum ein Semikolon nach der Variablendeklaration und was bewirkt es?

Shell, Bash, Linux; warum ein Semikolon nach der Variablendeklaration und was bewirkt es?

Hier ist die Zeile.

    variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

Ich verstehe die Zeile vor dem Semikolon, aber ich verstehe nicht, wie diese Zeile nach dem Semikolon funktioniert. Ist es

  after the command(variable assignment) 
  and then run the command after semi-colon?

Dann wäre die folgende Zeile dasselbe?

    variable=`ls -A $1 | grep '[abc]' | ls -1 $1`

Danke,

Antwort1

das Semikolon trennt lediglich zwei aufeinanderfolgende Befehle. Die Manpage ( man bash) sagt (im KapitelListen):

Durch ein ; getrennte Befehle werden nacheinander ausgeführt.

zB Folgendes: Füllen Sie zuerst den Befehl aus foound führen Sie dann den Befehl aus bar.

foo; bar

Um Ihr Beispiel richtig zu analysieren, müssen Sie zunächst ein hierarchisches Modell davon erstellen:

 variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

kann in (etwas innerhalb der Backticks) und (das Ding innerhalb der Backticks) unterteilt werden .variable=...ls -A $1 | grep '[abc]'; ls -1 $1

Backticks werden verwendet, um die Ausgabe eines Befehls abzurufen (sieheBefehlsersetzungin ); Sie weisen also der Variablen man bashdie Ausgabe des Ganzen zu .ls -A $1 | grep '[abc]'; ls -1 $1

Die Ausgabe des ersetzten Befehls ist die Liste der Dateien, die einem bestimmten Muster entsprechen (einschließlich versteckter Hildes), angehängt mit der vollständigen Liste der Dateien (wofür auch immer das verwendet werden kann ...).

Antwort2

Nein, sie sind nicht gleich. Letzteres würde eine Weiterleitung grepdurchführen ls(was mit ziemlicher Sicherheit nicht das ist, was Sie wollen). Das Semikolon trennt einfach zwei verschiedene Befehle.

Erstens möchten Sie wahrscheinlich mit der Nutzung derneuer, flexibler $( ... )anstelle des Backticks.

Nehmen Sie dies als Beispiel:

$ var=`echo foo; echo bar`
$ echo "$var"
foo
bar

Sie können sich die Backticks (oder $( ... )) so vorstellen, als würden sie das zurückgeben, was während der Ausführung des dazwischen liegenden Codes auf der Standardausgabe gedruckt wurde.

In Ihrem Fall wird einmal die Ausgabe von betrachtet ls -A $1und in der Ausgabe nach einer Zeile gesucht, die a, b, oder enthält c, und dann wird eine einspaltige Ausgabe von ausgegeben ls -1 $1. Im Allgemeinen ist das keine gute Idee,Sie sollten ls nicht analysieren.

verwandte Informationen