Mengapa wildcard yang tidak dikutip bekerja dari jarak jauh dengan scp?

24

Saya mengetik ini di Bash:

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

dan itu berhasil, mendapatkan semua file yang membuat wildcard di server jauh. Tetapi mengapa ini bekerja? Saya pikir Bash memperluas ekspresi wildcard dalam argumen sebelum argumen menjadi terlihat oleh alat seperti scp.

dan
sumber

Jawaban:

31

Jika tidak ada nama file yang cocok, maka ekspresi wildcard di bash meluas ke dirinya sendiri. Jadi, selama Anda tidak membuat file apa pun secara lokal yang namanya cocok user@remote:~/dir/*.xml, perintah Anda berfungsi tanpa mengutip.

Uwe
sumber
9
Dan juga tidak memungkinkan nullglobyang mana akan diperluas ke string kosong
Eric Renouf
1
nullglobtidak menyebabkan pola meluas ke string kosong; itu menyebabkannya hilang sama sekali. Ini perbedaan antara scp "" .(dua argumen, salah satunya adalah string kosong) dan scp .(argumen tunggal dan panggilan tidak valid ke scp).
chepner