.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl) .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH wordexp 3 "31 октября 2023 г." "Linux man\-pages 6.06" .SH ИМЯ wordexp, wordfree \- дополняет слово как оболочка posix .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBint wordexp(const char *restrict \fP\fIs\fP\fB, wordexp_t *restrict \fP\fIp\fP\fB, int \fP\fIflags\fP\fB);\fP \fBvoid wordfree(wordexp_t *\fP\fIp\fP\fB);\fP .fi .P .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .P \fBwordexp\fP(), \fBwordfree\fP(): .nf _XOPEN_SOURCE .fi .SH ОПИСАНИЕ Функция \fBwordexp\fP() выполняет раскрытие строки \fIs\fP также, как это делается в оболочке командной строки, и возвращает результат в структуре, на которую указывает \fIp\fP. Тип данных \fIwordexp_t\fP — структура, которая содержит, по крайней мере, поля \fIwe_wordc\fP, \fIwe_wordv\fP и \fIwe_offs\fP. Поле \fIwe_wordc\fP имеет тип \fIsize_t\fP и содержит количество слов в раскрытой \fIs\fP. Поле \fIwe_wordv\fP имеет тип \fIchar\ **\fP и указывает на массив найденных слов. Поле \fIwe_offs\fP имеет тип \fIsize_t\fP и (в зависимости от \fIflags\fP, см. далее) используется для указания количества начальных элементов в массиве \fIwe_wordv\fP, которые должны быть заполнены NULL. .P Функция \fBwordfree\fP() освобождает ранее выделенную память. Более точно, она не освобождает память своего аргумента, а освобождает память, занятую под массив \fIwe_wordv\fP и строки, которые в нём содержатся. .SS "Строковый аргумент" Так как дополнение производится согласно правилам оболочки командной строки (см. \fBsh\fP(1)) по преобразованию параметров в команду, строка \fIs\fP не должна содержать символы, которые запрещено передавать в параметрах команд оболочки. В частности, не должно быть неэкранированных символов новой строки или |, &, ;, <, >, (, ), {, } вне контекста подстановки команды или параметра. .P Если аргумент \fIs\fP содержит слово, которое начинается с символа комментария #, находящегося не в кавычках, то такая ситуация является неопределённой, и непонятно, нужно ли игнорировать слово или все слова, или не считать # символом комментария. .SS Дополнение The expansion done consists of the following stages: tilde expansion (replacing \[ti]user by user's home directory), variable substitution (replacing $FOO by the value of the environment variable FOO), command substitution (replacing $(command) or \`command\` by the output of command), arithmetic expansion, field splitting, wildcard expansion, quote removal. .P Результат дополнения специальных параметров ($@, $*, $#, $?, $\-, $$, $!, $0) не определён. .P Field splitting is done using the environment variable $IFS. If it is not set, the field separators are space, tab, and newline. .SS "Массив результата" Массив \fIwe_wordv\fP содержит найденные слова и заканчивается NULL. .SS "Аргумент флагов" Аргумент \fIflag\fP представляет собой побитовое объединяющее ИЛИ следующих значений: .TP \fBWRDE_APPEND\fP Добавлять найденные слова в массив, полученный в результате предыдущего вызова. .TP \fBWRDE_DOOFFS\fP Вставить \fIwe_offs\fP начальных NULL в массив \fIwe_wordv\fP (они не считаются в конечном \fIwe_wordc\fP). .TP \fBWRDE_NOCMD\fP Не выполнять подстановку команд. .TP \fBWRDE_REUSE\fP Аргумент \fIp\fP получен от предыдущего вызова \fBwordexp\fP(), и функция \fBwordfree\fP() не была вызвана. Повторно использовать выделенное пространство. .TP \fBWRDE_SHOWERR\fP Обычно, во время подстановки команды вывод \fIstderr\fP перенаправляется в \fI/dev/null\fP. Этим флагом задаётся отмена такого перенаправления \fIstderr\fP. .TP \fBWRDE_UNDEF\fP Считать ошибкой, если не определена раскрываемая переменная оболочки. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, \fBwordexp\fP() returns 0. On failure, \fBwordexp\fP() returns one of the following nonzero values: .TP \fBWRDE_BADCHAR\fP Недопустимое появление символа новой строки или одного из символов |, &, ;, <, >, (, ), {, }. .TP \fBWRDE_BADVAL\fP Указана неопределённая переменная оболочки и установлен флаг \fBWRDE_UNDEF\fP. .TP \fBWRDE_CMDSUB\fP Запрошена подстановка команды, но установлен флаг \fBWRDE_NOCMD\fP, указывающий считать это ошибкой. .TP \fBWRDE_NOSPACE\fP Не хватает памяти. .TP \fBWRDE_SYNTAX\fP Синтаксическая ошибка оболочки, например незакрытая скобка или кавычка. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lb lb lbx l l l. Интерфейс Атрибут Значение T{ .na .nh \fBwordexp\fP() T} Безвредность в нитях T{ .na .nh MT\-Unsafe race:utent const:env env sig:ALRM timer locale T} T{ .na .nh \fBwordfree\fP() T} Безвредность в нитях MT\-Safe .TE .P В приведённой выше таблице \fIutent\fP в \fIrace:utent\fP означает, что если любая из функций \fBsetutent\fP(3), \fBgetutent\fP(3) или \fBendutent\fP(3) используется одновременно в нескольких нитях программы, то может возникнуть состязательность по данным. Эти функции вызываются из \fBwordexp\fP(), поэтому мы используем race:utent для напоминания. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001. glibc 2.1. .SH ПРИМЕРЫ Результатом следующего примера будет таким же что и при выполнении команды «ls [a\-c]*.c». .P .\" SRC BEGIN (wordexp.c) .EX #include #include #include \& int main(void) { wordexp_t p; char **w; \& wordexp("[a\-c]*.c", &p, 0); w = p.we_wordv; for (size_t i = 0; i < p.we_wordc; i++) printf("%s\en", w[i]); wordfree(&p); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМ. ТАКЖЕ" \fBfnmatch\fP(3), \fBglob\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov и Yuri Kozlov . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .