glob / split
Ich nehme zuerst den Glob / Split. @ Stephanes Antwort , mit der Sie verlinkt sind, ist die Verwendung dieser Begriffe im Allgemeinen. Sie sind keine tatsächlichen Befehle oder ähnliches, sondern nur Pseudooperationen.
Das split("$test")
würde den Inhalt von "$ test" in ein "Array" von Elementen aufteilen.
Das glob(...)
würde dann darauf achten, eines dieser Elemente zu erweitern, die Shell-Globbing-Zeichen wie *
oder Bereiche enthalten [1-2]
.
Beispiel
Angenommen, unsere Zeichenfolge $test
lautet wie folgt.
$ test="afile[1-2] afile[3-5]"
Nehmen wir auch an, wir haben ein Verzeichnis mit einigen Dateien.
$ ls -1
afile1
afile2
afile3
afile4
afile5
Wenn wir nun versuchen, es ohne Anführungszeichen wiederzugeben, sollten Sie feststellen, dass unsere Zeichenfolge in Leerzeichen aufgeteilt wurde und dann alle glühenden Zeichen erweitert wurden.
$ echo $test
afile1 afile2 afile3 afile4 afile5
Wenn wir die Variable jedoch als Argument für die echo
Übergabe in Anführungszeichen setzen, erhalten wir die ursprüngliche Literalzeichenfolge.
$ echo "$test"
afile[1-2] afile[3-5]
variable Ausdehnung
Der Begriff Variablenerweiterung soll die Grundoperation abdecken, die die Shell als Teil ihrer Grundoperationen ausführt. Die Shell ist für das Parsen der Eingabe verantwortlich und führt diese Eingabe aus, sobald sie als syntaktisch korrekt erachtet wird.
In unserem vorherigen Beispiel. Als die Variable nicht $test
in echo
Anführungszeichen gesetzt wurde, forderten wir die Shell auf, diese Argumente aufzuteilen und sie dann zu globalisieren.
Als es in Anführungszeichen gesetzt wurde, deaktivierten wir dieses Feature im Wesentlichen mit den Variablen, die wir in doppelte Anführungszeichen eingeschlossen hatten.
Beispiel
Hier sind einige zusätzliche Beispiele für Globbing und Splitting.
Glob / Splitting erfolgt automatisch
$ echo file{1..3}
file1 file2 file3
$ echo file{1..3} dir{a..b}
file1 file2 file3 dira dirb
$ echo dir{z..w} file{A..D}
dirz diry dirx dirw fileA fileB fileC fileD
$ echo dir{z..w} file{A..B} fileC
dirz diry dirx dirw fileA fileB fileC
Glob / Splitting über doppelte Anführungszeichen deaktiviert
$ echo "dir{z..w} file{A..B} fileC"
dir{z..w} file{A..B} fileC
$ echo "dir{z..w} file{A..B}"
dir{z..w} file{A..B}