Anda juga dapat menggunakan printfperintah, alih-alih gema:
printf '%s\n' *
printflebih unggul echodalam situasi ini bahwa echotidak tidak menghormati "dash ganda" ( --) untuk menandakan akhir dari daftar argumen (pada beberapa sistem, termasuk Ubuntu 14.04 yang merupakan apa yang saya diuji pada):
llama@llama:~$ mkdir -p Misc/unix210948
llama@llama:~$ cd !$
cd Misc/unix210948
llama@llama:~/Misc/unix210948$ touch -- -n
llama@llama:~/Misc/unix210948$ ls
-n
llama@llama:~/Misc/unix210948$ echo *
llama@llama:~/Misc/unix210948$ echo -- *
-- -n
llama@llama:~/Misc/unix210948$ printf '%s\n' *
-n
Dalam hal ini, Anda tidak dapat mencapai hasil yang diinginkan echo(karena file yang dipanggil -nditafsirkan sebagai opsi, dan dasbor ganda tidak berfungsi, jadi Anda harus menggunakan printf).
Perhatikan bahwa Anda harus selalu menggunakan string format seperti di atas ketika berhadapan dengan data yang tidak dikenal printf, karena jika tidak, Anda dapat menerima hasil yang tidak terduga (terima kasih kepada @ G-Man karena menunjukkan ini di komentar!):
llama@llama:~/Misc/unix210948$ rm ./-n
llama@llama:~/Misc/unix210948$ touch '\n'
llama@llama:~/Misc/unix210948$ ls
\n
llama@llama:~/Misc/unix210948$ printf -- *
llama@llama:~/Misc/unix210948$ printf '%s\n' *
\n
File yang dipanggil \nditafsirkan sebagai baris baru oleh printf. Untuk menghindari ini, kami menggunakan string pemformatan untuk printf(%s ) dan memberikannya nama-nama file (diperluas melalui globbing, seperti sebelumnya).
printfSolusi string pemformatan + ini dapat menangani berbagai nama file (dan juga memperlakukan file "tersembunyi", yaitu, yang dimulai dengan a ., sama dengan ls):
llama@llama:~/Misc/unix210948$ rm ./*
zsh: sure you want to delete all the files in /home/llama/Misc/unix210948/. [yn]? y
llama@llama:~/Misc/unix210948$ touch -- '-n' '\n' 'name with spaces' '.hidden'
llama@llama:~/Misc/unix210948$ ls
-n \n name with spaces
llama@llama:~/Misc/unix210948$ printf '%s\n' *
-n
\n
name with spaces
Jika printfdukungan %qAnda, Anda juga dapat menggunakannya ( printf '%q\n' *). Ini akan keluar dari spasi, baris baru, dll. Jika ada karakter aneh di nama file Anda. (Terima kasih kepada @muru dalam obrolan karena menunjukkan ini !)
libc*soatau Andald-linux*so