Раскрытие тильды
Если слово начинается с некавыченного символа тильды (‘~’), все символы до первой некавыченной косой черты (или все символы, если некавыченная косая черта отсутствует) считаются префиксом тильды. Если ни один из символов в префиксе тильды не заключён в кавычки, символы префикса тильды после тильды рассматриваются как возможное имя пользователя. Если это имя пользователя — пустая строка, тильда заменяется значением переменной оболочки HOME. Если HOME не задана, тильда раскрывается в домашний каталог пользователя, выполняющего оболочку. В противном случае префикс тильды заменяется домашним каталогом, связанным с указанным именем пользователя.
Если префикс тильды — ‘~+’, его заменяет значение переменной оболочки PWD. Если префикс тильды — ‘~-’, оболочка подставляет значение переменной оболочки OLDPWD, если она задана.
Если следующие за тильдой символы в префиксе тильды состоят из числа N, перед которым может стоять ‘+’ или ‘-’, префикс тильды заменяется соответствующим элементом стека каталогов — так, как его отобразила бы встроенная команда dirs, вызванная с символами после тильды в префиксе тильды в качестве аргумента (см. Стек каталогов). Если префикс тильды без самой тильды состоит из числа без начального ‘+’ или ‘-’, при раскрытии тильды подразумевается ‘+’.
Результаты раскрытия тильды рассматриваются так, как если бы они были заключены в кавычки, поэтому подстановка не приводит к разбиению слов и раскрытию имён файлов.
Если имя пользователя недействительно или раскрытие тильды завершается неудачей, префикс тильды остаётся без изменений.
Bash проверяет каждое присваивание переменной на наличие некавыченных префиксов тильды, непосредственно следующих за ‘:’ или первым ‘=’, и в таких случаях выполняет раскрытие тильды. Поэтому при присваивании значений PATH, MAILPATH и CDPATH можно использовать имена файлов с тильдами, и оболочка присвоит раскрытое значение.
В следующей таблице показано, как Bash обрабатывает некавыченные префиксы тильды:
~Значение
$HOME.~/foo-
$HOME/foo
~fred/foo-
Каталог или файл
fooв домашнем каталоге пользователяfred. ~+/foo-
$PWD/foo
~-/foo-
${OLDPWD-'~-'}/foo
~N-
Строка, которая была бы отображена командой ‘dirs +N’.
~+N-
Строка, которая была бы отображена командой ‘dirs +N’.
~-NСтрока, которая была бы отображена командой ‘dirs -N’.
Bash также выполняет раскрытие тильды для слов, удовлетворяющих условиям присваивания переменных (см. Параметры оболочки), когда они используются в качестве аргументов простых команд. В режиме POSIX Bash этого не делает, за исключением перечисленных выше команд объявления.
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html