Manpages

名 前

wordexp, wordfree − posix シ ェ ル の よ う に 単 語 の 展 開 を 行 う

書 式

#include <wordexp.h>

int wordexp(const char *s, wordexp_t *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_wordcsize_t で あ り 、 s を 展 開 し た 結 果 に 単 語 が い く つ あ る か を 表 す 。 フ ィ ー ル ド we_wordvchar ** で あ り 、 見 つ か っ た 単 語 の 配 列 を 指 し 示 す 。 size_t 型 の フ ィ ー ル ド we_offs は 、 we_wordv 配 列 に あ る 初 期 要 素 の う ち い く つ が NULL で 埋 め ら れ る べ き か を 表 す の に 使 わ れ た り す る (flags に よ り 決 定 さ れ る 。 下 記 を 参 照 。 )。 関 数 wordfree() は 割 り 当 て た メ モ リ ー を 再 度 解 放 す る 。 よ り 正 確 に い う と 、 こ の 関 数 は そ の 引 き 数 を 解 放 す る の で は な く 、 配 列 we_wordv と そ れ が 指 し 示 す 文 字 列 を 解 放 す る 。 文 字 列 引 き 数 こ の 展 開 は シ ェ ル に よ る コ マ ン ド の パ ラ メ ー タ ー の 展 開 (sh(1) を 参 照 ) と 同 じ で あ る の で 、 文 字 列 s は シ ェ ル コ マ ン ド パ ラ メ ー タ ー で 不 正 と さ れ る 文 字 を 含 ん で は な ら な い 。 特 に エ ス ケ ー プ さ れ て い な い 改 行 、 |, &, ;, <, >, (, ), {, } 文 字 を コ マ ン ド 置 換 や パ ラ メ ー タ ー 置 換 の 場 面 以 外 に 含 め て は な ら な い 。 引 き 数 s に ク ォ ー ト し て い な い コ メ ン ト 文 字 # で 始 ま る 単 語 が 含 ま れ て い る 場 合 に は 、 そ の 単 語 と そ れ 以 降 の 単 語 が 無 視 さ れ る か 、 そ れ と も # が コ メ ン ト 文 字 と し て 扱 わ な い か は 、 規 定 さ れ て い な い 。 展 開 実 行 さ れ る 展 開 は 、 以 下 の 段 階 で 構 成 さ れ る : チ ル ダ 展 開 (~user を user の ホ ー ム デ ィ レ ク ト リ に 置 き 換 え る )、 変 数 展 開 ($FOO を 環 境 変 数 FOO の 値 に 置 き 換 え る )、 コ マ ン ド 展 開 ($(command) ま た は `command` を command の 出 力 で 置 き 換 え る )、 算 術 展 開 、 フ ィ ー ル ド 分 割 、 ワ イ ル ド カ ー ド 展 開 、 ク ォ ー ト の 除 去 。 特 殊 な パ ラ メ ー タ ー ($@, $*, $#, $?, $−, $$, $!, $0) の 展 開 結 果 は 規 定 さ れ て い な い 。 フ ィ ー ル ド 分 割 は 環 境 変 数 $IFS を 用 い て 行 わ れ る 。 こ の 環 境 変 数 が 設 定 さ れ て い な い 場 合 、 フ ィ ー ル ド 区 切 り 文 字 は ス ペ ー ス ・ タ ブ ・ 改 行 で あ る 。 出 力 さ れ る 配 列 配 列 we_wordv は 見 つ か っ た 単 語 を を 含 み 、 最 後 に NULL が 続 く 。

flags 引 き 数
flags
引 き 数 は 以 下 の 値 の ビ ッ ト 包 含 的 OR で あ る :
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
未 定 義 の シ ェ ル 変 数 を 展 開 し よ う と し た 場 合 に 、 エ ラ ー と し て 扱 う 。

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は 以 下 の 5 つ の 値 の う ち の 1 つ が 返 さ れ る 。

WRDE_BADCHAR 改 行 ま た は |, &, ;, <, >, (, ), {, } の う ち の 1 つ が 不 正 に 出 現 し た 。
WRDE_BADVAL
未 定 義 の シ ェ ル 変 数 が 参 照 さ れ 、 か つ WRDE_UNDEF フ ラ グ で こ れ を エ ラ ー と し て 扱 う よ う に 指 示 さ れ て い る 。
WRDE_CMDSUB
コ マ ン ド 置 換 が 要 求 さ れ た が 、 WRDE_NOCMD フ ラ グ で こ れ を エ ラ ー と し て 扱 う よ う に 指 示 さ れ て い た 。
WRDE_NOSPACE
メ モ リ ー が 足 り な い 。
WRDE_SYNTAX
対 応 す る 括 弧 が な い 、 ク ォ ー ト が 合 致 し な い と い っ た 、 シ ェ ル の 書 式 エ ラ ー 。

バ ー ジ ョ ン

wordexp() と wordfree() は 、 バ ー ジ ョ ン 2.1 以 降 の glibc で 提 供 さ れ て い る 。

準 拠

POSIX.1−2001.

以 下 の サ ン プ ル プ ロ グ ラ ム の 出 力 は だ い た い "ls [a−c]*.c" と 同 じ に な る 。

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

int
main(int argc, char **argv)
{
wordexp_t p;
char **w;
int i;

wordexp("[a−c]*.c", &p, 0);
w = p.we_wordv;
for (i = 0; i < p.we_wordc; i++)
printf("%s\n", w[i]);
wordfree(&p);
exit(EXIT_SUCCESS); }

関 連 項 目

fnmatch(3), glob(3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。