Spec-Zone.ru › Bash

Раскрытие тильды

​ ​

Если слово начинается с некавыченного символа тильды (‘~’), все символы до первой некавыченной косой черты (или все символы, если некавыченная косая черта отсутствует) считаются префиксом тильды. Если ни один из символов в префиксе тильды не заключён в кавычки, символы префикса тильды после тильды рассматриваются как возможное имя пользователя. Если это имя пользователя — пустая строка, тильда заменяется значением переменной оболочки 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API