~є псевдонімом, $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.