Puoi anche usare il printfcomando, invece di echo:
printf '%s\n' *
printfè superiore a echoin questa situazione in quanto echofa non rispettare il "doppio trattino" ( --) per indicare la fine della lista degli argomenti (su alcuni sistemi, tra cui Ubuntu 14.04 che è quello che ho testato su):
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 questo caso, non è possibile ottenere il risultato desiderato con echo (poiché un file chiamato -nviene interpretato come un'opzione e il doppio trattino non funziona, quindi è necessario utilizzare printf).
Nota che dovresti sempre usare una stringa di formato come sopra quando fare con dati sconosciuti printf, poiché altrimenti potresti ricevere risultati inaspettati (grazie a @ G-Man per averlo sottolineato nei commenti!):
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 file chiamato \n viene interpretato come una nuova riga da printf. Per evitare ciò, usiamo una stringa di formattazione per printf( %s) e le passiamo i nomi dei file (espansi via globbing, come prima).
Questa printfsoluzione + stringa di formattazione può gestire un'ampia varietà di nomi di file (e tratta anche file "nascosti", ovvero quelli che iniziano con un ., lo stesso dils ):
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
Se il tuo printfsupporto %q, puoi anche usare quello ( printf '%q\n' *). Questo sfuggirà a spazi, newline, ecc. Se ci sono caratteri strani nei nomi dei file. (Grazie a @muru in chat per averlo segnalato !)
libc*sold-linux*so