También puede usar el printf
comando, en lugar de echo:
printf '%s\n' *
printf
es superior a la echo
de esta situación en la que echo
no no respetar la "doble guión" ( --
) para indicar el final de la lista de argumentos (en algunos sistemas, incluyendo Ubuntu 14.04 que es lo que he comprobado en):
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
En este caso, no puede lograr el resultado deseado con echo
(ya que un archivo llamado -n
se interpreta como una opción, y el doble guión no funciona, por lo que debe usarlo printf
).
Tenga en cuenta que siempre debe usar una cadena de formato como la anterior al tratar con datos desconocidos printf
, ya que de lo contrario podría recibir resultados inesperados (¡gracias a @ G-Man por señalar esto en los comentarios!):
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 archivo llamado \n
se interpreta como una nueva línea por printf
. Para evitar esto, usamos una cadena de formato para printf
( %s
) y le pasamos los nombres de los archivos (expandidos mediante globbing, como antes).
Esta printf
solución de cadena de formato + puede manejar una amplia variedad de nombres de archivo (y también trata archivos "ocultos", es decir, aquellos que comienzan con a .
, lo mismo 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 es printf
compatible %q
, también puede usar eso ( printf '%q\n' *
). Esto escapará a espacios, nuevas líneas, etc. si hay caracteres extraños en sus nombres de archivo. (¡Gracias a @muru en el chat por señalar esto !)
libc*so
ld-linux*so