~
là một bí danh $HOME
được cung cấp bởi một số vỏ, nhưng $HOME
phổ quát hơn. $HOME
thực sự yêu cầu shell chèn (thay thế) biến môi trường HOME ở đây. Có khá nhiều biến môi trường khác nhau có thể được thay thế, hãy thử chạy env
cho một danh sách. Lưu ý rằng ~
không phải lúc nào cũng được nhận ra khi nó không ở đầu từ. Hãy thử hai lệnh này để so sánh:
ls /~
ls /$HOME
Cái đầu tiên được truyền cho ls thực thi khi /~
nó cố gắng xem một tệp được gọi ~
trong thư mục gốc, cái thứ hai mở rộng $HOME
và //home/user
sau đó được chuyển đến ls thực thi như một đối số dòng lệnh. Tất cả các hệ thống POSIX (POSIX là tiêu chuẩn cho cách các hệ thống UNIX và Linux hoạt động) cho phép nhiều dấu gạch chéo được xử lý giống như một dấu gạch chéo //home/user
giống như nói /home/user
. ~username
là một phím tắt để báo cho shell tìm kiếm tên người dùng trong tệp passwd và trả về thư mục chính của họ. Không có biến môi trường tương đương. Tất cả các thay thế này được thực hiện bởi shell và được hỗ trợ bởi hầu hết trong số chúng, nhưng chỉ các biến môi trường như $HOME
được đảm bảo sẽ được hỗ trợ bởi tất cả các shell. Cũng thế,cd
thực sự là một lệnh tích hợp. Đó là một lệnh đặc biệt bảo chính shell thay đổi thư mục. Nó không giống như các trình dựng sẵn shell khác có thể được triển khai như một thực thi riêng biệt giống như echo
vì nó được sử dụng để thay đổi một thuộc tính cơ bản của quy trình shell. echo
chỉ đơn thuần là một vỏ được tích hợp sẵn vì lý do hiệu năng, nhưng trong những ngày tốt đẹp của UNIX, chỉ có sẵn khi nó có thể thực thi được /bin/echo
.