Обратите внимание, что POSIX определяет семантику расширения тильды:
2.6.1 Расширение тильды
«Префикс тильды» состоит из не заключенных в кавычки <tilde>
символ в начале слова, за которым следуют все символы, предшествующие первой без кавычки <slash>
в слове, или все символы в слове, если <slash>
отсутствует.В назначении (см. Назначение переменной XBD) можно использовать несколько префиксов тильды: в начале слова (то есть после <equals-sign>
присвоения), после любого без кавычек <colon>
или обоих.Префикс тильды в назначении заканчивается первым без кавычек <colon>
или <slash>
.Если ни один из символов в префиксе тильды не заключен в кавычки, символы в префиксе тильды, следующие за <tilde>
, рассматриваются как возможное имя для входа в систему из пользовательской базы данных.Переносимое имя для входа в систему не может содержать символы вне набора, указанного в описании переменной среды LOGNAME в других переменных среды XBD.Если логин имеет нулевое значение (т. Е. Префикс тильды содержит только тильду), префикс тильды заменяется значением переменной HOME
.Если HOME
не установлено, результаты не уточняются.В противном случае префикс тильды должен быть заменен путем к исходному рабочему каталогу, связанному с именем входа в систему, полученным с использованием функции getpwnam()
, как определено в томе «Системные интерфейсы» POSIX.1-2008.Если система не распознает имя для входа, результаты не определены.
Обратите внимание, в частности, что если мое имя пользователя - me
, результаты cd ~
и cd ~me
могут не соответствоватьтак же!В частности, переменная окружения HOME
может иметь значение, отличное от значения, возвращаемого getpwnam()
.Я использую эту технику (более 25) лет, чтобы установить HOME
там, где я хочу, и несколько программ, которые не распознают разницу между cd ~
и cd ~me
, являются одними (из многих) Изгнание моей жизни.