Anda juga dapat menggunakan printf
perintah, alih-alih gema:
printf '%s\n' *
printf
lebih unggul echo
dalam situasi ini bahwa echo
tidak 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 -n
ditafsirkan 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 \n
ditafsirkan 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).
printf
Solusi 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 printf
dukungan %q
Anda, 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*so
atau Andald-linux*so