Изменить: Это дубликат /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. Если пользователь не указан, по умолчанию используется текущий пользователь.