Sie können auch den printfBefehl anstelle von echo verwenden:
printf '%s\n' *
printfüberlegen ist echoin dieser Situation, dass echosie nicht den „doppelten Bindestrichs“ (Achtung --) bedeutet das Ende der Argumentliste (auf einigen Systemen, darunter Ubuntu 14.04 , die getestet es auf dem , was ich):
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
In diesem Fall können Sie mit nicht das gewünschte Ergebnis erzielen echo(da eine aufgerufene Datei -nals Option interpretiert wird und der doppelte Bindestrich nicht funktioniert, müssen Sie verwenden printf).
Beachten Sie, dass Sie im Umgang mit unbekannten Daten immer einen Formatstring wie oben verwenden sollten printf, da Sie sonst unerwartete Ergebnisse erhalten könnten (danke an @ G-Man für den Hinweis in den Kommentaren!):
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
Eine aufgerufene Datei \nwird von als Newline interpretiert printf. Um dies zu vermeiden, verwenden wir einen Formatierungsstring für printf( %s) und übergeben ihm die Namen der Dateien (wie zuvor durch Globbing erweitert).
Diese printf+ Formatierung String - Lösung kann eine Vielzahl von Dateinamen umgehen (und auch behandelt „versteckt“ Dateien, das heißt, diejenigen mit einem Start ., den gleichen wie 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
Wenn Sie dies printfunterstützen %q, können Sie auch that ( printf '%q\n' *) verwenden. Dadurch werden Leerzeichen, Zeilenumbrüche usw. ausgeblendet, wenn Ihre Dateinamen seltsame Zeichen enthalten. (Danke an @muru im Chat für den Hinweis !)
libc*sooder Ihrenld-linux*so