Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Страницы справочного руководства ОС UNIX на русском : man ksh(1), часть третья


Информационный Канал Subscribe.Ru

Выпуск 144

man ksh(1), часть третья

Уважаемые подписчики!

Это третий выпуск из серии, посвященной командному интерпретатору ksh. Перевод, по сложившейся традиции, сделан по справочному руководству ОС Solaris 8.

Поскольку по правилам оформления рассылок в них не должно быть "висящих" гиперссылок href, не все перекрестные ссылки в выпусках, посвященных ksh, оформлены как гиперссылки. Когда перевод будет закончен, вы сможете скачать с сайта рассылки всю страницу в целом, со всеми необходимыми перекрестными и внешними ссылками.


Замена параметра

Для замены параметра его значением используется следующий формат:

 
${выражение} 

где выражение состоит из всех символов до соответствующей }. Любой символ }, замаскированный обратной косой чертой или входящий в строку в кавычках, а также символы во встроенных арифметических выражениях, подстановках команд и заменах переменных, не учитываются при поиске соответствующей закрывающей скобки, }.

Простейшая форма для замены параметра:

 
${параметр} 

Вместо него будет подставлено значение параметра, если он определен.

Имя или символ параметра может быть взято в фигурные скобки, которые не обязательны кроме как для позиционных параметров из нескольких цифр или когда после параметра идет символ, который можно интерпретировать как часть имени. Соответствующая закрывающая фигурная скобка будет определяться путем подсчета уровней вложенности скобок, пропуская входящие в строки в кавычках и подстановки результатов выполнения команд.

Если имя или символ параметра не взяты в фигурные скобки, при замене будет использовано самое длинное допустимое имя, независимо от того, определен ли параметр с этим именем. Когда командный интерпретатор просматривает входные данные для определения границ имени, он не ограничивается уже известными ему определенными именами. Например, если F - определенная переменная командного интерпретатора, команда:

 
echo $Fred 

не выдаст значение переменной $F и red после него; интерпретатор выбирает самое длинное допустимое имя, Fred, которое в данном случае может быть неопределенным.

Если замена параметра происходит в двойных кавычках:

  • Замена имен файлов не будет выполняться в результатах этой замены.
  • Выделение полей не будет выполняться над результатами этой замены, за исключением @.

Кроме того, замену параметра можно изменить с помощью одного из следующих форматов. В каждом из случаев, когда необходимо значение слова (в зависимости от состояния параметра, как описано ниже), слово будет подвергнуто замене тильды, замене параметров, подстановке результатов выполнения команд и значений арифметических выражений. Если слово не нужно, оно не будет обрабатываться. Символ }, ограничивающий представленные далее изменения замены параметра, ищется так же, как описано в этом разделе ранее. (Например, ${foo-bar}xyz} приведет к подстановке значения foo, за которым идет строка xyz}, если параметр foo установлен, или к подстановке строки barxyz} в противном случае).

${параметр:-слово}
Использовать стандартные значения. Если параметр не установлен или пуст, будет подставлено слово после обработки; в противном случае, подставляется значение параметра.

${параметр:=слово}
Присвоить стандартные значения. Если параметр не установлен или пуст, значение слова после обработки будет присвоено параметру. В любом случае, окончательное значение параметра будет подставлено. Только переменные, но не позиционные или специальные параметры, могут получить значения таким образом.

${параметр:?[слово]}
Сообщить об ошибке, если значение не задано или пустое. Если параметр не установлен или пуст, результат обработки слова (или сообщение о том, что параметр не установлен, если слово не указано) будет выдан в стандартный поток ошибок и командный интерпретатор завершит работу с ненулевым статусом выхода. Иначе подставляется значение параметра. Интерактивному командному интерпретатору завершать работу не нужно.

${параметр:+[слово]}
Использовать альтернативное значение. Если параметр не установлен или пуст, будет подставлено пустое значение, иначе, будет подставлено значение слова после обработки.

В представленных выше конструкциях замены параметров использование двоеточия приводит к проверке параметра на неустановленность или пустоту; если же двоеточие не указано, проверяется только, установлен ли параметр. Влияние двоеточия подытожено в следующей таблице:

 параметр установлен и не пустпараметр установлен, но пустпараметр не установлен
