Эта bash
функция называется расширением Тильды . Ссылаясь на man bash
:
Если слово начинается с символа кавычки без кавычек (`~ '), все символы, предшествующие первой косой черте без кавычек (или все символы, если нет косой черты без кавычек), считаются префиксом тильды. Если ни один из символов в префиксе тильды не заключен в кавычки, символы в префиксе тильды, следующие за тильдой, рассматриваются как возможное имя для входа. Если это имя входа является пустой строкой, тильда заменяется значением параметра оболочки HOME. Если HOME не установлен, вместо него подставляется домашний каталог пользователя, выполняющего оболочку.
Чтобы раскрытие работало, символ тильды ~
должен быть заключен в кавычки, иначе символ воспринимается буквально и cd
завершается неудачей, если ~
в текущем каталоге нет имени с именем . Смотрите этот интенсивный ответ для объяснения цитирования в bash
. Если вам нужно процитировать часть пути, вы можете:
цитируйте как минимум символы, которые нужно заключать в одинарные кавычки, например
~/dir' 'with' 'spaces/
или
~/'dir with spaces/'
цитируйте как минимум символы, которые нужно заключить в двойные кавычки, например
~/dir" "with" "spaces/
или
~/"dir with spaces/"
цитируйте только те символы, которые нужно заключить в кавычки, например
~/dir\ with\ spaces/
Расширение Tilde имеет еще несколько интересных функций, например:
~+
расширяется до значения PWD
, т.е. текущего рабочего каталога
~-
расширяется до значения OLDPWD
, т.е. предыдущего рабочего каталога
~john
расширяется до домашнего каталога, связанного с логином «Джон»
cd
попали в каталог с именем~
?