Dlaczego niewymieniony symbol wieloznaczny działa zdalnie z scp?

24

Piszę to w Bash:

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

i działa, pobierając wszystkie pliki, które tworzą symbol wieloznaczny na zdalnym serwerze. Ale dlaczego to działa? Myślałem, że Bash rozwija wyrażenia wieloznaczne w argumentach, zanim argumenty staną się widoczne dla narzędzia takiego jak scp.

dan
źródło

Odpowiedzi:

31

Jeśli nie ma pasującej nazwy pliku, wyrażenie wieloznaczne w bash rozwija się do siebie. Tak długo, jak nie tworzysz lokalnego pliku, którego nazwa pasuje user@remote:~/dir/*.xml, twoje polecenie działa bez cudzysłowu.

Uwe
źródło
9
Nie włączaj też opcji, nullglobktóra sprawiłaby, że rozwinąłaby się ona do pustego łańcucha
Eric Renouf,
1
nullglobnie powoduje rozwinięcia wzorca do pustego łańcucha; powoduje to, że całkowicie znika. Jest to różnica między scp "" .(dwoma argumentami, z których jeden jest pustym ciągiem) a scp .(jednym argumentem i niepoprawnym wywołaniem scp).
chepner