Sunting: Ini adalah duplikat dari /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ . Saya tidak memiliki reputasi untuk menutup pertanyaan ini sebagai duplikat.
Saya tidak merujuk ~seperti pada direktori home melainkan ini:
$ ls ~foo/bar
/some/mount/point/foo/bar
Namun jika saya mencoba dengan titik pemasangan yang berbeda, misalnya:
$ 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
Apa yang ~disebut dalam konteks ini? Bagaimana cara kerjanya?
Sunting: Informasi lebih lanjut berdasarkan beberapa komentar di bawah:
- Saya dapat membuktikan bahwa
fooitu bukan nama pengguna di sistem saya. - Ketika mencoba untuk melengkapi otomatis,
ls -lah ~tidak semua opsi ditampilkan. yaitu saya bisacd ~qux, ketikaquxtidak muncul di autocomplete. Sekali lagiquxbukan pengguna di sistem saya. - Jika yang penting
/some/mount/pointadalah berbagi jaringan. - Semua perinciannya menyarankan beberapa nama path muckery, fitur shell Z dari perluasan pathname, tetapi ini juga bekerja di bash, yang tampaknya tidak mendukung hal-hal seperti path bernama shell Z.
/some/mount/pointjelas bukan direktori home saya. cd ~membawaku ke /Users/$username/- pertandingan yang mana$HOME
zshTampaknya juga menggunakan tilde untuk menunjukkan direktori bernama.
bash -c "ls ~foo/bar") - yang tidak memiliki nama direktori. Lebih jauh lagi bahkan di dalam zsh, jika saya memeriksanya env, saya tidak melihat direktori bernama apa pun disiapkan. Saya menggunakan Mac OS dan saya merasa ini adalah beberapa fitur khusus untuk OS X.
~foo. Ambil string yang sebenarnya (bukan contoh foo) dan lakukan grep "actual username" /etc/passwd. ~textharus bekerja hanya untuk nama pengguna login yang mungkin sesuai dengan manual bash (tidak selalu berarti ia benar-benar dapat login; dalam kasus pengguna sistem seperti ~lp, misalnya). Dalam semua pengujian saya, ~stringberkorespondensi dengan stringmenjadi nama pengguna.
~fooadalah direktori home penggunafoo. Jika pengguna tidak ditentukan, pengguna saat ini adalah default.