Rechnungstore
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
Hallo zusammen, kann jemand erklären, welchen Zweck genau in folgendem Befehl das Komma hinter der geöffneten geschweiften Klammer erfüllt? | ls -l /etc/apt/sources.list{,.d/*.list}
|
Ohne Komma funktioniert es nicht, mit Komma erhält man die Ausgabe von ls -l sowohl von /etc/apt/sources.list als auch von den Dateien in /etc/apt/sources.list.d
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
{,.d/*.list} matcht entweder auf einen leeren String oder .d/*.list und das Komma ist der Trenner zwischen den möglichen Alternativen, auf die gemacht werden soll - vgl. z.B. https://tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm:
{ } (curly brackets) terms are separated by commas and each term must be the name of something or a wildcard. This wildcard will copy anything that matches either wildcard(s), or exact name(s) (an “or” relationship, one or the other).
|
Rechnungstore
(Themenstarter)
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
danke für die Antwort. Aber müsste dann nicht der Befehl ohne das Komma zumindest auf den Inhalt von /etc/apt/sources.list.d matchen? Das passiert seltsamerweise nicht: Wenn man das Komma weg lässt passiert folgendes: | ls: Zugriff auf '/etc/apt/sources.list{.d/*.list}' nicht möglich: Datei oder Verzeichnis nicht gefunden
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Ohne Komma innerhalb der geschweiften Klammern macht die Shell keine Brace Expansion und sucht daher nach einem Pfad, der die geschweiften Klammern enthält, weil die so für sich keinen Ausdruck darstellen (/etc/apt/sources.list{.d/*.list}).
|
Rechnungstore
(Themenstarter)
Anmeldungsdatum: 18. Februar 2011
Beiträge: 164
|
seahawk1986 schrieb: Ohne Komma innerhalb der geschweiften Klammern macht die Shell keine Brace Expansion und sucht daher nach einem Pfad, der die geschweiften Klammern enthält, weil die so für sich keinen Ausdruck darstellen (/etc/apt/sources.list{.d/*.list}).
Ah, verstehe, danke! Jetzt ergibt es Sinn. Thread gelöst.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12823
|
seahawk1986 schrieb: {,.d/*.list} matcht entweder auf einen leeren String oder .d/*.list und das Komma ist der Trenner zwischen den möglichen Alternativen, auf die gemacht werden soll
Bei den geschweiften Klammern geht aber nicht unbedingt ums Matchen sondern um die Generierung von Ausdrücken. Das Matchen ist ein zweiter Schritt, der aber nicht zwingend folgt: 1
2
3
4
5
6
7
8
9
10
11
12 | $ ls -1
$ echo a{,b,c,*}d
ad abd acd a*d
$ echo a{,b,c,\*}d
ad abd acd a*d
$ touch aXYZd
$ ls -1
aXYZd
$ echo a{,b,c,*}d
ad abd acd aXYZd
$ echo a{,b,c,\*}d
ad abd acd a*d
|
Und dann gibt es auch noch die Form mit "..": | $ echo a{b..d}e
abe ace ade
$ echo a{00..05}e
a00e a01e a02e a03e a04e a05e
$ echo a{0..10}e
a0e a1e a2e a3e a4e a5e a6e a7e a8e a9e a10e
|
|