~
є псевдонімом, $HOME
наданим рядом снарядів, але $HOME
є більш універсальним. $HOME
насправді просить оболонку вставити (замінити) змінну навколишнього середовища HOME. Існує досить багато різних змінних навколишнього середовища, які можна замінити, спробуйте запустити env
список. Зауважте, що ~
не завжди розпізнається, коли це не на початку слова. Спробуйте ці дві команди для порівняння:
ls /~
ls /$HOME
Перший передається виконуваному файлу ls, /~
який потім намагається подивитися на файл, названий ~
у кореневій директорії, другий розширюється $HOME
та стає, //home/user
який потім передається виконуваному файлу ls як аргумент командного рядка. Усі системи POSIX (POSIX - стандарт для роботи систем UNIX та Linux) дозволяють обробляти декілька косої риски так само, як одна коса риса, так що //home/user
це те саме, що говорити /home/user
. ~username
- це ярлик для того, щоб сказати оболонці шукати ім'я користувача у файлі passwd та повертати їх домашній каталог. Не існує еквівалентної змінної середовища. Усі ці підстановки виконуються оболонкою і підтримуються більшістю з них, але $HOME
гарантовано, що всі оболонки підтримуються лише такі змінні середовища, як , наприклад ,. Також,cd
насправді вбудована команда. Це спеціальна директива, яка говорить самому оболонці змінювати каталоги. Це не так, як інші вбудовані оболонки, які можна реалізувати як окремий виконуваний файл echo
, тому що він використовується для зміни основного атрибута процесу оболонки. echo
є просто вбудованою оболонкою з міркувань продуктивності, але в старі добрі часи UNIX був доступний лише як власний виконуваний файл /bin/echo
.