Ви можете також використовувати printf
команду замість відлуння:
printf '%s\n' *
printf
echo
в цій ситуації перевершує те, echo
що не поважає "подвійний тире" ( --
) для позначення кінця списку аргументів (для деяких систем, включаючи Ubuntu 14.04, на що я тестував його):
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
У цьому випадку ви не можете досягти бажаного результату echo
(оскільки викликаний файл -n
інтерпретується як опція, а подвійний тире не працює, тому потрібно використовувати printf
).
Зауважте, що ви завжди повинні використовувати рядок формату, як описано вище, при роботі з невідомими даними printf
, оскільки в іншому випадку ви можете отримати несподівані результати (дякую @ G-Man за те, що це вказало в коментарях!):
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
Файл, що викликається \n
, інтерпретується як новий рядок printf
. Щоб уникнути цього, ми використовуємо рядок форматування для printf
( %s
) і передаємо йому імена файлів (розширені через глобування, як і раніше).
Це printf
+ рядкове рішення форматування може обробляти найрізноманітніші назви файлів (а також обробляє "приховані" файли, тобто ті, що починаються з a .
, те саме, що 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
Якщо ви printf
підтримуєте %q
, ви також можете використовувати це ( printf '%q\n' *
). Це дозволить уникнути пробілів, нових рядків тощо, якщо у ваших іменах є якісь дивні символи. (Дякую @muru в чаті, що вказав на це !)
libc*so
чи свогоld-linux*so