${параметр:-слово}подставить параметрподставить словоподставить слово
${параметр-слово}подставить параметрподставить пустое значениеподставить слово
${параметр:=слово}подставить параметрприсвоить словоприсвоить слово
${параметр=слово}подставить параметрподставить параметрприсвоить пустое значение
${параметр:?слово}подставить параметрошибка, выходошибка, выход
${параметр?слово}подставить параметрподставить пустое значениеошибка, выход
${параметр:+слово}подставить словоподставить пустое значениеподставить пустое значение
${параметр+слово}подставить словоподставить словоподставить пустое значение

Во всех случаях, когда сказано "подставить", выражение заменяется указанным значением. Во всех случаях, когда сказано "присвоить", параметр получает это значение, которое также заменяет выражение.

${#параметр}
Длина строки. Длина значения параметра в символах. Если параметр - * или @, то подставляются все позиционные параметры, начиная с $1 (разделенные символом-разделителем полей).

Следующие четыре варианта замены параметров позволяют обрабатывать подстроки. В любом случае, при проверке шаблонов будет использоваться нотация сопоставления с образцом, а не регулярных выражений. Если параметр - * или @, то подставляются все позиционные параметры, начиная с $1 (разделенные символом-разделителем полей). Взятие всей строки замены параметра в двойные кавычки не вызывает маскировки следующих четырех вариантов символов-шаблонов, тогда как маскировка символов в фигурных скобках учитывается.

${параметр%слово}
Удалить самый короткий суффикс, соответствующий шаблону. Слово будет обработано для получения шаблона. Замена параметра приведет к подстановке значения параметра, из которого удален самый короткий суффикс, соответствующий шаблону.

${параметр%%слово}
Удалить самый длинный суффикс, соответствующий шаблону. Слово будет обработано для получения шаблона. Замена параметра приведет к подстановке значения параметра, из которого удален самый длинный суффикс, соответствующий шаблону.

${параметр#слово}
Удалить самый короткий префикс, соответствующий шаблону. Слово будет обработано для получения шаблона. Замена параметра приведет к подстановке значения параметра, из которого удален самый короткий префикс, соответствующий шаблону.

${параметр##слово}
Удалить самый длинный префикс, соответствующий шаблону. Слово будет обработано для получения шаблона. Замена параметра приведет к подстановке значения параметра, из которого удален самый длинный суффикс, соответствующий шаблону.

Примеры:

${параметр:-слово}

В этом примере, команда ls выполняется, только если параметр x имеет пустое значение или не установлен. (Конструкция $(ls) для подстановки результатов выполнения команды рассмотрена выше в разделе "Подстановка результатов выполнения команд".)

 
${x:-$(ls)} 

${параметр:=слово}

 
unset X 
echo ${X:=abc} 
abc 

${параметр:?слово}

 
unset posix 
echo ${posix:?} 
sh: posix: parameter null or not set 

${параметр:+слово}

 
set a b c 
echo ${3:+posix} 
posix 

${#параметр}

 
HOME=/usr/posix 
echo ${#HOME} 
10 

${параметр%слово}

 
x=file.c 
echo ${x%.c}.o 
file.o 

${параметр%%слово}

 
x=posix/src/std 
echo ${x%%/*} 
posix 

${параметр#слово}

 
x=$HOME/src/cmd 
echo ${x#$HOME} 
/src/cmd 

${параметр##слово}

 
x=/one/two/three 
echo ${x##*/} 
three 

Параметры, устанавливаемые командным интерпретатором

Следующие параметры автоматически устанавливаются командным интерпретатором:

#
Количество позиционных параметров в десятичном виде.

-
Флаги, переданные командному интерпретатору при вызове или с помощью команды set.

?
Десятичное значение, возвращенное последней выполненной командой.

$
Номер процесса данного командного интерпретатора.

_
Изначально значением _ будет полное имя файла командного интерпретатора или выполняемого сценария, переданное в среде. В дальнейшем, ему присваивается последний аргумент предыдущей команды. Этот параметр не устанавливается для асинхронно запускаемых команд. Он также используется для хранения имени соответствующего файла MAIL при проверке наличия новой почты.

!
Номер процесса последней вызванной в фоновом режиме команды.

ERRNO
Значение переменной errno, установленное последним системным вызовом, который завершился сбоем. Это значение зависит от системы и предназначено для отладки.

LINENO
Номер текущей строки в выполняемом сейчас сценарии или функции.

OLDPWD
Предыдущий рабочий каталог, установленный командой cd.

OPTARG
Значение последнего аргумента-опции, обработанного специальной командой getopts.

OPTIND
Индекс последнего аргумента-опции, обработанного специальной командой getopts.

PPID
Идентификатор родительского процесса для командного интерпретатора.

PWD
Текущий рабочий каталог, установленный командой cd.

RANDOM
При каждом обращении к этой переменной генерируется случайное целое число, с равномерным распределением в диапазоне от 0 до 32767. Последовательность случайных чисел можно инициализировать, присваивая числовое значение переменной RANDOM.

REPLY
Эта переменная устанавливается оператором select и специальной командой read, когда ей не переданы аргументы.

SECONDS
При каждом обращении к этой переменной возвращается количество секунд, прошедших с момента вызова командного интерпретатора. Если присвоить этой переменной значение, то при обращении к переменной будет возвращено присвоенное значение плюс количество секунд, прошедших после присвоения.

Переменные, используемые командным интерпретатором

Следующие переменные используются командным интерпретатором:

CDPATH
Путь поиска для команды cd.

COLUMNS
Если эта переменная установлена, ее значение используется для определения ширины окна редактирования для режимов редактирования командного интерпретатора и для печати списков выбора (оператора select).

EDITOR
Если значение этой переменной заканчивается на emacs, gmacs или vi и переменная VISUAL не установлена, то будет включена соответствующая опция (см. описание специальной команды set ниже).

ENV
В этой переменной при вызове командный интерпретатор производит замену параметров, а полученное значение используется как полное имя файла, содержащего команды интерпретатора для выполнения в текущей среде. Файл не обязательно должен быть выполняемым. Если полученное после обработки значение ENV не задает абсолютное (начинающееся с /) имя файла, результаты непредсказуемы. Значение ENV будет игнорироваться, если реальный и эффективный идентификаторы пользователя или реальный и эффективный идентификаторы группы - различны.

Эту переменную можно использовать для установки псевдонимов и других локальных значений для данного вызова командного интерпретатора. Файл, на который указывает ENV, отличается от $HOME/.profile тем, что .profile обычно выполняется в начале сеанса, тогда как ENV вызывается в начале каждого вызова командного интерпретатора. Значение ENV интерпретируется аналогично сценарию, вызываемому через точку (dot script), т.е. команды выполняются в текущей среде и файл должен быть доступен на чтение, но не обязательно на выполнение. Однако, в отличие от сценариев, вызываемых через точку, поиск по перечисленным в PATH каталогам не выполняется. Это сделано, чтобы защититься от "троянских программ".

FCEDIT
Имя стандартного редактора для команды fc.

FPATH
Путь поиска определений функций. По умолчанию, каталоги FPATH просматриваются после каталогов, перечисленных в переменной PATH. Если найден выполняемый файл, то он читается и выполняется в текущей среде. Каталоги FPATH просматриваются перед PATH, когда вызывается функция с атрибутом -u. Предопределенный псевдоним autoload вызывает создание функции с атрибутом -u.

IFS
Внутренние разделители полей, обычно - пробел, табуляция и новая строка, которые используются для разделения слов команды, которые получаются в результате подстановки результатов выполнения команды или замены параметра, а также для разделения слов при использовании специальной команды read. Первый символ переменной IFS используется для разделения аргументов при подстановке значения $* (см. раздел "Маскировка" ниже).

HISTFILE
Если эта переменная установлена при вызове командного интерпретатора, то значение интерпретируется как полное имя файла, который будет использоваться для хранения списка выполненных команд. (См. раздел "Повторный ввод команд" ниже.)

HISTSIZE
Если эта переменная установлена при вызове командного интерпретатора, то количество ранее введенных команд, которые будут доступны этому командному интерпретатору, будет больше или равно соответствующему числу. Стандартное значение 128.

HOME
Стандартный аргумент (начальный каталог) для команды cd.

LC_ALL
Эта переменная задает стандартное значение для переменных LC_*.

LC_COLLATE
Эта переменная определяет поведение выражений, задающих диапазоны, классов эквивалентности и особенности сортировки многобайтовых символов при сопоставлении с образцом.

LC_CTYPE
Определяет то, как командный интерпретатор обрабатывает символы. Когда переменная LC_CTYPE имеет допустимое значение, командный интерпретатор может отображать и обрабатывать текст и имена файлов, содержащие допустимые для соответствующей локали символы. Если переменная LC_CTYPE (см. environ(5)) не установлена в среде, поведение командного интерпретатора определяется значением переменной среды LANG. Если установлена переменная LC_ALL, ее значение переопределяет как LANG, так и значения других переменных LC_*.

LC_MESSAGES
Эта переменная определяет язык, на котором должны выдаваться сообщения.

LANG
Задает стандартное значение для неустановленных или пустых переменных интернационализации. Если какая-то из переменных интернационализации содержит недопустимое значение, утилита будет вести себя так, как если бы ни одна из этих переменных не была определена.

LINENO
Эта переменная устанавливается командным интерпретатором равной десятичному числу, представляющему текущий порядковый номер строки (нумерация начинается с 1) в сценарии или функции перед выполнением каждой команды. Если пользователь делает неопределенной или сбрасывает LINENO, эта переменная может потерять свое специальное значение до завершения работы соответствующего командного интерпретатора. Если командный интерпретатор сейчас не выполняет сценарий или функцию, значение LINENO не определено.

LINES
Если эта переменная установлена, значение используется для определения длины столбца для выдачи списков выбора (select). Списки выбора выдаются вертикально, пока не будет заполнено примерно две трети значения LINES.

MAIL
Если эта переменная установлена равной имени файла почтового ящика и переменная MAILPATH не установлена, командный интерпретатор информирует пользователя о получении почты в указанный файл.

MAILCHECK
Эта переменная определяет, как часто (в секундах) командный интерпретатор будет проверять, не изменилось ли время модификации любого из файлов, указанных переменными MAILPATH или MAIL. Стандартное значение - 600 секунд. По истечении указанного времени командный интерпретатор выполнит проверку перед выдачей очередного приглашения.

MAILPATH
Список имен файлов через двоеточие (:). Если эта переменная установлена, командный интерпретатор информирует пользователя о любых изменениях в указанных файлах, которые произошли за последние MAILCHECK секунд. После каждого имени файла можно указать ? и сообщение, которое будет выдано. В сообщении будет выполнена подстановка значений параметров, причем, переменная $_ заменяется значением изменившегося файла. Стандартное сообщение - you have mail in $_.

NLSPATH
Определяет местонахождение каталогов сообщений для обработки значений LC_MESSAGES.

PATH
Путь поиска для команд (см. раздел "Выполнение" ниже). Пользователь не может изменять значение PATH при работе в rksh (за исключением файла .profile).

PPID
Эта переменная устанавливается командным интерпретатором равной десятичному идентификатору процесса, вызвавшего командный интерпретатор. В порожденном командном интерпретаторе (subshell) PPID будет установлен в то же значение, что и у родительского командного интерпретатора. Например, команды echo $PPID и (echo $PPID) выдадут одно значение.

PS1
В значении этой переменной выполняется подстановка значений параметров, и оно определяет строку основного приглашения, по умолчанию - "$ ". Символ ! в основном приглашении заменяется номером команды (см. раздел "Повторный ввод команды" ниже). Два подряд вхождения ! при выдаче строки приглашения породят один символ !.

PS2
Строка вторичного приглашения, по умолчанию - "> ".

PS3
Приглашение для выбора, используемое в цикле select, по умолчанию - "#? ".

PS4
В значении этой переменной выполняется подстановка значений параметров, и оно выдается перед каждой строкой в трассировке выполнения. Если не указано явно, приглашение трассировки - "+".

SHELL
Полное имя командного интерпретатора поддерживается в среде. При вызове, если базовое имя в значении этой переменной - rsh, rksh или krsh, то командный интерпретатор становится ограниченным.

TMOUT
Если переменной установлено значение больше нуля, командный интерпретатор будет прекращать работу, если команда не введена в течение соответствующего количества секунд после выдачи приглашения PS1. (Учтите, что командный интерпретатор может быть скомпилирован с максимальным значением для этой переменной, которое нельзя превзойти.)

VISUAL
Если значение этой переменной заканчивается строкой emacs, gmacs или vi, будет установлена соответствующая опция (см. описание специальной команды set ниже).

Командный интерпретатор задает стандартные значения переменным PATH, PS1, PS2, PS3, PS4, MAILCHECK, FCEDIT, TMOUT и IFS, тогда как переменные HOME, SHELL, ENV и MAIL им вообще не устанавливаются (хотя переменная HOME устанавливается командой login(1)). В некоторых системах переменные MAIL и SHELL также устанавливаются при регистрации пользователя.

Copyleft (no c) 2005 В. Кравчук, OpenXS Initiative, перевод на русский язык


В следующем выпуске

Следующая часть перевода страницы справочного руководства ksh(1).

С наилучшими пожеланиями,

  В.К.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.othos.unixman
Отписаться

В избранное