Die Syntax ist Token-Ebene, so dass die Bedeutung des Dollarzeichens hängt von dem Token in es ist der Ausdruck $(command)
ein modernes Synonym für `command`
ist, die für den Befehl Substitution steht. es bedeutet, command
laufen lassen und seine Ausgabe hier setzen.So
echo "Today is $(date). A fine day."
laufen den date
Befehl führen und dessen Ausgang in dem Argumente zu echo
. Die Klammern beziehen sich nicht auf die Syntax zum Ausführen eines Befehls in einer Untershell, obwohl sie etwas gemeinsam haben (die Befehlsersetzung wird auch in einer separaten Untershell ausgeführt).
dagegen ${variable}
ist nur ein Begriffsklärung Mechanismus, so können Sie ${var}text
sagen, wenn Sie meinen, der Inhalt der Variable var
, gefolgt von text
(im Gegensatz zu $vartext
Gegensatz was bedeutet, der Inhalt der Variable vartext
).
Die while
Schleife erwartet ein einzelnes Argument, das zu wahr oder falsch (oder tatsächlich multiple, wo der Wahrheitswert der letzten Eins untersucht wird - Jonathan Leffler für das Aufzeigen dieses auszuwerten); Wenn es falsch ist, wird die Schleife nicht mehr ausgeführt. Die for
-Schleife iteriert über eine Liste von Elementen und bindet diese wiederum jeweils an eine Schleifenvariable an. Die Syntax, auf die Sie sich beziehen, ist eine - eher generalisierte - Möglichkeit, eine Schleife über einen Bereich arithmetischer Werte auszudrücken.
Eine for
Schleife wie diese kann als while
Schleife umformuliert werden. Der Ausdruck
for ((init; check; step)); do
body
done
entspricht
init
while check; do
body
step
done
es sinnvoll, alle die Schleifensteuerung an einem Ort für die Lesbarkeit zu halten macht; Aber wie Sie sehen können, wenn es so ausgedrückt wird, macht die for
Schleife einiges mehr als die while
Schleife.
Natürlich ist diese Syntax Bash-spezifisch; klassische Bourne-Shell hat nur
for variable in token1 token2 ...; do
(Etwas elegant, können Sie die echo
im ersten Beispiel vermeiden könnte, solange Sie sicher sind, Ihr Argument Zeichenfolge enthält keine %
Formatcodes:
date +'Today is %c. A fine day.'
einen Prozess vermeiden, wo Sie eine wichtige Überlegung, lernen kann, auch wenn es in diesem isolierten Beispiel nicht viel Unterschied.)
Genau genommen erwartet ein while-Befehl eine Folge von Befehlen (nicht unbedingt eine Pipeline), und der Beendigungsstatus des letzten Befehls in der Sequenz bestimmt, ob die Schleife fortgesetzt wird oder nicht. Also: 'während ls; pwd; Datum; hallo hallo; Schlaf 1; done "ist gültig, und der Exit-Status von" date "steuert, ob die Schleife fortgesetzt wird oder nicht. Ich habe Semikolons verwendet, weil Sie keine Zeilenumbrüche in einem Kommentar formatieren können, aber Sie könnten die Befehle in mehrere Zeilen in einem Shell-Skript schreiben. –