Редагувати: це дублікат /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ . У мене немає репутації закривати це питання як дублікат.
Я не маю на увазі, ~як у домашньому каталозі, а про це:
$ ls ~foo/bar
/some/mount/point/foo/bar
Однак якщо я спробую це з іншою точкою кріплення, наприклад:
$ 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
Як ~називається в цьому контексті? Як це працює?
Редагувати: Більше інформації на основі деяких коментарів нижче:
- Я можу засвідчити, що
fooце не ім’я користувача в моїй системі. - При спробі автозаповнення
ls -lah ~не всі параметри відображаються. тобто я вміюcd ~qux, колиquxне з’являється в автозаповнення. Зновуquxне є користувачем у моїй системі. - Якщо це важливо
/some/mount/point, це мережа. - Всі подробиці пропонують деякий названий макетний шлях, функцію Z оболонки розширення імені шляху, але це працює і в bash, який, мабуть, не підтримує такі речі, як названі шляхи оболонки Z.
/some/mount/pointточно не мій домашній каталог. cd ~веде мене на/Users/$username/$HOME
zshЗдається, також використовується тильда для позначення названих каталогів.
bash -c "ls ~foo/bar") - який не має назви каталогів. Крім того, навіть в межах zsh, якщо я перевіряю env, я не бачу створених жодних названих каталогів. Я перебуваю на Mac OS, і я вважаю, що це особливість, характерна для OS X.
~foo. Візьміть власне рядок (не приклад foo) і зробіть grep "actual username" /etc/passwd. ~textповинні працювати лише для можливих імен користувачів для входу відповідно до посібника з bash (не обов'язково означає, що він фактично здатний увійти; наприклад ~lp, для системних користувачів , наприклад). У всіх моїх тестах, ~stringвідповідність stringімені користувача.
~foo- домашній каталог користувачаfoo. Якщо користувача не вказано, типовим користувачем є типовий користувач.