Chỉnh sửa: Đây là bản sao của /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ . Tôi không có tiếng là đóng câu hỏi này thành bản sao.
Tôi không đề cập đến ~
như trong thư mục nhà mà là thế này:
$ ls ~foo/bar
/some/mount/point/foo/bar
Tuy nhiên, nếu tôi thử nó với một điểm gắn kết khác, ví dụ:
$ mount | ag "/dev "
devfs on /dev (devfs, local, nobrowse)
$ ls /dev/stdin
/dev/stdin
$ ls ~stdin
zsh: no such user or named directory: stdin .
# bash has a similar error message:
ls: ~stdin: No such file or directory
Cái ~
gọi là gì trong bối cảnh này? Làm thế nào nó hoạt động?
Chỉnh sửa: Thêm thông tin dựa trên một số ý kiến dưới đây:
- Tôi có thể chứng thực rằng đó
foo
không phải là tên người dùng trên hệ thống của tôi. - Khi cố gắng tự động hoàn
ls -lah ~
tất, không phải tất cả các tùy chọn đều được hiển thị. tức là tôi có thểcd ~qux
, khiqux
không hiển thị trong tự động hoàn thành. Một lần nữaqux
không phải là người dùng trong hệ thống của tôi. - Nếu nó quan trọng
/some/mount/point
là một chia sẻ mạng. - Tất cả các chi tiết đề xuất một số muckery đường dẫn được đặt tên, tính năng vỏ Z của mở rộng tên đường dẫn, nhưng điều này cũng hoạt động trong bash, dường như không hỗ trợ những thứ như đường dẫn được đặt tên của vỏ Z.
/some/mount/point
chắc chắn không phải là thư mục nhà của tôi. cd ~
đưa tôi đến /Users/$username/
- trận đấu nào$HOME
zsh
dường như cũng sử dụng dấu ngã để chỉ ra các thư mục được đặt tên.
bash -c "ls ~foo/bar"
) - không có tên thư mục. Hơn nữa, ngay cả trong zsh, nếu tôi kiểm tra env
, tôi không thấy bất kỳ thư mục được đặt tên nào được thiết lập. Tôi đang dùng Mac OS và tôi cảm thấy đây là một số tính năng dành riêng cho OS X.
~foo
. Lấy chuỗi thực tế (không phải ví dụ foo
) và làm grep "actual username" /etc/passwd
. ~text
chỉ nên hoạt động cho tên người dùng đăng nhập có thể theo hướng dẫn sử dụng bash (không nhất thiết có nghĩa là nó thực sự có thể đăng nhập; trong trường hợp người dùng hệ thống, chẳng hạn như ~lp
). Trong tất cả các thử nghiệm của tôi, ~string
tương ứng với string
tên người dùng.
~foo
là thư mục nhà của người dùngfoo
. Nếu người dùng không được chỉ định, người dùng hiện tại là mặc định.