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 foo
und 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 bash
die 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 grep
durchfü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 $1
und 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.