Почему подстановочный знак без кавычек работает удаленно с scp?

24

Я набираю это в Bash:

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

и это работает, получая все файлы, которые делают подстановочный знак на удаленном сервере. Но почему это работает? Я думал, что Bash расширяет подстановочные выражения в аргументах, прежде чем аргументы станут видимыми для подобного инструмента scp.

Дан
источник

Ответы:

31

Если не найдено подходящего имени файла, то подстановочное выражение в bash расширяется до самого себя. Итак, до тех пор, пока вы не создадите файл локально, имя которого совпадает user@remote:~/dir/*.xml, ваша команда работает без кавычек.

Uwe
источник
9
А также не включайте, nullglobчтобы это расширилось до пустой строки
Эрик Ренуф
1
nullglobне вызывает расширения шаблона до пустой строки; это заставляет его исчезнуть совсем. Это разница между scp "" .(два аргумента, один из которых является пустой строкой) и scp .(один аргумент и недопустимый вызов scp).
Чепнер