Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       wordexp, wordfree - дополняет слово как оболочка posix

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <wordexp.h>

       int wordexp(const char *restrict s, wordexp_t *restrict p, int flags);
       void wordfree(wordexp_t *p);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       wordexp(), wordfree():
           _XOPEN_SOURCE

ОПИСАНИЕ

       Функция  wordexp()  выполняет  раскрытие  строки s также, как это делается в оболочке командной строки, и
       возвращает результат в структуре, на которую указывает p.  Тип  данных  wordexp_t  —  структура,  которая
       содержит,  по  крайней мере, поля we_wordc, we_wordv и we_offs. Поле we_wordc имеет тип size_t и содержит
       количество слов в раскрытой s. Поле we_wordv имеет тип char ** и указывает на массив найденных слов. Поле
       we_offs имеет тип size_t и (в зависимости от flags,  см.  далее)  используется  для  указания  количества
       начальных элементов в массиве we_wordv, которые должны быть заполнены NULL.

       Функция  wordfree()  освобождает  ранее  выделенную память. Более точно, она не освобождает память своего
       аргумента, а освобождает память, занятую под массив we_wordv и строки, которые в нём содержатся.

   Строковый аргумент
       Так как дополнение производится согласно правилам оболочки командной строки (см. sh(1)) по преобразованию
       параметров в команду, строка s не должна содержать символы, которые  запрещено  передавать  в  параметрах
       команд оболочки. В частности, не должно быть неэкранированных символов новой строки или |, &, ;, <, >, (,
       ), {, } вне контекста подстановки команды или параметра.

       Если  аргумент  s содержит слово, которое начинается с символа комментария #, находящегося не в кавычках,
       то такая ситуация является неопределённой, и непонятно, нужно ли игнорировать слово или все слова, или не
       считать # символом комментария.

   Дополнение
       The expansion done consists of the following stages: tilde expansion  (replacing  ~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.

       Результат дополнения специальных параметров ($@, $*, $#, $?, $-, $$, $!, $0) не определён.

       Field  splitting is done using the environment variable $IFS.  If it is not set, the field separators are
       space, tab, and newline.

   Массив результата
       Массив we_wordv содержит найденные слова и заканчивается NULL.

   Аргумент флагов
       Аргумент flag представляет собой побитовое объединяющее ИЛИ следующих значений:

       WRDE_APPEND
              Добавлять найденные слова в массив, полученный в результате предыдущего вызова.

       WRDE_DOOFFS
              Вставить we_offs начальных NULL в массив we_wordv (они не считаются в конечном we_wordc).

       WRDE_NOCMD
              Не выполнять подстановку команд.

       WRDE_REUSE
              Аргумент p получен от предыдущего вызова wordexp(), и функция wordfree() не была вызвана. Повторно
              использовать выделенное пространство.

       WRDE_SHOWERR
              Обычно, во время подстановки команды  вывод  stderr  перенаправляется  в  /dev/null.  Этим  флагом
              задаётся отмена такого перенаправления stderr.

       WRDE_UNDEF
              Считать ошибкой, если не определена раскрываемая переменная оболочки.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       On success, wordexp()  returns 0.  On failure, wordexp()  returns one of the following nonzero values:

       WRDE_BADCHAR
              Недопустимое появление символа новой строки или одного из символов |, &, ;, <, >, (, ), {, }.

       WRDE_BADVAL
              Указана неопределённая переменная оболочки и установлен флаг WRDE_UNDEF.

       WRDE_CMDSUB
              Запрошена подстановка команды, но установлен флаг WRDE_NOCMD, указывающий считать это ошибкой.

       WRDE_NOSPACE
              Не хватает памяти.

       WRDE_SYNTAX
              Синтаксическая ошибка оболочки, например незакрытая скобка или кавычка.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌────────────┬──────────────────────┬───────────────────────────────────────────────────────────────────┐
       │ ИнтерфейсАтрибутЗначение                                                          │
       ├────────────┼──────────────────────┼───────────────────────────────────────────────────────────────────┤
       │ wordexp()  │ Безвредность в нитях │ MT-Unsafe race:utent const:env env sig:ALRM timer locale          │
       ├────────────┼──────────────────────┼───────────────────────────────────────────────────────────────────┤
       │ wordfree() │ Безвредность в нитях │ MT-Safe                                                           │
       └────────────┴──────────────────────┴───────────────────────────────────────────────────────────────────┘

       В  приведённой  выше  таблице  utent  в  race:utent  означает,  что  если  любая  из функций setutent(3),
       getutent(3) или endutent(3) используется одновременно в нескольких нитях программы, то  может  возникнуть
       состязательность  по  данным.  Эти  функции вызываются из wordexp(), поэтому мы используем race:utent для
       напоминания.

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001.  glibc 2.1.

ПРИМЕРЫ

       Результатом следующего примера будет таким же что и при выполнении команды «ls [a-c]*.c».

       #include <stdio.h>
       #include <stdlib.h>
       #include <wordexp.h>

       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\n", w[i]);
           wordfree(&p);
           exit(EXIT_SUCCESS);
       }

СМОТРИТЕ ТАКЖЕ

       fnmatch(3), glob(3)

ПЕРЕВОД

       Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Yuri
       Kozlov <yuray@komyakino.ru> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  15 июня 2024 г.                                      wordexp(3)