Расширение тильды
Если слово начинается с необрамлённого символа тильды (‘~’), все символы до первого необрамлённого слэша (или все символы, если слэша нет) считаются префиксом тильды. Если ни один из символов в префиксе тильды не обрамлён кавычками, символы в префиксе тильды после тильды рассматриваются как возможный имя пользователя. Если это имя пользователя является пустой строкой, тильда заменяется значением переменной HOME оболочки. Если HOME не задана, вместо неё подставляется домашний каталог пользователя, выполняющего оболочку. В противном случае префикс тильды заменяется домашним каталогом, связанным с указанным именем пользователя.
Если префикс тильды равен ‘~+’, значение переменной оболочки PWD заменяет префикс тильды. Если префикс тильды равен ‘~-’, значение переменной оболочки OLDPWD, если она задана, подставляется.
Если символы, следующие за тильдой в префиксе тильды, состоят из числа N, необязательно с префиксом ‘+’ или ‘-’, префикс тильды заменяется соответствующим элементом из стека каталогов, так как он отображается встроенной командой dirs с символами, следующими за тильдой в префиксе тильды, как аргументом (см. Стек каталогов). Если префикс тильды, без тильды, состоит из числа без ведущих ‘+’ или ‘-’, предполагается ‘+’.
Если имя пользователя неверно или расширение тильды не выполняется, слово остаётся без изменений.
Каждое присваивание переменной проверяется на наличие необрамлённых префиксов тильды непосредственно после ‘:’ или первого ‘=’. В этих случаях также выполняется расширение тильды. Следовательно, можно использовать имена файлов с тильдами в присваиваниях переменным 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 также выполняет расширение тильды для слов, удовлетворяющих условиям присваивания переменных (см. Параметры оболочки), когда они появляются в качестве аргументов простых команд. Bash не делает этого, за исключением команд объявления, перечисленных выше, при работе в режиме POSIX.
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