Sie können auch den printf
Befehl anstelle von echo verwenden:
printf '%s\n' *
printf
überlegen ist echo
in dieser Situation, dass echo
sie 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 -n
als 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 \n
wird 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 printf
unterstü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*so
oder Ihrenld-linux*so