Vous pouvez également utiliser la printf
commande, au lieu de l'écho:
printf '%s\n' *
printf
est supérieur à echo
dans cette situation en ce queecho
il ne respecte pas le "double tiret" ( --
) pour signifier la fin de la liste des arguments (sur certains systèmes, dont Ubuntu 14.04 sur lequel je l'ai testé):
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
Dans ce cas, vous ne pouvez pas obtenir le résultat souhaité avec echo
(car un fichier appelé -n
est interprété comme une option et le double tiret ne fonctionne pas, vous devez donc utiliser printf
).
Notez que vous devez toujours utiliser une chaîne de format comme celle ci-dessus lorsque vous traitez avec des données inconnues printf
, car sinon vous pourriez recevoir des résultats inattendus (merci à @ G-Man de l'avoir signalé dans les commentaires!):
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
Un fichier appelé \n
est interprété comme une nouvelle ligne par printf
. Pour éviter cela, nous utilisons une chaîne de formatage pour printf
( %s
) et lui passons les noms des fichiers (développés via globbing, comme précédemment).
Cette printf
solution de chaîne de formatage + peut gérer une grande variété de noms de fichiers (et traite également les fichiers "cachés", c'est-à-dire ceux commençant par un.
, les mêmes que 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
Si vos printf
supports %q
, vous pouvez également utiliser cela ( printf '%q\n' *
). Cela échappera aux espaces, aux nouvelles lignes, etc. s'il y a des caractères étranges dans vos noms de fichiers. (Merci à @muru dans le chat pour l'avoir signalé !)
libc*so
ld-linux*so