Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: маркетинг, реклама, торговля" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Страницы справочного руководства ОС UNIX на русском bash(1), часть шестая
Информационный Канал Subscribe.Ru |
Выпуск 48
man bash(1), часть шестая
Уважаемые подписчики! Этот выпуск - шестой в серии, посвященной командному интерпретатору bash. Перевод закончен сегодня, 7 мая, по справочному руководству ОС Solaris 8.
Поскольку по правилам оформления рассылок в них не должно быть "висящих" гиперссылок, не все перекрестные ссылки в выпусках, посвященных bash, оформлены как гиперссылки. Когда перевод будет закончен, вы сможете скачать с сайта рассылки всю страницу в целом, со всеми необходимыми перекрестными и внешними ссылками.
bash(1)
Подстановка результатов выполнения команд
Подстановка результатов выполнения команд позволяет результат, выдаваемый командой в стандартный выходной поток, подставить вместо имени команды. Имеется две формы такой подстановки:
- $(команда)
- `команда`
Командный интерпретатор bash делает эту подстановку путем выполнения команды и замены конструкции подстановки содержимым стандартного выходного потока команды, из которого удалены завершающие переводы строк. Встроенные переводы строк не удаляются, но они могут быть удалены при разбиении на слова. Подстановку результатов выполнения команды $(cat file) можно заменить эквивалентной, но более быстрой: $(< file).
При использовании старой формы подстановки в обратных апострофах обратная косая интерпретируется как литерал, если только после нее не идут символы $, ` или \. Первый же обратный апостроф, не замаскированный обратной косой, завершает подставляемую команду. При использовании формы $(команда) все символы между круглыми скобками образуют команду - ни один не имеет специального значения.
Подстановка результатов выполнения команд может быть вложенной. Для задания вложенной подстановки в форме с обратными апострофами замаскируйте внутренние обратные апострофы обратными косыми.
Если подстановка задана в двойных кавычках, разбиение на слова и подстановка имен файлов в результатах не выполняется.
Вычисление арифметических выражений
При вычислении арифметических выражений вместо выражения подставляется результат его вычисления. Для вычисления арифметических выражений используется следующий формат:
- $((выражение))
Выражение обрабатывается так, как если бы оно было взято в двойные кавычки, но двойные кавычки в самом выражении не имеют специального значения. Во всех лексемах выражения выполняется подстановка значений параметров, подстановка строк, подстановка результатов выполнения команд и удаление кавычек. Вычисления арифметических выражений могут быть вложенными.
Вычисление выполняется по правилам, перечисленным ниже в разделе "ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ". Если выражение недопустимо, командный интерпретатор bash выдает сообщение о невозможности вычисления и подстановка не выполняется.
Подстановка процессов
Подстановка процессов доступна в системах, поддерживающих именованные каналы (FIFO) или метод именования открытых файлов через /dev/fd. Она имеет вид <(список) или >(список). Процесс список запускается и его входной или выходной поток связывается с именованным каналом FIFO или одним из файлов в /dev/fd. Имя этого файла передается в качестве аргумента текущей команде как результат подстановки. Если использована форма >(список), запись в файл будет давать входные данные процессу список. Если же использована форма <(список), файл, переданный в качестве аргумента, необходимо читать для получения результатов работы процесса список.
Если подстановка процессов поддерживается, она выполняется одновременно с подстановкой значений параметров, подстановкой результатов выполнения команд и вычислением арифметических выражений.
Разбиение на слова
Командный интерпретатор обрабатывает результаты подстановки значений параметров, результатов выполнения команд и арифметических вычислений, не взятых в двойные кавычки, разбивая их на слова.
Командный интерпретатор рассматривает каждый символ значения переменной IFS как разделитель и разбивает результаты подстановок на слова по этим символам. Если переменная IFS не установлена или ее значение - <пробел><табуляция><перевод строки>, т.е. стандартное, то любая последовательность подряд идущих символов из IFS считается разделителем слов. Если же переменная IFS имеет значение, отличающееся от стандартного, то последовательность пробельных символов (пробелов и символов табуляции) в начале и в конце слова игнорируется, если пробельные символы входят в значение IFS (их обобщенно называют пробельным символом IFS). Любые символы в значении IFS, не являющиеся пробельными, вместе с любыми идущими за ними пробельными символами IFS, ограничивают слово. Последовательность пробельных символов IFS также считается разделителем. Если переменная IFS имеет пустое значение, разбиение на слова не происходит.
Явные пустые строки ("" или '') оставляются. Не взятые в кавычки неявные пустые строки, получающиеся в результате подстановки параметров, не имеющих значения, удаляются. Если параметр, не имеющий значения, подставляется в двойных кавычках, получается пустая строка, и она остается в командной строке.
Учтите, что если не было подстановок, то и разбиение на слова не выполняется.
Подстановка имен файлов
После разбиения на слова, если только не установлена опция -f, командный интерпретатор bash просматривает каждое слово в поисках символов *, ?, ( и [. Если найден любой из этих символов, слово считается шаблоном и заменяется упорядоченным по алфавиту списком имен файлов, соответствующих шаблону. Если соответствующие имена файлов не найдены и опция командного интерпретатора nullglob отключена, слово остается без изменений. Если опция nullglob установлена и соответствующие файлы не найдены, слово удаляется. Если включена опция командного интерпретатора nocaseglob, сопоставление выполняется без учета регистра алфавитных символов. Если шаблон используется для подстановки имен файлов, символ "." в начале имени или сразу после косой черты должен сопоставляться явно, если только не установлена опция интерпретатора dotglob. При сопоставлении имен файлов косые черты всегда должны сопоставляться явно. В других случаях символ "." обрабатывается как любые другие символы. См. описание опций командного интерпретатора nocaseglob, nullglob и dotglob ниже в разделе "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА".
Переменная командного интерпретатора GLOBIGNORE может использоваться для ограничения множества имен файлов, соответствующих шаблону. Если переменная GLOBIGNORE установлена, каждое сопоставившееся имя файла, соответствующее также одному из шаблонов, заданных в GLOBIGNORE, удаляется из списка сопоставившихся. Имена файлов "." и ".." игнорируются всегда, даже если установлена переменная GLOBIGNORE. Однако при установке переменной GLOBIGNORE автоматически устанавливается опция интерпретатора dotglob, так что все остальные имена файлов, начинающиеся с ".", будут подставлены. Для получения старого поведения - игнорирования имен файлов, начинающихся с ".", - задайте ".*" как один из шаблонов в переменной GLOBIGNORE. Опция dotglob отключается, если переменная GLOBIGNORE не установлена.
Сопоставление с образцом
Любой символ в шаблоне, отличающийся от специальных, описанных выше, сопоставляется буквально. Символ NUL в шаблоне указывать нельзя. Специальные символы шаблона для буквального сопоставления необходимо маскировать.
Специальные символы шаблона имеют следующие значения:
- *
- Соответствует любой строке, в том числе, пустой.
- ?
- Соответствует любому одиночному символу.
- [...]
- Соответствует любому из символов в квадратных скобках. Пара символов,
разделенная дефисом, задает диапазон; любой символ, лексически находящийся между
этими двумя символами, включительно, будет соответствовать этой конструкции.
Если сразу после [ идет символ ! или ^, то конструкции соответствует любой
символ, не указанный в квадратных скобках. Для сопоставления с дефисом (-)
его необходимо указать в квадратных скобках первым или последним. Для задания
закрывающей квадратной скобки (]), ее необходимо указать как первый символ набора.
В квадратных скобках можно задавать классы символов с помощью конструкции [:класс:], где класс - один из следующих классов, определяемых стандартом POSIX.2:
alnum alpha ascii blank cntrl digit graph lower print punct space upper xdigit
Класс символов сопоставляется с любым символом, принадлежащим к этому классу.В квадратных скобках можно задавать класс эквивалентности с помощью конструкции [=c=], соответствующей всем символам с тем же порядком сортировки (collation weight), определяемым текущей локалью, что и символ c.
В квадратных скобках конструкция [.символ.] соответствует символу с указанным порядком сортировки.
Если с помощью встроенной команды shopt установлена опция командного интерпретатора extglob, распознается ряд дополнительных операторов сопоставления с образцом. В следующем описании список_шаблонов - это список из одного или нескольких шаблонов через вертикальную черту (|). Составные шаблоны можно формировать из одного или нескольких следующих подшаблонов:
- ?(список_шаблонов)
- Соответствует нулю или одному вхождению указанных шаблонов
- *(список_шаблонов)
- Соответствует нулю или более вхождений указанных шаблонов
- +(список_шаблонов)
- Соответствует одному или оболее вхождений указанных шаблонов
- @(список_шаблонов)
- Соответствует ровно одному вхождению указанных шаблонов
- !(список_шаблонов)
- Соответствует любой строке, кроме соответствующей одному из указанных шаблонов.
Удаление кавычек
После выполнения всех перечисленных выше подстановок все незамаскированные вхождения символов \, ' и ", не являющиеся результатом этих подстановок, удаляются.
ПЕРЕНАПРАВЛЕНИЕ
Перед выполнением команды ее входной и выходной потоки могут быть перенаправлены с помощью специальных конструкций, обрабатываемых командным интерпретатором. Перенаправления также можно использовать для открытия и закрытия файлов в текущей среде работы командного интерпретатора. Следующие операторы перенаправления могут предшествовать простой команде или указываться в любом ее месте, или указываться после команды. Перенаправления обрабатываются в порядке их указания, слева направо.
В следующих описаниях если номер дескриптора файла не указан и первый символ оператора перенаправления - <, выполняется перенаправление стандартного входного потока (дескриптор файла 0). Если же первым символом оператора перенаправления является символ >, выполняется перенаправление стандартного выходного потока (дескриптор файла 1).
В слове, идущем за оператором перенаправления в следующих описаниях, если не сказано иначе, выполняется подстановка фигурных скобок, замена тильды, подстановка значений параметров, подстановка результатов выполнения команд, вычисление арифметических выражений, удаление кавычек и подстановка имен файлов. Если в результате получается более одного слова, командный интерпретатор bash выдает сообщение об ошибке.
Учтите, что порядок указания перенаправлений имеет значение. Например, команда
- ls > dirlist 2>&1
перенаправляет в файл dirlist стандартный выходной поток и стандартный поток ошибок, тогда как команда
- ls 2>&1 > dirlist
перенаправляет в файл dirlist только стандартный выходной поток, поскольку стандартный поток ошибок был направлен туде же, куда и стандартный выходной поток до его перенаправления в файл dirlist.
Ошибка при открытии или создании файла приводит к отмене перенаправления.
Перенаправление входного потока приводит к открытию на чтение файла, имя которого получается в результате подстановок в слове, через дескриптор файла n, или как стандартного входного потока (дескриптор файла 0), если n не указано.
В общем случае перенаправление входного потока имеет вид:
- [n]<слово
Перенаправление выходного потока
Перенаправление входного потока приводит к открытию на запись файла, имя которого получается в результате подстановок в слове, через дескриптор файла n, или как стандартного выходного потока (дескриптор файла 1), если n не указано. Если файл не существует, он создается; если существует - он усекается до нулевого размера.
В общем случае перенаправление выходного потока имеет вид:
- [n]>слово
Если используется оператор перенаправления > и с помощью встроенной команды set установлена опция noclobber, перенаправление не будет выполнено, если файл с соответствующим именем существует и является обычным файлом. Если используется оператор перенаправления >|, либо оператор перенаправления - > и опция noclobber с помощью встроенной команды set не установлена, перенаправление выполняется, даже если соответствующий файл существует.
В следующем выпуске
Очередная часть справочного руководства по bash(1). Выпуск ожидается завтра, 8 мая.
С наилучшими пожеланиями,
В.К.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||