Warum funktioniert ein nicht zitierter Platzhalter mit scp aus der Ferne?

24

Ich schreibe das in Bash:

scp user@remote:~/dir/*.xml .

Und es funktioniert, indem alle Dateien abgerufen werden, aus denen der Platzhalter auf dem Remote-Server besteht. Aber warum funktioniert das? Ich dachte, dass Bash Platzhalterausdrücke in Argumenten erweitert, bevor die Argumente für ein Tool wie sichtbar werden scp.

Dan
quelle

Antworten:

31

Wenn es keinen passenden Dateinamen gibt, wird ein Platzhalterausdruck in der Bash zu sich selbst erweitert. Solange Sie also keine Datei lokal erstellen, deren Name übereinstimmt user@remote:~/dir/*.xml, funktioniert Ihr Befehl ohne Anführungszeichen.

Uwe
quelle
9
Und auch nicht aktivieren, nullglobwas hätte es zu leeren Zeichenfolge erweitern
Eric Renouf
1
nullglobBewirkt nicht, dass das Muster auf die leere Zeichenfolge erweitert wird. es bewirkt, dass es vollständig verschwindet. Dies ist der Unterschied zwischen scp "" .(zwei Argumenten, von denen eines die leere Zeichenfolge ist) und scp .(einem einzelnen Argument und einem ungültigen Aufruf von scp).
Chepner