[ 1Àå, 2Àå, 3Àå, 4Àå, 5Àå, 6Àå, 7Àå, 8Àå, 9Àå, 10Àå, 11Àå, 12Àå, 13Àå, 14Àå, 15Àå, 16Àå, 17Àå, 18Àå, 19Àå, 20Àå, 21Àå, 22Àå, 23Àå, 24Àå, 25Àå, 26Àå, 27Àå, ºÎ·ÏA, ºÎ·ÏB,C, ºÎ·ÏD, GNU C ¶óÀ̺귯¸® ¸ñ·Ï ]

À̱ÛÀº ÇÏÀÌÅÚ ¼ÒÇÁÆ®¿þ¾îµ¿È£È¸ÀÇ ¼Ò¸ðÀÓÀÎ Á÷ÀåÀÎÀ» À§ÇÑ ¾¾¸ðÀÓ¿¡¼­ ÀåÀå 2³â°£ÀÇ ´ëÀåÁ¤À¸·Î ¹ø¿ªµÇ¾îÁø ¹®¼­ÀÔ´Ï´Ù. Áö±ÝÀº Á÷¾¾ÀåÀ» Áö³»°í ÀÖ´Â ±è¼Ò¿µ(flpigy)´Ô°ú Á¶¿øºÀ(thirnine)´Ô, °í¼®°©´Ô(sukgab)ÀÇ °øµ¿¹ø¿ªÀÔ´Ï´Ù.

16. ÆÐÅÏ ¸ÅĪ

( Pattern Matching )

GNU C ¶óÀ̺귯¸®´Â µÎÁ¾·ùÀÇ ÇüÅÂ(pattern)¸¦ Á¶È­½ÃŰ À§ÇÑ µµ±¸¸¦ Á¦°øÇÑ´Ù: º¸ÅëÀÇ Ç¥Çöµé°ú ÆÄÀÏ-À̸§ ¿ÍÀϵåÄ«µå. ¶óÀ̺귯¸®´Â ¶ÇÇÑ, ½©ÀÌ ÇÏ´Â ¹æ¹ý´ë·Î º¯¼ö¸¦ È®ÀåÇÏ°í ¸í·ÉÀ» ÂüÁ¶Çϰí, ´Ü¾î·Î ÅØ½ºÆ®¸¦ ±¸¹®ºÐ¼®ÇÏ´Â ±×·¯ÇÑ µµ±¸µéÀ» Á¦°øÇÑ´Ù.

16.1 ¿ÍÀϵåÄ«µå ¸ÅĪ (Winldcard Matching)

ÀÌ ÀýÀº Ưº°ÇÑ ¹®ÀÚ¿­¿¡ ´ëÀÀÇÏ¿© ¿ÍÀϵåÄ«µå(wildcard) ÆÐÅϰú ¾î¶»°Ô ¸ÅÄ¡ÇÒ°ÍÀÎÁö¸¦ ¼³¸íÇÑ´Ù. ±× °á°ú´Â ¿¹, ¶Ç´Â ¾Æ´Ï¿À ÀÇ ´ë´äÀÌ´Ù: ±× ¹®ÀÚ¿­ÀÌ ÆÐÅϰú ¸Â´ÂÁö Ʋ¸°Áö... ¿©±â¿¡ ¼³¸íµÈ ¸ðµç ±âÈ£(sysbols)µéÀº ¸ðµÎ 'fnmatch.h/¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

ÇÔ¼ö : int fnmatch (const char *pattern, const char *string, int flags)

ÀÌ ÇÔ¼ö´Â ¹®ÀÚ¿­ string ÀÌ ÆÐÅÏ pattern °ú ¸Â´ÂÁö, ¾î¶²Áö¸¦ ½ÃÇèÇÑ´Ù. ¸¸ÀÏ ±×µéÀÌ ¼­·Î ¸ÂÀ¸¸é 0À» ¸®ÅÏÇϰí; ±×·¸Áö ¾ÊÀ¸¸é ¿µÀÌ ¾Æ´Ñ °ª FNM_NOMATCH ¸¦ ¸®ÅÏÇÑ´Ù. pattern °ú stringÀμö µéÀº µÑ´Ù ¹®ÀÚ¿­ÀÌ´Ù. flags Àμö´Â ¼¼¹ÐÇÑ ¸ÅĪ(matchin)À» ÇϱâÀ§ÇÑ Ç÷¡±× ºñÆ®µéÀÇ Á¶ÇÕ´Ï´Ù. Á¤ÀÇµÈ Ç÷¡±×µéÀº ¾Æ·¡¸¦ ÂüÁ¶Ç϶ó.

GNU C ¶óÀ̺귯ÀÌ¿¡¼­, fnmatch´Â "¿¡·¯"¸¦ ¹ß»ý½Ãų¼ö ¾ø´Ù. ±×°ÍÀº Ç×»ó ±× µÑÀÌ ¼­·Î ¸Â´ÂÁö¿¡ ´ëÇÑ ´ë´äÀ» ¸®ÅÏÇϱ⠶§¹®ÀÌ´Ù. ±×·¸Áö¸¸, fnmatch¿¡¼­ ÆÄ»ýµÈ ´Ù¸¥ ÇÔ¼öµéÀº ¶§¶§·Î "¿¡·¯"¸¦ º¸ °íÇÒ °ÍÀÌ´Ù. ±×µéÀº FNM_NOMATCH °ú´Â ´Ù¸¥ 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÔÀ¸·Î½á ¿¡·¯¸¦ º¸°í ÇÒ °Í ÀÌ´Ù.

À̵éÀº flags Àμö¿¡¼­ »ç¿ëµÇ´Â À¯¿ëÇÑ Ç÷¡±×µéÀÌ´Ù.

FNM_FILE_NAME

ÆÄÀÏÀ̸§°ú ¸ÂÃß´Â µ¿¾È, '/' ¹®ÀÚ¸¦ Ưº°È÷ Ãë±ÞÇ϶ó. ¸¸ÀÏ ÀÌ Ç÷¡±×°¡ ¼³Á¤µÇ¸é, ÆÐÅϾÈÀÇ ¿ÍÀ̵å Ä«µå ±¸¼ºµéÀº ¹®ÀÚ¿­¿¡ ÀÖ´Â '/'°ú ¸ÅÄ¡ÇÒ ¼ö ¾ø´Ù. ±×·¡¼­, '/'°ú ¸ÅÄ¡ÇϱâÀ§ÇÑ À¯ÀÏÇÑ ¹æ¹ýÀº ÆÐ ÅϾȿ¡ '/'¸¦ ¸í½ÃÇÏ´Â °ÍÀÌ´Ù.

FNM_PATHNAME

À̰ÍÀº FNM_FILE_NAME ÀÇ ´Ù¸¥ À̸§À¸·Î; POSIX.2·ÎºÎÅÍ ¿Ô´Ù. ¿ì¸®´Â ÆÄÀÏ À̸§À¸·Î "°æ·ÎÀÌ ¸§"À» »ç¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÌ À̸§À» ¾²´Â °ÍÀ» ±ÇÀåÇÏÁö ¾Ê´Â´Ù.

FNM_PERIOD

¸¸ÀÏ ¹®ÀÚ¿­ÀÇ Ã³À½¿¡ '.' ¹®ÀÚ°¡ ³ªÅ¸³ª¸é Ưº°ÇÏ°Ô Ãë±ÞÇ϶ó. ¸¸ÀÏ ÀÌ Ç÷¡±×°¡ ¼³Á¤µÇ¸é, ÆÐÅÏ¾È ÀÇ ¿ÍÀϵåÄ«µå ±¸¼ºÀº ù ¹øÂ° ¹®ÀÚ°¡ '.'·Î ½ÃÀ۵Ǵ ¹®ÀÚ¿­¿¡¼­ '.'¹®ÀÚ¿Í ¸ÅÄ¡ÇÒ ¼ö ¾ø´Ù.

¸¸ÀÏ ´ç½ÅÀÌ FNM_PERIOD ¿Í FNM_FILE_NAME À» ¸ðµÎ ¼³Á¤ÇØ ³õ¾Ò´Ù¸é, ¹®ÀÚ¿­ÀÇ Ã³À½¿¡ ³ªÅ¸ ³ª´Â '.' Àº ¹°·Ð '.'¹®ÀÚ ´ÙÀ½¿¡ ³ªÅ¸³ª´Â '/'¹®ÀÚµµ Ưº°ÇÑ Ãë±ÞÀ» ÇÑ´Ù. (½©Àº FN,_PERIOD ¿Í FNM_FILE_NAME Ç÷¡±×¸¦ ÆÄÀÏÀ̸§°ú ¸ÅÄ¡Çϱâ À§Çؼ­ ÇÔ²² »ç¿ëÇÑ´Ù.)

FNM_NOESCAPE

ÆÐÅϾȿ¡ ÀÖ´Â '\'¹®ÀÚ¸¦ Ưº°ÇÏ°Ô Ãë±ÞÇÏÁö ¸»¾Æ¶ó. º¸Åë, '\'°¡ ¹Ù·Î µÚ¿¡ µû¸£´Â ¹®ÀÚ¸¦ ÀοëÇÏ ¸é, ¿ø·¡ ±× ¹®ÀÚ°¡ °®´Â Ưº°ÇÑ Àǹ̰¡ ¹«È¿È­µÈ´Ù. ÀοëÀÌ °¡´ÉÇßÀ» ¶§, ÆÐÅÏ '\?'´Â ÆÐź¾ÈÀÇ ÀÇ ¹®ºÎÈ£°¡ º¸ÅëÀÇ ¹®ÀÚó·³ ÇൿÇϱ⠶§¹®¿¡ '?'°ú ¸ÅÄ¡µÈ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ FNM_NOESCAPEÀ» »ç ¿ëÇϸé, '\'µµ º¸ÅëÀÇ ¹®ÀÚ°¡ µÈ´Ù.

FNM_LEADING_DIR

¹®ÀÚ¿­¿¡¼­ '/'µÚ¿¡ ³ªÅ¸³ª´Â ¹®ÀÚµéÀÇ ¿­À» ¹«½ÃÇ϶ó; À̰ÍÀº, ÆÐÅϰú ¸ÅÄ¡µÇ´Â µð·ºÅ丮 À̸§À¸·Î ½ÃÀÛÇÏ´Â ¹®ÀÚ¿­ÀÎÁö¸¦ ½ÃÇèÇÔÀ» ¸»ÇÑ´Ù. ¸¸ÀÏ ÀÌ Ç÷¡±×°¡ ¼³Á¤µÇ¸é, ÆÐÅÏÀÌ 'foo*' À̰ųª 'foobar' À̸é, ¹®ÀÚ¿­ 'foobar/frobozz' °ú ¸ÅÄ¡µÉ °ÍÀÌ´Ù.

FNM_CASEFOLD

ÆÐÅÏ¿¡ ºñ±³µÇ´Â ¹®ÀÚ¿­ÀÇ ´ë,¼Ò¹®ÀÚ ±¸ºÐÀ» ¹«½ÃÇ϶ó.

16.2 Globbing

¿ÍÀϵåÄ«µåÀÇ ÀüÇüÀûÀÎ »ç¿ëÀº µð·ºÅ丮 ¾È¿¡ ÀÖ´Â ÆÄÀϵé°ú ¸ÂÃ߾ ¸ÅÄ¡µÇ´Â ¸ðµç ÆÄÀϵéÀÇ ¸® ½ºÆ®¸¦ ¸¸µé±â À§ÇÔÀÌ´Ù. À̰ÍÀº globbingÀ̶ó°í ºÎ¸¥´Ù.

´ç½ÅÀº fnmatch ¸¦ »ç¿ëÇØ¼­ Çϳª¾¿ µð·ºÅ丮 ¿£Æ®¸®µé(entries)À» Àаí, Å×½ºÆ® ÇÔÀ¸·Î½á ÀÌ·±ÀÏÀ» ÇÒ ¼ö°¡ ÀÖ´Ù. ±×·¸Áö¸¸, ¼Óµµ°¡ ´À¸®´Ù. (±×¸®°í Á÷Á¢ ¼­ºêµð·ºÅ丮µé(subdirectories)À» ´Ù·ç±â ¶§¹® ¿¡ º¹ÀâÇÏ´Ù.)

¶óÀ̺귯¸®´Â Æí¸®ÇÑ ¿ÍÀϵåÄ«µå¸¦ Ưº°ÇÏ°Ô »ç¿ëÇϵµ·Ï Çϱâ À§ÇØ glob ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. glob °ú ÀÌÀý¿¡ ÀÖ´Â ´Ù¸¥ ½Éº¼µéÀº 'glob.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

16.2.1 glob È£ÃâÇϱâ.

globbingÀÇ °á°ú´Â ÆÄÀÏ À̸§µé(¹®ÀÚ¿­)ÀÇ º¤ÅÍ(vector)ÀÌ´Ù. ÀÌ º¤Å͸¦ ¸®ÅÏÇϱâ À§Çؼ­, globÀº ±¸Á¶Ã¼ÀÎ golb_t ¶ó´Â Ưº°ÇÑ µ¥ÀÌÅÍŸÀÔÀ» »ç¿ëÇÑ´Ù. ´ç½ÅÀÌ glob¿¡°Ô ±¸Á¶Ã¼ÀÇ ÁÖ¼Ò¸¦ ÁÖ¸é, glob Àº ±× ±¸Á¶Ã¼ÀÇ °¢ Çʵ带 ä¿ö¼­ ´ç½Å¿¡°Ô ±× °á°ú¸¦ ¾Ë¸°´Ù.

µ¥ÀÌÅÍŸÀÔ : glob__t

ÀÌ µ¥ÀÌÅÍŸÀÔÀº º¤Å͸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù. ´õ ÀÚ¼¼ÇÏ°Ô ¸»ÇÏÀÚ¸é, ±×°ÍÀº º¤ÅÍÀÇ ÁÖ¼Ò¿Í ±× Å©±â¸¦ °®°íÀÖ´Â ·¹ÄÚµåÀÌ´Ù.

gl_pathc

º¤Å;ȿ¡ ÀÖ´Â ¿ä¼ÒµéÀÇ °³¼ö

gl_pathv

º¤ÅÍÀÇ ÁÖ¼Ò. ÀÌ Çʵå´Â char ** ÇüÀ» °®´Â´Ù.

gl_offs

gl_pathv Çʵå¾È¿¡ ÀÖ´Â ¸í¸ñ»óÀÇ ÁּҷκÎÅÍ ±¸ÇÑ, º¤ÅÍÀÇ Ã¹ ¹øÂ° ½Ç ¿ä¼ÒÀÇ offset. ´Ù¸¥ Çʵåµé °ú ´Þ¸®, À̰ÍÀº globÀ¸·ÎºÎÅÍ ³ª¿Â Ãâ·ÂÀÌ ¾Æ´Ï¶ó, Ç×»ó glob¿¡¼­ ÀÔ·ÂÀ¸·Î »ç¿ëµÈ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ 0ÀÌ ¾Æ´Ñ offsetÀ» »ç¿ëÇϸé, º¤ÅÍÀÇ ½ÃÀÛÁ¡À¸·ÎºÎÅÍ ´Ù¸¥ ¿ä¼ÒµéÀº ºñ¾îÀִ ä·Î ¿ÞÂÊ¿¡ Á¸ÀçÇÑ´Ù. ( glob ÇÔ¼ö´Â ³Î Æ÷ÀÎÅÍ·Î ±×µéÀ» ä¿î´Ù.) gl_offs Çʵå´Â ´ç½ÅÀÌ GLOB_DOOFFS Ç÷¡±×µé »ç¿ë ÇÒ¶§¸¸ Àǹ̰¡ ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é, offsetÀº ÀÌ Çʵå¾È¿¡ ¹«¾ùÀÌ ÀÖ´øÁö »ó°ü¾øÀÌ Ç×»ó 0À̰í, ù ¹øÂ° ½Ç ¿ä¼Ò´Â º¤ÅÍÀÇ ½ÃÀÛÁ¡¿¡ ÀÖ´Ù.

ÇÔ¼ö : int glob (const char *pattern, int flags, int (*errfunc) (const char *filename, int error-code), glob_t *vector_ptr)

glob ÇÔ¼ö´Â ÇöÀçÀÇ µð·ºÅ丮¿¡¼­ ÆÐÅÏ patternÀ» »ç¿ëÇØ¼­ globbingÀ» ÇÑ´Ù. ±×°ÍÀº »õ·ÎÀÌ ÇÒ´çµÈ º¤ÅÍ¿¡ ±× °á°ú¸¦ ³Ö°í, *vector'ptr¿¡ ÀÌ º¤ÅÍÀÇ ÁÖ¼Ò¿Í Å©±â¸¦ ÀúÀåÇÑ´Ù. flagsÀμö´Â ºñÆ® Ç÷¡±× µéÀÇ Á¶ÇÕÀÌ´Ù; Ç÷¡±×µé¿¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸´Â 16.2.2Àý [Flags for Globbing] 223 ÆäÀÌÁö¸¦ ÂüÁ¶ÇÏ ¶ó.

globbingÀÇ °á°ú´Â ÆÄÀÏÀ̸§µéÀÇ ¹®ÀÚ¿­ÀÌ´Ù. glob ÇÔ¼ö´Â °¢ °á°ú¸¦ À§Çؼ­ ¿öµå(word) ´ÜÀ§ÀÇ ¹® ÀÚ¿­À» ÇÒ´çÇϰí, ÀÌµé ¹®ÀÚ¿­ÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇϱâ À§Çؼ­ char ** ÇüÀÇ º¤Å͸¦ ÇÒ´çÇÑ´Ù. º¤ÅÍÀÇ ¸¶ Áö¸· ¿ä¼Ò´Â ³Î Æ÷ÀÎÅÍÀÌ´Ù. ÀÌ º¤ÅÍ´Â ¿öµå º¤ÅÍ(word vector)¶ó°í ºÒ¸°´Ù.

ÀÌ º¤Å͸¦ ¸®ÅÏÇϱâ À§Çؼ­, glob´Â *vector'ptr¿¡ ±× ÁÖ¼Ò¿Í ±æÀ̸¦ (³Î Æ÷ÀÎÅÍ·Î ³¡³ª´Â °ÍÀ» ¼¼Áö ¾ÊÀº, ¿ä¼ÒµéÀÇ °³¼ö) ÀúÀåÇÑ´Ù. º¸Åë, glob´Â ±×µéÀ» ¸®ÅÏÇϱâ Àü¿¡ ¾ËÆÄºª¼øÀ¸·Î ÆÄÀÏ À̸§µéÀ» Á¤ ·ÄÇÑ´Ù. ´ç½ÅÀº ¸¸ÀÏ ´ç½ÅÀÌ °¡´ÉÇÑÇÑ »¡¸® ±× Á¤º¸¸¦ ¾ò±â¸¦ ¿øÇÑ´Ù¸é GLOB_NOSORT Ç÷¡±×¸¦ »ç¿ëÇØ¼­ ÀÌ ±â´ÉÀ» ÀÌ¿ëÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¾ËÆÄºª ¼øÀ¸·Î ÆÄÀϵéÀ» ó¸®ÇÑ´Ù¸é, º¸Åë Àº glob°¡ Á¤·ÄÇϵµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ°í, ´ç½ÅÀÌ ¸¸µç ÀÀ¿ëÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â »ç¿ëÀÚµéÀº ÇÁ·Î±×·¥ ¿¡ ´ëÇÑ °¡Ä¡¸¦ ´À³¥ °ÍÀÌ´Ù. glob ÇÔ¼ö°¡ ¼º°øÇϸé 0À» ¸®ÅÏÇϰí, ±×·¸Áö ¾Ê´Ù¸é ±×°ÍÀº ´ÙÀ½ ¿¡·¯ ÄÚµåÁß Çϳª¸¦ ¸®ÅÏÇÑ´Ù.

GLOB_ABORTED

µð·ºÅ丮 °³¹æ¿¡¼­ ¿¡·¯°¡ ÀÖ¾ú°í, ±×¸®°í ´ç½ÅÀÌ GLOB_ERR Ç÷¡±×¸¦ »ç¿ëÇ߰ųª errfunc°¡ 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇß´Ù. GLOB_ERR Ç÷¡±×¿Í errfunc ¿¡ ´ëÇÑ ¼³¸íÀº ¾Æ·¡¸¦ ÂüÁ¶Ç϶ó.

GLOB_NOMATCH

patternÀÌ ÇöÁ¸ÇÏ´Â ÆÄÀϵé°ú ¾Æ¹«°Íµµ ¸ÂÁö¾Ê´Â´Ù. ¸¸ÀÏ ´ç½ÅÀÌ GLOB_NOCHECK Ç÷¡±×¸¦ »ç¿ë Çϸé, ÀÌ ¿¡·¯ÄÚµå´Â °áÄÚ ³ª¿ÀÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé ÀÌ Ç÷¡±×´Â Àû¾îµµ ÇÑ °³ÀÇ ÆÄÀÏÀÌ ÆÐÅϰú ¸Â´Â °ÍÀÌ Àִ°Íó·³ globÀÌ °¡ÀåÇϵµ·Ï Çϱ⠶§¹®ÀÌ´Ù.

GLOB_NOSPACE

±× °á°ú¸¦ ÀúÀåÇϱâ À§ÇÑ ¸Þ¸ð¸® ÇÒ´çÀÌ ºÒ°¡´ÉÇÏ´Ù.

¿¡·¯°¡ ¹ß»ýÇϸé, glob´Â Áö±Ý±îÁö ¹ß°ßÇÑ pattern°ú ¸ÅÄ¡µÇ´Â °ÍÀ» *vector`ptr¿¡ Á¤º¸¸¦ ÀúÀåÇÑ´Ù.

16.2.2 Globbing À» À§ÇÑ Ç÷¡±×µé.

ÀÌ ÀýÀº glob ¿¡°Ô flags Àμö·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Â Ç÷¡±×µéÀ» ¼³¸íÇÑ´Ù. ´ç½ÅÀÌ ¿øÇÏ´Â Ç÷¡±×¸¦ ¼± ÅÃÇϰí, ºñÆ®º° OR ¿¬»êÀÚ | À» »ç¿ëÇØ¼­ ±×µéÀ» Á¶ÇÕÇ϶ó.

GLOB_APPEND

¾Õ¼­¼­ È£ÃâÇÑ globÀÌ ¸¸µé¾î³½ À§µå º¤ÅÍ¿¡ »õ·Î¿î ¿öµåº¤Å͸¦ ºÙÀδÙ. À̰ÍÀº ±×µé»çÀ̸¦ °ø¹é À¸·Î ¿¬°áÇØ¼­ ¿©·¯ ¿öµåµéÀ» È¿À²ÀûÀ¸·Î È®ÀåÇÒ ¼ö ÀÖ´Ù. ºÙÀÌ´Â ÀÛ¾÷À» ÇÏ·Á¸é, glob È£Ã⵿¾È ±¸ Á¶Ã¼ ¿öµå º¤ÅÍÀÇ ³»¿ëÀ» º¯È­½ÃÄѼ­´Â ¾ÈµÈ´Ù. ±×¸®°í ¸¸ÀÏ ´ç½ÅÀÌ globÀÇ Ã³À½ È£Ãâ¿¡¼­ GLOB_DOOFFS ¸¦ ¼³Á¤Çϸé, ´ç½ÅÀÌ ±× °á°úµéÀ» ºÙÀ϶§µµ ¹Ýµå½Ã ±×°ÍÀ» ¼³Á¤Çؾ߸¸ ÇÑ´Ù. gl_pathv ¿¡ ÀúÀåÇÑ Æ÷ÀÎÅÍ´Â ´ç½ÅÀÌ µÎ ¹øÂ° globÀ» È£ÃâÇÑ ÀÌÈÄ¿¡´Â ´õ ÀÌ»ó À¯¿ëÇÑ Á¤º¸°¡ ¾Æ´Ô À» ±â¾ïÇ϶ó. ¿Ö³ÄÇϸé, globÀÌ ±× º¤ÅÍÀÇ À§Ä¡¸¦ ¹Ù²Ù±â ¶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î Ç×»ó ¸Å¹ø globÀ» È£Ãâ ÇÑ ÈÄ¿¡ ¹Ù·Î ±¸Á¶Ã¼ glob_t ¿¡¼­ gl_pathv¸¦ ÃßÃâÇ϶ó; È£ÃâÀ» °ÅÃÄ ±× Æ÷ÀÎÅ͸¦ °áÄÚ ÀúÀåÇÏÁö ¸» ¾Æ¶ó.

GLOB_DOOFFS

¿öµå º¤ÅÍÀÇ ½ÃÀÛÁ¡¿¡ ºó ½½·ÔÀ» ³²°Ü¶ó. gl_offs´Â ¾ó¸¶³ª ¸¹Àº ½½·ÔÀ» ³²°Ü¾ß ÇÏ´ÂÁö¸¦ ¾Ë¸°´Ù. ºó ½½·ÔÀº ³Î Æ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù.

GLOB_ERR

Áï½Ã Æ÷±âÇÏ°í ¼ø¼­´ë·Î ÀÐÇôÁ®¾ß¸¸ ÇÏ´Â µð·ºÅ丮¸¦ Àдµ¥ ¾î¶² ¾î·Á¿òÀÌ ÀÖ´Ù¸é, ±× ¿¡·¯¸¦ º¸ °íÇ϶ó. ±×¿Í °°Àº ¾î·Á¿òµéÀº ´ç½ÅÀÌ ÇÊ¿äÇÑ Á¢±ÙÀ» °®Áö¸øÇÑ µð·ºÅ丮¸¦ Æ÷ÇÔÇ߱⠶§¹®ÀÏ °ÍÀÌ´Ù. º¸Åë, glob´Â ±× µð·ºÅ丮°¡ ¹«¾ùÀ̵çÁö, ¾î¶² ¿¡·¯¿¡µµ ºÒ±¸Çϰí, °è¼Ó ½ÇÇàÇÏ·Á ½ÃµµÇÑ´Ù. ´ç½ÅÀº glob¸¦ È£ÃâÇÒ ¶§ ¿¡·¯-ó¸® ÇÔ¼ö errfunc¸¦ Á¤ÇÔÀ¸·Î ÇØ¼­ À̰ͺ¸´Ù ´õ ¸¹Àº Á¦¾î¸¦ ½ÇÇàÇÒ ¼ö ÀÖ ´Ù. ¸¸ÀÏ errfunc °¡ ³ÎÆ÷ÀÎÅͰ¡ ¾Æ´Ï¶ó¸é, glob´Â µð·ºÅ丮¸¦ ÀÐÀ» ¼ö ¾øÀ» ¶§ Áï½Ã ½ÇÇàÀ» ¸ØÃßÁö ¾Ê°í; ´ë½Å ´ÙÀ½Ã³·³ µÎ °³ÀÇ Àμö¸¦ »ç¿ëÇØ¼­ errfunc ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù:

(*errfunc) (filename, error-code)

filenameÀμö´Â globÀÌ °³¹æÇÒ ¼ö ¾ø°Å³ª, ÀÐÀ»¼ö ¾ø¾ú´ø µð·ºÅ丮ÀÇ À̸§À̰í, error-code´Â glob¿¡ ¼­ º¸°íµÈ ¿¡·¯°ªÀÌ´Ù. ¸¸ÀÏ ¿¡·¯Ã³¸² ÇÔ¼ö°¡ ¿µÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇϸé, glob´Â Áï½Ã ¸ØÃá´Ù. ±×·¸ Áö ¾Ê´Ù¸é °è¼Ó ½ÇÇàÇÑ´Ù.

GLOB_MARK

¸¸ÀÏ patternÀÌ µð·ºÅ丮 À̸§°ú ¸ÅÄ¡µÇ¸é, ±×°ÍÀ» ¸®ÅÏÇÒ ¶§, µð·ºÅ丮ÀÇ À̸§¿¡ '/'¸¦ µ¡ºÙ¿©¶ó.

GLOB_NOCHECK

¸¸ÀÏ patternÀÌ ¾î¶² ÆÄÀÏ À̸§°úµµ ¸ÅÄ¡°¡ µÇÁö ¾ÊÀ¸¸é, ¸ÅÄ¡µÇ´Â ÆÄÀÏ À̸§ÀÌ Àִ°Íó·³ pattern ±× ÀÚü¸¦ ¸®ÅÏÇÑ´Ù. (º¸Åë, patternÀÌ ¾î´À°Í°úµµ ¸ÅÄ¡°¡ ¾ÈµÉ ¶§, glob´Â ¸ÅÄ¡µÇ´Â °ÍÀÌ ¾Æ¹«°Íµµ ¾øÀ½À» ¸®ÅÏÇÑ´Ù. )

GLOB_NOSORT

ÆÄÀÏ À̸§µéÀ» Á¤·ÄÇÏÁö ¸»¾Æ¶ó; Ưº°ÇÑ ¼ø¼­¾øÀÌ ±×µéÀ» ¸®ÅÏÇÏ´Ù. ( ½ÇÁ¦·Î, ±× ¼ø¼­´Â µð·ºÅ丮 ¿¡ ÀÖ´Â ¿£Æ®¸®ÀÇ ¼ø¼­¿¡ ÀÇÁ¸ÇÒ °ÍÀÌ´Ù. ) Á¤·ÄÇÏÁö ¾Ê´Â À¯ÀÏÇÑ ÀÌÀ¯´Â ½Ã°£À» Àý¾àÇϱâ À§ÇÔÀÌ ´Ù.

GLOB_NOESCAPE

patternµé¿¡ ÀÖ´Â '\' ¹®ÀÚ¸¦ Ưº°ÇÏ°Ô Ãë±ÞÇÏÁö ¸»¾Æ¶ó. º¸Åë, '\'°¡ ±× ´ÙÀ½¿¡ ³ªÅ¸³ª´Â ¹®ÀÚµéÀ» ÀοëÇØ¼­, ±× ¹®ÀÚµéÀÌ °®´Â Ưº°ÇÑ ±â´ÉÀ» ¾ø¾Ø´Ù. Àοë(quoting)ÀÌ °¡´ÉÇÒ ¶§, ÆÐÅÏ '\?'Àº ¿ÀÁ÷ ¹®ÀÚ¿­ '?'·Î ¸ÅÄ¡µÇ´Âµ¥, ±× ÀÌÀ¯´Â pattern¿¡ ÀÖ´Â Àǹ®ºÎÈ£°¡ º¸ÅëÀÇ ¹®ÀÚó·³ ÇൿÇϱ⠶§¹®ÀÌ´Ù.

¸¸ÀÏ ´ç½ÅÀÌ GLOB_NOESCAPE¸¦ »ç¿ëÇϸé, '\'Àº º¸ÅëÀÇ ¹®ÀÚ°¡ µÈ´Ù. glob°¡ ¹Ýº¹ÀûÀ¸·Î fnmatch ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á ±× ÀÛ¾÷À» ÇÑ´Ù. fnmatchÀÇ È£Ãâ¿¡¼­ FNM_NOESCAPE°¡ ÄÔÀ¸·Î ÇØ¼­ GLOB_NOESCAPE Ç÷¡±×¸¦ Ãë±ÞÇÑ´Ù.

16.3 Á¤±Ô½Ä ¸ÅĪ(Matching).

GNU C ¶óÀ̺귯¸®´Â Á¤±Ô½ÄÀ» ¸ÅÄ¡Çϱâ À§ÇÑ µÎ °³ÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù. Çϳª´Â Ç¥ÁØ POSIX2 ÀÎÅÍÆäÀ̽ºÀ̰í, ´Ù¸¥ Çϳª´Â GNU ½Ã½ºÅÛÀÌ ¿À·¨µ¿¾È °¡Áö°í ÀÖ¾ú´ø °ÍÀÌ´Ù.

µÎ °³ÀÇ ÀÎÅÍÆäÀ̽º´Â Çì´õÆÄÀÏ 'regex.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ _POSIX_C_SOURCE ¶ó°í Á¤ÀÇÇϸé, ¿ÀÁ÷ POSIX.2ÀÇ ÇÔ¼öµé, ±¸Á¶Ã¼, ±×¸®°í »ó¼öµé·Î¸¸ ¼±¾ðµÇ¾î Áø´Ù.

16.3.1 POSIX Á¤±Ô½Ä ÄÄÆÄÀÏ.

´ç½ÅÀÌ ½ÇÁ¦·Î Á¤±Ô½ÄÀ» ¸ÅÄ¡Çϱâ Àü¿¡, ´ç½ÅÀº ±×°ÍÀ» ÄÄÆÄÀÏ ÇØ¾ß¸¸ ÇÑ´Ù. À̰ÍÀº ½ÇÁ¦·Î ¿ì¸®°¡ »ý°¢Çϰí ÀÖ´Â, ±â°è ¸í·É¾î·Î ¹Ù²Ù´Â ±×·± ½ÇÁ¦ÀÇ ÄÄÆÄÀÏÀÌ ¾Æ´Ï¶ó Ưº°ÇÑ µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ »ý¼ºÇÏ ´Â °ÍÀ» ¸»ÇÑ´Ù. ±×·¯³ª ±×°ÍÀº ´ç½ÅÀº ±× ÆÐÅÏÀ» "½ÇÇà"ÀÌ °¡´ÉÇϵµ·Ï ¸¸µé·Á ÇÏ´Â ¸ñÀûÀ»

°®°í ÀÖ´Ù´Â Á¡¿¡¼­ º¸ÅëÀÇ ÄÄÆÄÀϰú °°´Ù. (ÄÄÆÄÀÏµÈ ÀÏ¹Ý Ç¥Çö½ÄÀ» ¾î¶»°Ô ¸ÅÄ¡ÇÏ´ÂÁö¿¡ ´ëÇÑ Á¤ º¸´Â 16.3.3Àý [Matching POSIX Regexps], 226 ÆäÀÌÁö ÂüÁ¶.)

ÄÄÆÄÀÏµÈ Á¤±Ô½ÄÀ» À§ÇÑ Æ¯º°ÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀº ¾Æ·¡¿Í °°´Ù.

µ¥ÀÌÅÍŸÀÔ : regex__t

À̰ÍÀº ÄÄÆÄÀÏµÈ Á¤±Ô½ÄÀ» ÀúÀåÇÏ´Â ¿ÀºêÁ§Æ®ÀÇ Å¸ÀÔÀÌ´Ù. ±×°ÍÀº ½ÇÁ¦·Î ±¸Á¶Ã¼ÀÌ´Ù. ´ç½ÅÀº ´ç½Å ÀÇ ÇÁ·Î±×·¥¿¡¼­ ¹Ø¿¡ º¸¿©Áø ¿ÀÁ÷ ÇϳªÀÇ Çʵ常 °¡Áø´Ù.

re_nsub ÀÌ Çʵå´Â ÄÄÆÄÀÏµÈ Á¤±Ô½Ä¿¡ Á¸ÀçÇÏ´Â °ýÈ£·Î ¹­¿©Áø ºÎÁ¤±Ô½Ä(subexpressions)ÀÇ °³¼ö ¸¦ ÀúÀåÇÑ´Ù.

±× ±¸Á¶Ã¼¿¡´Â ¿©·¯ °¡Áö ´Ù¸¥ ÇʵåµéÀÌ ÀÖÁö¸¸, ¿ì¸®´Â ¿©±â¼­ ±×µéÀ» ¼³¸íÇÏÁö ¾Ê°Ú´Ù. ¿Ö³ÄÇÏ¸é ´Ù¸¥ ÇʵåµéÀº ¿ì¸®°¡ ÀÓÀÇ´ë·Î °Çµå¸± ¼ö ¾ø°í, ¿ÀÁ÷ ¶óÀ̺귯¸® ÇÔ¼ö¿¡¼­¸¸ ±×µéÀ» »ç¿ëÇϱâ

¶§¹®ÀÌ´Ù. ´ç½ÅÀÌ regex_t ¿ÀºêÁ§Æ®¸¦ ¸¸µçÈÄ¿¡, ´ç½ÅÀº regcomp¸¦ È£ÃâÇÔÀ¸·Î½á Á¤±Ô½ÄÀ» ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù.

ÇÔ¼ö : int regcomp (regex_t *compiled, const char *pattern, int cflags)

regcomp ÇÔ¼ö´Â ¹®ÀÚ¿­°ú ¸ÅÄ¡½Ã۴µ¥ »ç¿ëÇÏ´Â regexec¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Á¤±Ô½ÄÀ» µ¥ÀÌÅÍ ±¸ Á¶Ã¼·Î "ÄÄÆÄÀÏ"ÇÑ´Ù. ÄÄÆÄÀÏµÈ Á¤±Ô½ÄÀÇ Çü½ÄÀº ¸ÅĪ(matching)¿¡ È¿À²ÀûÀÌ°Ô ¸¸µé¾îÁ³´Ù. regcomp´Â *compiled¿¡ ±×°ÍÀ» ÀúÀåÇÑ´Ù.

´ç½ÅÀº regex_t ŸÀÔÀÇ ¿ÀºêÁ§Æ®¸¦ ÇÒ´çÇÑ ´ÙÀ½ ±× ÁÖ¼Ò¸¦ regcomp¿¡°Ô ÁÖ¾î¶ó. Àμö cflags´Â Á¤ ±Ô½ÄÀÇ ±¸¹®°ú Àǹ̵éÀ» Á¦¾îÇÏ´Â ´Ù¾çÇÑ ¿É¼ÇÀ» Á¤ÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇÑ´Ù. 16.3.2Àý [Flags for POSIX Regexps] 225 ÆäÀÌÁö ÂüÁ¶. ¸¸ÀÏ ´ç½ÅÀÌ REG_NOSUBÇ÷¡±×¸¦ »ç¿ëÇÑ´Ù¸é, regcomp´Â ¾î ¶»°Ô ºÎÁ¤±Ô½ÄÀÌ ½ÇÁ¦·Î ¸ÅÄ¡µÇ´ÂÁö¸¦ ±â·ÏÇϱâÀ§ÇØ ÇÊ¿äÇÑ Á¤º¸¸¦ ÄÄÆÄÀÏµÈ Á¤±Ô½Ä¿¡¼­ »ý·«ÇÑ´Ù. ÀÌ °æ¿ì, ´ç½ÅÀº regexec¸¦ È£ÃâÇÒ ¶§ matchptr °ú nmatchÀμö·Î 0À» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ REG_NOSUB ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é, ÄÄÆÄÀÏµÈ Á¤±Ô½ÄÀº ¾î¶»°Ô ºÎÁ¤±Ô½ÄÀ» ¸ÅÄ¡ÇÏ´Â Áö¸¦ ±â·ÏÇÏ´Â ¿ë·®À» °®´Â´Ù. ¶ÇÇÑ, regcomp´Â ¾ó¸¶³ª ¸¹Àº ºÎÁ¤±Ô½Ä ÆÐÅÏÀ» °¡Á³´ÂÁö¸¦ compiled->re_nsub ¿¡ ÀúÀåÇÏ¿© ´ç½Å¿¡°Ô ¾Ë¸°´Ù. ´ç½ÅÀº ±×°ÍÀ» ºÎÁ¤±Ô½Ä ¸ÅÄ¡¿¡ ´ëÇÑ Á¤º¸¸¦ Àú ÀåÇÒ°÷À» ÇÒ´çÇϱâ À§ÇØ ¾ó¸¶³ª ±ä ¹è¿­À» ÇÒ´çÇÒÁö¸¦ Á¤ÇϱâÀ§ÇÑ °ªÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

regcomp´Â Á¤±Ô½ÄÀ» ÄÄÆÄÀÏ Çϴµ¥ ¼º°øÇϸé 0À» ¸®ÅÏÇϰí; ±×·¸Áö ¾ÊÀ¸¸é 0ÀÌ ¾Æ´Ñ ¿¡·¯ÄÚµå( ¹Ø ¿¡ ¼³¸íµÈ )¸¦ ¸®ÅÏÇÑ´Ù. ´ç½ÅÀº ±× ¿¡·¯ÄÚµåÀÇ ¹ß»ýÀÌÀ¯¸¦ ¼³¸íÇÒ ¿¡·¯¸Þ¼¼Áö¸¦ ¸¸µé±â À§Çؼ­´Â regerrorÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù; 16.3.6Àý [Regexp Cleanup] 227 ÆäÀÌÁö ÂüÁ¶. À̰͵éÀº regcomp°¡ ¸®ÅÏ ÇÒ ¼ö ÀÖ´Â 0ÀÌ ¾Æ´Ñ°ªµéÀÌ´Ù.

REG_BADBR

Á¤±Ô½Ä¾È¿¡ À¯¿ëÇÏÁö ¾ÊÀº `\{. . .\}` ±¸¼ºÀÌ ÀÖ¾ú´Ù. À¯¿ëÇÑ `\{. . .}\` ±¸¼ºÀº ´ÜÀÏÇÑ ¼ýÀÚ, ¶Ç´Â ÄÞ ¸¶·Î ºÐ¸®µÈ ¿À¸§Â÷¼øÀ¸·Î µÈ µÎ °³ÀÇ ¼ýÀÚÁß Çϳª¸¦ Æ÷ÇÔÇØ¾ß¸¸ ÇÑ´Ù.

REG_BADPAT

Á¤±Ô½Ä¿¡ ±¸¹®¿¡·¯°¡ ÀÖ¾ú´Ù.

REG_BADRPT

`?' ³ª `*' ¿Í °°Àº ¹Ýº¹ ¿¬»êÀÚ°¡ ³ª»Û À§Ä¡¿¡ ÀÖ´Ù ( ¼±ÇàÇÏ´Â ¾Æ¹«·± ºÎÇ¥Çö½Äµµ ¾øÀÌ ).

REG_ECOLLATE

Á¤±Ô½ÄÀÌ À¯¿ëÇÏÁö ¾ÊÀº ´ëÁ¶(collating) ¿ä¼Ò¸¦ ÂüÁ¶ÇÏ¿´´Ù. (¹®ÀÚ¿­ ´ëÁ¶¸¦ À§Çؼ­ ÇöÀçÀÇ Áö¿ª¿¡¼­ Á¤ÀǵÇÁö ¾ÊÀº °Í.) 19.3Àý [Locale Categories] 260 ÆäÀÌÁö ÂüÁ¶.)

REG_ECTYPE

Á¤±Ô½ÄÀÌ À¯¿ëÇÏÁö ¾ÊÀº Ŭ·¡½º À̸§À» ÂüÁ¶ÇÏ¿´´Ù.

REG_EESCAPE

Á¤±Ô½ÄÀÌ `\' À¸·Î ³¡³µ´Ù.

REG_ESUBREG

`\digit' ±¸¼º¿¡ À¯¿ëÇÏÁö ¾ÊÀº ¼ýÀÚ°¡ ÀÖ¾ú´Ù.

REG_EBRACK

Á¤±Ô½Ä ¾È¿¡ ±ÕÇüÀÌ ¸ÂÁö ¾Ê´Â sqrare brackets([,])ÀÌ ÀÖ¾ú´Ù.

REG_EPAREN

¿¬ÀåµÈ Á¤±Ô½ÄÀÌ ±ÕÇüÀÌ ¸ÂÁö ¾Ê´Â °ýÈ£¸¦ °®¾ú°Å³ª, ±âº» Á¤±Ô½ÄÀÌ ±ÕÇüÀÌ ¸ÂÁö ¾Ê´Â `\(' ¿Í `\)'¸¦ °¡Á³´Ù.

REG_EBRACE

Á¤±Ô½ÄÀÌ ±ÕÇüÀÌ ¸ÂÁö ¾Ê´Â `\{' ¿Í `\}'À» °¡Á³´Ù.

REG_ERANGE

¹üÀ§ Ç¥Çö½Ä¿¡¼­ ³¡Á¡ÀÇ Çϳª°¡ À¯¿ëÇÏÁö ¾Ê´Ù.

REG_ESPACE

regcomp°¡ ¸Þ¸ð¸®¸¦ ´Ù ½á¹ö·È´Ù.

16.3.2 POSIX Á¤±Ô½ÄÀ» À§ÇÑ Ç÷¡±×µé.

regcomp·Î Á¤±Ô½ÄÀ» ÄÄÆÄÀÏÇÒ ¶§ ÇÇ¿¬»êÀÚ cflags¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ºñÆ®Ç÷¡±×µé¿¡ ´ëÇÑ ¼³¸íÀÌ ´Ù.

REG_EXTENDED

±âº» Á¤±Ô½ÄÀÌ ¾Æ´Ñ, ¿¬ÀåµÈ Á¤±Ô½ÄÀ¸·Î ÆÐÅÏÀ» Ãë±ÞÇ϶ó.

REG_ICASE

¹®ÀÚµéÀ» ¸ÅÄ¡ÇÒ ¶§ ´ë,¼Ò¹®ÀÚ ±¸ºÐÀ» ¹«½ÃÇ϶ó.

REG_NOSUB

match_ptr ¹è¿­¿¡ ÀúÀåÇÑ ³»¿ëµéÀ» °Çµå¸®Áö ¸»¾Æ¶ó.

REG_NEWLINE

¹®ÀÚ¿­¿¡ ÀÖ´Â »õÁÙ¹®ÀÚ¸¦ ¿©·¯°³ÀÇ ¶óÀÎÀ¸·Î ¹®ÀÚ¿­À» ³ª´©´Â ¿ªÇÒÀ» ÇÏ´Â °Í ó·³ Ãë±ÞÇÑ´Ù, ±×·¡ ¼­ `$'Àº »õÁÙ ¹®ÀÚ Àü¿¡ ¸ÅÄ¡ÇÒ ¼ö ÀÖ°í, `^'Àº»õÁÙ¹®ÀÚ ÈÄ¿¡ ¸ÅÄ¡ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ, »õÁÙ¹®ÀÚ¿Í ¸Å Ä¡Çϱâ À§ÇØ `.'À» Çã¿ëÇÏÁö ¾Ê°í, `[^. . .]'À» Çã¿ëÇÏÁö ¾Ê´Â´Ù. ±×·¸Áö ¾Ê´Ù¸é »õÁÙ¹®ÀÚ´Â ´Ù¸¥ º¸ ÅëÀÇ ¹®ÀÚµéó·³ ÀÛ¿ëÇÑ´Ù.

16.3.3 ÄÄÆÄÀÏµÈ POSIX Á¤±Ô½ÄÀ» ¸ÅĪÇϱâ.

ÀÏ´Ü ´ç½ÅÀÌ 16.3.1Àý [POSIX Regexp Compilation] 224 ÆäÀÌÁö¿¡¼­ ¼³¸íµÈ°Íó·³ ÄÄÆÄÀÏµÈ Á¤±Ô ½ÄÀ» °¡Á³´Ù¸é, ´ç½ÅÀº regexec¸¦ »ç¿ëÇØ¼­ ¹®ÀÚ¿­°ú ±×°ÍÀ» ¸ÅÄ¡ÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ Á¤±Ô½ÄÀÌ `^' ³ª `$' ¿Í °°Àº °íÁ¤¹®ÀÚµéÀ» Ç¥ÇÔÇϰí ÀÖÁö ¾Ê´Ù¸é, ¹®ÀÚ¿­¾È¿¡ ¾îµð¿¡¼­µçÁö ¸ÅÄ¡µÇ´Â °ÍÀº

¼º°øÀ¸·Î ¼¾´Ù.

ÇÔ¼ö : int regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr [], int eflags)

ÀÌ ÇÔ¼ö´Â ¹®ÀÚ¿­À» ÄÄÆÄÀÏµÈ Á¤±Ô½Ä*compiled¿Í ¸ÅÄ¡ÇÏ·Á ½ÃµµÇÑ´Ù. regexec ´Â ¸¸ÀÏ Á¤±Ô½ÄÀÌ ¸Å Ä¡µÇ¸é 0À» ¸®ÅÏÇϰí; ±×·¸Áö ¾Ê´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù. 0ÀÌ ¾Æ´Ñ°ªµéÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö ¹Ø Å×ÀÌºí¿¡ ¼³¸íÇØ ³õ¾Ò´Ù. ´ç½ÅÀº 0ÀÌ ¾Æ´Ñ°ªÀÌ ¹ß»ýÇÏ´Â ÀÌÀ¯¸¦ ¼³¸íÇÒ ¿¡·¯ ¸Þ½ÃÁö¸¦ »ý¼ºÇϵµ ·Ï regerror ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù; 16.3.6Àý [Regexp Cleanup] 227 ÆäÀÌÁö ÂüÁ¶.

Àμö eflags´Â ´Ù¾çÇÑ ¿É¼ÇµéÀ» °¡´ÉÇϵµ·Ï ÇÏ´Â ºñÆ®Ç÷¡±×µéÀÇ ÁýÇÕÀÎ ¿öµåÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¹® ÀÚ¿­ÀÌ Á¤±Ô½Ä°ú ¸ÅÄ¡µÈ°÷ÀÌ ½ÇÁ¦·Î ¾î´ÀºÎºÐÀÎÁö ¶Ç´Â ±× ºÎÇ¥Çö½ÄÀº ¹«¾ùÀÎÁö¸¦ ¾Ë±â¸¦ ¿øÇÑ´Ù¸é Àμö matchptr °ú nmatch¸¦ »ç¿ëÇ϶ó. ±×·¸Áö ¾Ê´Ù¸é nmatch¿¡´Â 0À» ÁÖ°í matchptr¿¡´Â NULLÀ» ÁÖ¾î¶ó. 16.3.4Àý [Regexp Subexpressions] 226 ÆäÀÌÁö ÂüÁ¶.

´ç½ÅÀÌ Á¤±Ô½ÄÀ» ÄÄÆÄÀÏÇßÀ» ¶§ ±× ÄÄÆÄÀÏµÈ Á¤±Ô½ÄÀº ½ÇÁ¦·Î ±×°ÍÀÌ ÇöÀç À§Ä¡ÇÑ Áö¿ª¿¡ ¸Âµµ·Ï Á¤±Ô½ÄÀ» ¸ÅÄ¡ÇØ¾ß¸¸ ÇÑ´Ù. regexec ÇÔ¼ö´Â eflags Àμö¿¡¼­ ´ÙÀ½ Ç÷¡±×µéÀ» ¹Þ¾ÆµéÀδÙ.

REG_NOTBOL

ÇÑ ¶óÀÎÀÇ ½ÃÀÛÀÌ Á¤ÇØÁø ¹®ÀÚ¿­·Î ½ÃÀÛÇÏ´ÂÁö¸¦ ½Å°æ¾²Áö ¸»¾Æ¶ó; Áï, ¾î¶² ÅØ½ºÆ®ÀÇ ¾Õ¿¡ ¹«¾ùÀÌ ¼±ÇàÇØ¾ß¸¸ ÇÑ´Ù´Â ¾î¶² °¡Á¤µµ ¸¸µéÁö ¸»¾Æ¶ó.

REG_NOTEOL

ÇÑ ¶óÀÎÀÇ ³¡ÀÌ Á¤ÇØÁø ¹®ÀÚ¿­·Î ³¡³ª´ÂÁö¸¦ ½Å°æ¾²Áö ¸»¾Æ¶ó; Áï, ¾î¶² ÅØ½ºÆ®ÀÇ µÚ¿¡ ¹«¾ùÀÌ µû ¶ó¿Í¾ß¸¸ ÇÑ´Ù´Â ¾î¶² °¡Á¤µµ ¸¸µéÁö ¸»¾Æ¶ó.

regexec°¡ ¸®ÅÏÇÒ ¼ö ÀÖ´Â 0ÀÌ ¾Æ´Ñ°ªµé¿¡ ´ëÇÑ ¼³¸í.

REG_NOMATCH

ÆÐÅÏÀÌ ¹®ÀÚ¿­°ú ¸ÅÄ¡µÇ´Â °ÍÀÌ ¾ø´Ù. À̰ÍÀº »ç½Ç»ó ¿¡·¯´Â ¾Æ´Ï´Ù.

REG_ESPACE

regexec°¡ ¸Þ¸ð¸®¸¦ ´Ù ½á¹ö·È´Ù.

16.3.4 ºÎÇ¥Çö½Ä(Subexpressions)°ú ¸ÅÄ¡ÇÑ °á°ú.

regexecÇÔ¼ö°¡ ÆÐÅÏÀÇ °ýÈ£·Î ¹­ÀÎ ºÎ¹®ÀÚ¿­À» ¸ÅÄ¡ÇÒ ¶§, ±×°ÍÀº ¸ÅÄ¡ÇÒ·Á´Â ¹®ÀÚ¿­ÀÇ ºÎºÐµéÀ» ±â·ÏÇÑ´Ù. ±×°ÍÀº ±¸Á¶Ã¼ regmatch_t ÇüÀÎ ¿ä¼Ò¸¦ °¡Áø ¹è¿­¾ÈÀÇ offsets ¿¡ ÀúÀåÇÏ¿© ±× Á¤º¸¸¦ ¸® ÅÏÇÑ´Ù. ±× ¹è¿­(index 0)ÀÇ Ã¹ ¹øÂ°¿ä¼Ò´Â Àüü Á¤±Ô½Ä°ú ¸ÅÄ¡µÈ ¹®ÀÚ¿­ÀÇ ºÎºÐÀ» ±â·ÏÇÑ´Ù. ¹è¿­ ÀÇ ´Ù¸¥ ¿ä¼ÒµéÀº ´Ü ÇϳªÀÇ °ýÈ£·Î ¹­ÀÎ ºÎÇ¥Çö½Ä°ú ¸ÅÄ¡µÈ ºÎºÐÀÇ Ã³À½°ú ³¡À» ±â·ÏÇÑ´Ù.

µ¥ÀÌÅÍŸÀÔ : regmatch__t

À̰ÍÀº ´ç½ÅÀÌ regexec ÇÔ¼ö¿¡¼­ »ç¿ëÇϱâ À§ÇÑ ¹è¿­ matcharrayÀÇ µ¥ÀÌÅÍŸÀÔÀÌ´Ù. ±×°ÍÀº ´ÙÀ½°ú °°Àº µÎ °³ÀÇ ÇʵåµéÀ» °®°í ÀÖ´Ù.

rm_so

¹®ÀÚ¿­¿¡ ÀÖ´Â ºÎ¹®ÀÚ¿­ÀÇ ½ÃÀÛÁ¡ÀÇ offset. ±× ºÎºÐÀÇ ÁÖ¼Ò¸¦ ¾ò±âÀ§Çؼ­´Â ¹®ÀÚ¿­¿¡ ÀÌ °ªÀ» ´õÇÏ ¶ó.

rm_eo

¹®ÀÚ¿­¿¡ ÀÖ´Â ºÎ¹®ÀÚ¿­ÀÇ ³¡Á¡ÀÇ offset

µ¥ÀÌÅÍŸÀÔ : regoff__t

regoff_t´Â signed integer ÇüÀÇ ´Ù¸¥ À̸§ÀÌ´Ù. regmatch_tÀÇ ÇʵåµéÀº regoff_tÀÇ ÇüÀ» °®´Â´Ù.

regmatch_t ¿ä¼ÒµéÀº ºÎÇ¥Çö½ÄÀÇ À§Ä¡¿¡ ´ëÇÑ °ÍÀÌ´Ù; ù ¹øÂ° ¿ä¼Ò( index 1)´Â ¸ÅÄ¡µÈ ù ¹øÂ° ºÎÇ¥Çö½ÄÀÌ ¾îµð¿¡ ÀÖ´ÂÁö¸¦ ±â·ÏÇϰí, µÎ ¹øÂ° ¿ä¼Ò´Â µÎ ¹øÂ° ºÎÇ¥Çö½ÄÀ» ±â·ÏÇϰí, µîµî. ºÎÇ¥Çö ½ÄÀÇ ¼ø¼­´Â ±×µéÀÌ ³ªÅ¸³­ ¼ø¼­ÀÌ´Ù.

´ç½ÅÀÌ regexec¸¦ È£ÃâÇÒ ¶§, ¾ó¸¶³ª ±ä matchptr ¹è¿­ÀÌ ÀÖ´ÂÁö, nmatch Àμö¸¦ °¡Áö°í Á¤ÇؾßÇÑ ´Ù. À̰ÍÀº regexecÇÔ¼ö¿¡°Ô, ÀúÀåÇϱâ À§ÇÑ ¾ó¸¶³ª ¸¹Àº ¿ä¼ÒµéÀÌ ÀÖ´ÂÁö¸¦ ¾Ë¸°´Ù. ¸¸ÀÏ ½ÇÁ¦·Î Á¤±Ô½ÄÀÌ nmatchº¸´Ù ´õ ¸¹Àº ºÎÇ¥Çö½ÄÀ» °®´Â´Ù¸é, ´ç½ÅÀº ±×µéÀÇ ³ª¸ÓÁö¿¡ ´ëÇÑ offsetÁ¤º¸¸¦ Á¦ ´ë·Î ¾òÁö¸øÇÑ °ÍÀÌ´Ù. ±×·¯³ª À̰ÍÀº ±× patternÀÌ ¾î¶² Ưº°ÇÑ ¹®ÀÚ¿­°ú ¸ÅÄ¡µÇ´ÂÁö ¶Ç´Â ¸ÅÄ¡µÇ Áö ¾Ê´ÂÁö¿¡ ´ëÇÑ »ç½ÇÀ» º¯°æÇÏÁö ¾Ê´Â´Ù.

¸¸ÀÏ ´ç½ÅÀÌ regexec ÇÔ¼ö°¡ ¸ÅÄ¡µÈ ºÎÇ¥Çö½Ä¿¡ ´ëÇÑ ¾î¶² Á¤º¸µµ ¸®ÅÏÇϱ⸦ ¿øÇÏÁö ¾Ê´Â´Ù¸é, ´ç ½ÅÀº nmatch¿¡ 0À» ³Ö°Å³ª, ¶Ç´Â regcomp·Î patternÀ» ÄÄÆÄÀÏÇÒ ¶§ REG_NOSUB Ç÷¡±×¸¦ »ç¿ëÇÏ ¶ó.

16.3.5 ºÎÇ¥Çö½Ä ¸ÅÄ¡ÇϱâÀÇ º¹ÀâÇÔ.

¶§¶§·Î ºÎÇ¥Çö½ÄÀº ¾Æ¹« ¹®ÀÚµµ ¾ø´Â ºÎ¹®ÀÚ¿­(substring)À» ¸ÅÄ¡ÇÑ´Ù. À̰ÍÀº 'f\(o*)\'¿Í ¹®ÀÚ¿­ `fum'À» ¸ÅÄ¡ÇÒ ¶§ ¹ß»ýÇÑ´Ù. (±×°ÍÀº ½ÇÁ¦·Î´Â ´ÜÁö `f'¸¦ ¸ÅÄ¡ÇÑ´Ù. ) ÀÌ °æ¿ì, offsetsÀÇ ¾çÂÊÀº ³Î ºÎ¹®ÀÚ¿­ÀÌ ¹ß°ßµÈ °÷À» °¡¸®Å²´Ù. ÀÌ ¿¹¿¡¼­, offsetsÀº µÑ´Ù 1ÀÌ´Ù.

¶§¶§·Î, Àüü Á¤±Ô½ÄÀº ÀüÇô ºÎÇ¥Çö½ÄÀ» »ç¿ëÇÏÁö ¾Ê°í ¸ÅÄ¡ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î, `ba\(na\)*'ÀÌ 'ba'¿Í ¸ÅÄ¡ÇÒ ¶§, °ýÈ£¾È¿¡ ÀÖ´Â ºÎÇ¥Çö½ÄÀº »ç¿ëµÇÁö ¾Ê´Â´Ù. ÀÌ·±ÀÏÀÌ ¹ß»ýÇÒ ¶§, regexec´Â ºÎ Ç¥Çö½ÄÀ» À§ÇÑ ¿ä¼ÒÀÇ Çʵ忡 -1À» ÀúÀåÇÑ´Ù.

¶§¶§·Î Àüü Á¤±Ô½ÄÀ» ¸ÅÄ¡Çϱâ´Â ÇÑ ¹øº¸´Ù ´õ ¸¹Àº Ưº°ÇÑ ºÎÇ¥Çö½ÄÀ» ¸ÅÄ¡ÇÒ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î, `ba\(na\)*'ÀÌ ¹®ÀÚ¿­ `bananana'¿Í ¸ÅÄ¡ÇÒ ¶§, °ýÈ£¾ÈÀÇ ºÎÇ¥Çö½ÄÀº ¼¼ ¹ø ¸ÅÄ¡µÈ´Ù. ÀÌ·±ÀÏÀÌ ¹ß »ýÇÒ ¶§, regexec´Â º¸Åë, ºÎÇ¥Çö½Ä°ú ¸ÅÄ¡µÈ ¹®ÀÚ¿­ÀÇ ¸¶Áö¸· ºÎºÐÀÇ offsetsÀ» ÀúÀåÇÑ´Ù. `bananana'ÀÇ °æ¿ì¿¡ À̵éÀÇ offsetsÀº 6°ú 8ÀÌ´Ù.

±×·¯³ª ¸¶Áö¸·À¸·Î ¸ÅÄ¡µÈ °ÍÀº Ç×»ó ¹®ÀÚ¿­ÀÇ ¸¶Áö¸·¿¡ ÀÖ´Â ¸ÅÄ¡µÈ °ÍÀÌ ¾Æ´Ï´Ù. ±×°ÍÀº ¸ÅÄ¡ÇÏ ±âÀ§ÇÑ ¸¶Áö¸· ±âȸ¿¡¼­ ¿ì¼±±ÇÀ» °¡Áø°ÍÀ̶ó°í ÇÏ´Â °ÍÀÌ ´õ Á¤È®ÇÏ´Ù. À̰ÍÀÌ ÀǹÌÇÏ´Â °ÍÀº ÇÏ ³ªÀÇ ºÎÇ¥Çö½ÄÀÌ ´Ù¸¥°Í¿¡¼­ ¹ß°ßµÆÀ» ¶§, ³»ºÎ ºÎÇ¥Çö½ÄÀ» À§ÇØ º¸°íµÈ °á°ú´Â ¹ÛÀÇ ºÎÇ¥Çö½Ä°úÀÇ ¸¶Áö¸· ¸ÅÄ¡¿¡¼­ ¹«½¼ÀÏÀÌ ÀϾ´ÂÁö¿¡ ´ëÇØ ¿µÇâÀ» ¹Þ´Â´Ù. ¿¹¸¦µé¾î, `\(ba\(na\)*s \)*' À» ¹®ÀÚ ¿­ `bananas bas '¿Í ¸ÅÄ¡ÇÏ´Â °ÍÀ» °í·ÁÇØº¸ÀÚ. ù ¹øÂ°, ³»ºÎ Ç¥Çö½Ä°ú ½ÇÁ¦·Î ¸ÅÄ¡µÈ °ÍÀºÃ¹ ¹ø ° ´Ü¾îÀÇ ³¡¿¡ °¡±îÀÌ ÀÖ´Ù. ±×·¯³ª ´Ù½Ã µÎ ¹øÂ° ´Ü¾î¸¦ °í·ÁÇØº¸¸é, ±×°÷¿¡´Â ¸ÅÄ¡µÇ´Â °ÍÀÌ ¾Æ ¹«°Íµµ ¾ø´Ù. regexec´Â "na" ºÎÇ¥Çö½ÄÀÌ »ç¿ëµÇÁö ¾ÊÀº °ÍÀ¸·Î º¸°íÇÑ´Ù.

´Ù¸¥¿¹·Î `\(ba\(na\)*s \|nefer\(ti\)* \)*'À» 'bananas nefertiti'¿Í ¸ÅÄ¡ÇÒ ¶§ ÀÌ ±ÔÄ¢ÀÌ Àû¿ëµÇ´ÂÁö ¸¦ ¾Ë¾Æº¸ÀÚ. "na" ºÎÇ¥Çö½ÄÀº ù ¹øÂ° ´Ü¾î¿¡¼­ ¸ÅÄ¡µÇ´Â °ÍÀÌ ÀÖÁö¸¸, µÎ ¹øÂ° ´Ü¾î¿¡¼­´Â ¸ÅÄ¡µÇ ´Â °ÍÀÌ ¾ø´Ù. ´Ù½ÃÇѹø, ¹ÛÀÇ ºÎÇ¥Çö½ÄÀÇ µÎ ¹ø ¹Ýº¹Àº ù ¹øÂ°¸¦ ¹«½ÃÇϰí, µÎ ¹øÂ° ¹Ýº¹¿¡¼­ "na" ºÎÇ¥Çö½ÄÀº »ç¿ëµÇÁö ¾Ê¾Ò´Ù, ±×·¡¼­ regexec´Â "na" ºÎÇ¥Çö½ÄÀÌ »ç¿ëµÇÁö ¾Ê¾ÒÀ½À» º¸°íÇÑ´Ù.

16.3.6 PSSIX Regexp ¸ÅÄ¡Çϱ⠼ҰÅ.

´ç½ÅÀÌ ÄÄÆÄÀÏµÈ Á¤±Ô½ÄÀ» ´Ù »ç¿ëÇßÀ» ¶§, ´ç½ÅÀº regfree¸¦ »ç¿ëÇØ¼­ ±× ÀúÀå°ø°£À» ÇØÁ¦ÇÒ ¼ö ÀÖ ´Ù.

ÇÔ¼ö: void regfree (regex_t *compiled)

regfree¸¦ È£ÃâÇØ¼­ *compiled°¡ °¡¸®Å°°í ÀÖ´Â ¸ðµç ÀúÀ念¿ªÀ» ÇØÁ¦ÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº ÀÌ ¸Å´º¾ó ¿¡¼­´Â ¼³¸íÇÏÁö ¾Ê¾ÒÁö¸¸, ±¸Á¶Ã¼ regex_tÀÇ ´Ù¾çÇÑ ³»ºÎÀû ÇʵåµéÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. regfree´Â ¿À ºêÁ§Æ® *compiled ÀÚü¸¦ ÇØÁ¦ÇÏÁö ¾Ê´Â´Ù.

´ç½ÅÀº ´Ù¸¥ Á¤±Ô½ÄÀ» ÄÄÆÄÀÏÇϱâÀ§ÇØ ±× ±¸Á¶Ã¼¸¦ »ç¿ëÇϱâ Àü¿¡ regfree¸¦ »ç¿ëÇØ¼­ ±¸Á¶Ã¼ regex_t ¾È¿¡ ÀÖ´Â °ø°£À» Ç×»ó ÇØÁ¦ÇؾßÇÑ´Ù. regcomp³ª regexec¿¡¼­ ¿¡·¯°¡ ³µÀ» ¶§, ´ç½ÅÀº ¿¡·¯ ¸Þ¼¼Áö¸¦ Ãâ·ÂÇϱâ À§Çؼ­ regerrorÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÇÔ¼ö: size_t regerror (int errcode, regex_t *compiled, char *buffer, size_t length)

ÀÌ ÇÔ¼ö´Â ¿¡·¯ÄÚµå errcode¸¦ À§ÇÑ ¿¡·¯¸Þ¼¼Áö ¹®ÀÚ¿­À» »ý¼ºÇϰí, buffer¿¡¼­ ½ÃÀÛÇÏ´Â ¸Þ¸ð¸®ÀÇ length ¹ÙÀÌÆ®¾È¿¡ ±× ¹®ÀÚ¿­À» ÀúÀåÇÑ´Ù. ÄÄÆÄÀÏµÈ Àμö¸¦ À§Çؼ­, regcomp³ª regexec¿¡¼­ ÀÛ¾÷µÇ ¾ú´ø °°Àº ÄÄÆÄÀÎµÈ Á¤±Ô½Ä ±¸Á¶Ã¼¸¦ °ø±ÞÇÑ´Ù. ¼±ÅÃÀûÀ¸·Î, ´ç½ÅÀº compiled¸¦ À§Çؼ­ NULLÀ» °ø ±ÞÇÒ ¼ö ÀÖ´Ù; ´ç½ÅÀº ¿©Á¯È÷ ÀǹÌÀÖ´Â ¿¡·¯¸Þ¼¼Áö¸¦ ¾òÀ» °ÍÀÌ´Ù, ±×·¸Áö¸¸, ±×°ÍÀº »ó¼¼ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.

¸¸ÀÏ ±× ¿¡·¯¸Þ¼¼Áö°¡ length ¹ÙÀÌÆ®ÀÇ ±æÀÌ¿¡ ¸ÂÀ»¼ö ¾ø´Ù¸é(³Î Á¾·á¹®ÀÚ¸¦ Æ÷ÇÔÇØ¼­), ±×·¯¸é regerrorÀº ±×°ÍÀº ÀÚ¸¥´Ù. regerror ÀÌ ÀúÀåÇÑ ¹®ÀÚ¿­Àº ½ÉÁö¾î ±×°ÍÀÌ Àß·ÈÀ» ¶§¶óµµ ³Î Á¾¿ä¹®ÀÚ ¸¦ ÀúÀåÇÑ´Ù. regerrorÀÇ ¸®ÅϰªÀº Àüü ¿¡·¯¸Þ¼¼Áö¸¦ ÀúÀåÇϱâÀ§ÇØ ÇÊ¿äÇÑ ÃÖ¼Ò ±æÀÌÀÌ´Ù. ¸¸ÀÏ ÀÌ °ÍÀÌ lengthº¸´Ù Àû´Ù¸é, ¿¡·¯¸Þ¼¼Áö´Â À߸®Áö ¾Ê°í, ´ç½ÅÀº ±×°ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é, ´ç½ÅÀº ´õÅ« ¹öÆÛ¸¦ Àâ¾Æ¼­ ´Ù½Ã regerrorÀ» È£ÃâÇØ¾ßÇÑ´Ù. À̰÷¿¡ regerrorÀ» »ç¿ëÇÏ´Â ÇÔ¼ö°¡ ÀÖ´Â µ¥, ¿¡·¯¸Þ¼¼Áö¸¦ À§ÇÑ ¹öÆÛ¸¦ Ç×»ó µ¿ÀûÀ¸·Î ÇÒ´çÇÑ´Ù.

char *get_regerror (int errcode, regex_t *compiled)

{

size_t length = regerror (errcode, compiled, NULL, 0);

char *buffer = xmalloc (length);

(void) regerror (errcode, compiled, buffer, length);

return buffer;

}

16.4 ½©-½ºÅ¸ÀÏ ´Ü¾î È®Àå.

´Ü¾î È®ÀåÀº ´Ü¾îµé·Î ¹®ÀÚ¿­À» ºÐ¸®Çϰí, ±×°ÍÀ» ½©ÀÌ Çϴ°Íó·³ º¯¼ö, ¸í·É, ±×¸®°í ¿ÍÀϵåÄ«µå ·Î ÇØ¼®ÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿¹¸¦µé¾î, ´ç½ÅÀÌ `ls -l foo.c'¶ó°í ¾µ´ë, ÀÌ ¹®ÀÚ¿­Àº ¼¼´Ü¾î,`ls', '-l', `foo.c'·Î ºÐ¸®µÈ´Ù. À̰ÍÀº ´Ü¾î È®ÀåÀÇ °¡Àå ±âº»ÀûÀÎ ÇÔ¼öÀÌ´Ù.

´ç½ÅÀÌ `ls *.c'¶ó°í ¾µ´ë, À̰ÍÀº ´Ü¾î `*.c'°¡ ¾î´À ¼öÀÇ ÆÄÀÏÀ̸§µé°ú ´ëÄ¡µÉ¼ö Àֱ⠶§¹®¿¡ ¸¹Àº ´Ü¾îµéÀÌ µÉ ¼ö ÀÖ´Ù. À̰ÍÀº ¿ÍÀϵåÄ«µå È®ÀåÀÌ È£ÃâµÇ´Âµ¥, ±×°ÍÀº ¶ÇÇÑ ´Ü¾î È®ÀåÀÇ ÀϺκÐÀÌ´Ù. ´ç½ÅÀÌ ´ç½ÅÀÇ °æ·Î¸¦ ÇÁ¸°Æ®Çϱâ À§Çؼ­ `echo $PATH'¸¦ »ç¿ëÇÒ ¶§, À̰͵µ ¶ÇÇÑ ´Ü¾î È®ÀåÀÇ ÀÏ ºÎºÐÀÎ º¯¼ö ġȯÀÌ ÀÌ¿ëµÈ´Ù. ÇÁ·Î±×·¥µéÀº ¶óÀ̺귯¸® ÇÔ¼ö wordexp¸¦ È£ÃâÇÏ¿©¼­ ½©Ã³·³ ´Ü¾î È®ÀåÀ» ¼öÇàÇÒ ¼öÀÖ´Ù.

16.4.1 ´Ü¾î È®ÀåÀÇ ´Ü°è.

´Ü¾î È®ÀåÀÌ ´Ü¾îµéÀÇ ¿­(suquence)¿¡ Àû¿ëµÉ ¶§, ±×°ÍÀº ¿©±â¿¡ º¸¿©Áø ¼ø¼­¸¦ µû¶ó¼­ º¯È¯À» ¼öÇà ÇÑ´Ù.

1. Æ¿µå(~) È®Àå: `~foo'´Â `foo'ÀÇ È¨ µð·ºÅ丮·Î ´ëÄ¡µÈ´Ù.

2. ´ÙÀ½, ¼¼ °³ÀÇ ´Ù¸¥ º¯È¯µéÀº ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î, µ¿µîÇÑ °áÇÕ¼ø¼­·Î Àû¿ëµÈ ´Ù.

o º¯¼ö ġȯ: ȯ°æº¯¼öµéÀº `$foo'ó·³ ÂüÁ¶¸¦ À§Çؼ­ ´ëÄ¡µÈ´Ù.

o ¸í·É ġȯ: ``cat foo`' ¿Í ±×¿Í µ¿µîÇÑ `$(cat foo)'¿Í °°Àº °ÍµéÀº ³»ºÎ ¸í·ÉÀ» ÅëÇØ¼­ Ãâ·Â À¸·Î ´ëÄ¡µÈ´Ù.

o »ê¼úÀû È®Àå : `$(($x-1))'¿Í °°Àº °ÍÀº »ê¼úÀû °è»êÀÇ °á°ú·Î ´ëÄ¡µÈ´Ù.

3. ÇÊµå ºÐ¸®Çϱâ : ÅØ½ºÆ®¸¦ ´Ü¾î·Î ºÐ¸®ÇÑ´Ù.

4. ¿ÍÀϵåÄ«µå È®Àå : `*.c'¿Í °°Àº ±¸¼®Àº `.c'·Î ³¡³ª´Â ÆÄÀÏÀ̸§µéÀÇ ¸®½ºÆ®·Î ´ëÄ¡ µÈ´Ù. ¿ÍÀϵåÄ«µå È®ÀåÀº µ¿½Ã¿¡ Àüü ´Ü¾î·Î Àû¿ëµÇ°í, ±×µé ´Ü¾îµéÀÌ ÀÖ´Â 0°³ÀÇ ÆÄÀÏ, ¶Ç´Â ¸¹Àº ÆÄÀϵé·Î ´ëÄ¡ÇÑ´Ù.

5. Àοë Á¦°Å: ¹®ÀÚ¿­-ÀοëÀÇ Á¦°Å, ±×µéÀº Àû´çÇѶ§¿¡ º¯È¯À» ±ÝÁöÇÔÀ¸·Î½á, ±×µéÀÇ ÀÛ¾÷ÀÌ ¼öÇàµÈ´Ù.

ÀÌµé º¯È¯µé¿¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸, ±×¸®°í ±×µéÀ» »ç¿ëÇÑ ±¸¼ºµéÀ» ¾î¶»°Ô ¾µ°ÍÀΰ¡¿¡ ´ëÇÑ °ÍµéÀº BASH ¸Å´º¾óÀ» ÂüÁ¶Ç϶ó.

16.4.2 wprdexp È£ÃâÇϱâ.

´Ü¾î È®ÀåÀ» À§ÇÑ ¸ðµç ÇÔ¼öµé, »ó¼öµé, ±×¸®°í µ¥ÀÌÅÍŸÀÔµéÀº Çì´õÆÄÀÏ 'wordexp.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ´Ü¾î È®ÀåÀº ´Ü¾îµé(¹®ÀÚ¿­)ÀÇ º¤Å͸¦ »ý¼ºÇÑ´Ù. ÀÌ º¤Å͸¦ ¸®ÅÏÇϱâ À§Çؼ­, wordexp´Â ±¸ Á¶Ã¼ÀÎ wordexp_t¶ó´Â Ưº°ÇÑ µ¥ÀÌÅÍŸÀÔÀ» »ç¿ëÇÑ´Ù. ´ç½ÅÀÌ ±× ±¸Á¶Ã¼¸¦ wordexpÇÔ¼ö¿¡ ÁÖ¸é, ±×°ÍÀº ±× °á°ú¸¦ ¾Ë¸®±â À§Çؼ­ ±× ±¸Á¶Ã¼ÀÇ Çʵ带 ä¿î´Ù.

µ¥ÀÌÅÍŸÀÔ : wordexp_t

ÀÌ µ¥ÀÌÅÍŸÀÔÀº ¿öµå º¤Å͸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù. Á» ´õ ÀÚ¼¼ÇÏ°Ô ¸»Çϸé¿öµå º¤ÅÍÀÇ ÁÖ ¼Ò¿Í ±× Å©±â¸¦ ±â·ÏÇÑ´Ù.

we_wordc

º¤ÅÍ¿¡ ÀÖ´Â ¿ä¼ÒµéÀÇ °³¼ö

we_wordv

º¤ÅÍÀÇ ÁÖ¼Ò. ÀÌ Çʵå´Â char ** ŸÀÔÀ» °®´Â´Ù.

we_offs

we_wordv Çʵ忡 ÀÖ´Â ¸í¸ñ»óÀÇ ÁּҷκÎÅÍ ±¸ÇÑ º¤ÅÍÀÇ Ã¹ ¹øÂ° ½Ç ÀμöÀÇ offset. ´Ù¸¥ Çʵåµé °ú ´Þ¸®, ÀÌ Çʵå´Â wordexpÇÔ¼ö¿¡¼­ Ç×»ó ÀÔ·ÂÀ¸·Î »ç¿ëµÈ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ 0ÀÌ ¾Æ´Ñ offsetÀ» »ç¿ë Çϸé, º¤ÅÍÀÇ ½ÃÀÛÁ¡¿¡¼­ ¸¹Àº ¿ä¼ÒµéÀº ºñ¾îÀÖ´Â ¿ÞÂÊ¿¡ ÀÖ´Ù. (wordexpÇÔ¼ö´Â ³Î Æ÷ÀÎÅÍ·Î ±×µéÀ» ä¿î´Ù.) we_offs Çʵå´Â ´ç½ÅÀÌ WRDE_DOOFFS Ç÷¡±×¸¦ »ç¿ëÇßÀ»¶§¸¸ À¯¿ëÇÏ´Ù. ±×·¸Áö¾Ê´Ù ¸é, offsetÀº ÀÌ Çʵå¾È¿¡ ¹«¾ùÀÌ ÀÖ´ÂÁö »ó°ü¾øÀÌ Ç×»ó 0À̰í, ù ¹øÂ° ½Ç Àμö´Â º¤ÅÍÀÇ ½ÃÀÛÁ¡¿¡ ÀÖ´Ù.

ÇÔ¼ö: int wordexp (const char *words, wordexp_t *word-vector-ptr, int flags)

´Ü¾îµé·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿­¿¡¼­ ´Ü¾î È®ÀåÀ» ¼öÇàÇϰí, ±× °á°ú¸¦ »õ·ÎÀÌ ÇÒ´çµÈ º¤ÅÍ¿¡ ³Ö°í, ±×¸®°í ÀÌ º¤ÅÍÀÇ Å©±â¿Í ÁÖ¼Ò¸¦ *word-vector-ptr¿¡ ÀúÀåÇÑ´Ù. Àμö flags´Â ºñÆ®Ç÷¡±×µéÀÇ Á¶ÇÕÀÌ´Ù; Ç÷¡±×µé¿¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸´Â 16.4.3Àý [Flags for Wordexp], 230 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó. ´ç½ÅÀº, ±×µé ÀÌ ÀοëµÇÁö ¾Ê¾Ò´Ù¸é ¹®ÀÚ¿­¾È¿¡ `|&;<>' ¹®ÀÚµéÀ» »ç¿ëÇÏÁö ¸øÇÑ´Ù; »õÁÙµµ ¸¶Âù°¡Áö. ¸¸ÀÏ ´ç½Å ÀÌ ÀÎ¿ë¾øÀÌ ÀÌµé ¹®ÀÚµéÀ» »ç¿ëÇÑ´Ù¸é, ´ç½ÅÀº WRDE_BADCHAR ¿¡·¯Äڵ带 ¾òÀ» °ÍÀÌ´Ù. ±×µé ÀÌ ÀοëµÇÁö ¾Ê¾Ò°Å³ª ¶Ç´Â ´Ü¾î È®Àå ±¸¼ºÀÇ ºÎºÐÀÌ ¾Æ´Ï¶ó¸é °ýÈ£³ª, ½ÖÀ¸·Î ÀÌ·ç¾îÁø°ÍµéÀ» »ç¿ë ÇÏÁö ¸»¾Æ¶ó. ¸¸ÀÏ ´ç½ÅÀÌ ÀÎ¿ë ¹®ÀÚµé `'"`' À» »ç¿ëÇÑ´Ù¸é ±×µéÀº ±ÕÇüÀÌ ¸Â´Â ÇÑ ½ÖÀÌ µÇ¾î¾ß ÇÑ ´Ù. ´Ü¾î È®ÀåÀÇ °á°ú´Â ´Ü¾îµéÀÇ ¿­ÀÌ´Ù. wordexpÇÔ¼ö´Â °á°ú·Î ³ª¿Â ´Ü¾î¸¦ À§ÇÑ ¹®ÀÚ¿­À» ÇÒ´ç Çϰí, ÀÌµé ¹®ÀÚ¿­ÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇϱâ À§Çؼ­ char ** ŸÀÔÀÇ º¤Å͸¦ ÇÒ´çÇÑ´Ù. º¤ÅÍÀÇ ¸¶Áö¸· ¿ä¼Ò ´Â ³Î Æ÷ÀÎÅÍÀÌ´Ù. ÀÌ º¤ÅÍ´Â ¿öµåº¤ÅͶó ºÒ¸°´Ù. ÀÌ º¤Å͸¦ ¸®ÅÏÇϱâ À§Çؼ­, wordexp´Â ±× ÁÖ¼Ò ¿Í, ±× ±æÀÌ( Á¾·á ³Î Æ÷ÀÎÅ͸¦ ¼ÀÇÏÁö ¾ÊÀº ¿ä¼ÒµéÀÇ °³¼ö)¸¦ *word-vector-ptr¿¡ ÀúÀåÇÑ´Ù. ¸¸ÀÏ wordexp°¡ ¼º°øÇϸé 0À» ¸®ÅÏÇϰí, ±×·¸Áö ¾ÊÀ¸¸é ´ÙÀ½ ¿¡·¯ÄÚµåÁß Çϳª¸¦ ¸®ÅÏÇÑ´Ù.

WRDE_BADCHAR

ÀÔ·Â ¹®ÀÚ¿­ ´Ü¾îµéÀÌ ÀοëÀÌ ¾ø´Â `|'¿Í °°ÀÌ À¯¿ëÇÏÁö¾ÊÀº ¹®ÀÚ¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.

WRDE_BADVAL

ÀÔ·Â ¹®ÀÚ¿­ÀÌ Á¤ÀǵÇÁö ¾ÊÀº ½© º¯¼ö¸¦ ÂüÁ¶ ÇÏ¿´°í, ´ç½ÅÀÌ ±×¿Í °°Àº ÂüÁ¶¸¦ ±ÝÇϱâ À§Çؼ­

WRDE_UNDEF Ç÷¡±×¸¦ »ç¿ëÇÏ¿´´Ù.

WRDE_CMDSUB

ÀÔ·Â ¹®ÀÚ¿­ÀÌ ¸í·É ġȯÀ» »ç¿ëÇߴµ¥, ´ç½ÅÀÌ ¸í·É ġȯÀ» ±ÝÇϱâ À§Çؼ­ WRDE_NOCMD Ç÷¡±× ¸¦ »ç¿ëÇÏ¿´´Ù.

WRDE_NOSPACE

±× °á°ú¸¦ ÀúÀåÇϱâÀ§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇϱⰡ ºÒ°¡´ÉÇÏ´Ù. ÀÌ °æ¿ì, wordexp´Â ÇÒ´çÇÒ ¼ö ÀÖ´Â ¸¸ Å­ ±× °á°úÀÇ ÀϺθ¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù.

WRDE_SYNTAX

ÀÔ·Â ¹®ÀÚ¿­¿¡ ±¸¹®¿¡·¯°¡ ÀÖ¾ú´Ù. ¿¹¸¦ µé¾î, ¸ÅÄ¡µÇÁö ¾Ê´Â ÀÎ¿ë ¹®ÀÚ°¡ ±¸¹®¿¡·¯ÀÌ´Ù.

ÇÔ¼ö: void wordfree (wordexp_t *word-vector-ptr)

*word-vector-ptrÀÌ °¡¸®Å°°í ÀÖ´Â ¹®ÀÚ¿­°ú º¤Å͸¦ À§ÇÑ ÀúÀå°ø°£ÀÌ ÇØÁ¦µÈ´Ù. À̰ÍÀº *word-vector-ptr ÀÚü¸¦ ÇØÁ¦ÇÏÁö¾Ê°í, ´ÜÁö ±×°ÍÀÌ °¡¸®Å°°í ÀÖ´Â µ¥ÀÌÅ͸¸À» ÇØÁ¦ÇÑ´Ù.

16.4.3 ´Ü¾î È®ÀåÀ» À§ÇÑ Ç÷¡±×µé.

ÀÌ ÀýÀº wordexp¿¡¼­ »ç¿ëµÇ´Â flagsÀμö·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Â Ç÷¡±×µéÀ» ¼³¸íÇÑ´Ù. ´ç½ÅÀÌ ¿øÇÏ´Â Ç÷¡±×µéÀ» ¼±ÅÃÇϰí, ±×µéÀ» ¿¬»êÀÚ |À» »ç¿ëÇØ¼­ Á¶ÇÕÇ϶ó.

WRDE_APPEND

¹Ù·ÎÀü¿¡ È£ÃâÇÑ wordexp°¡ »ý¼ºÇÑ ´Ü¾îÀÇ º¤ÅÍ¿¡ À̹ø È®ÀåÀ¸·ÎºÎÅÍ »ý¼ºµÈ ´Ü¾îµéÀ» ºÙ¿©¶ó. ÀÌ °ÍÀº ±×µé »çÀ̰¡ °ø¹éÀ¸·Î ºÐ¸®µÇ¾îÁ®¼­, ¿©·¯ ´Ü¾îµéÀ» È¿À²ÀûÀ¸·Î È®ÀåÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ´Ù. µ¡ºÙ À̱â À§ÇÑ ÀÏ·ÃÀÇ ÀÛ¾÷¿¡¼­, ´ç½ÅÀº wordexpÀÇ È£Ãâ»çÀÌ¿¡ ¿öµå º¤ÅÍ ±¸Á¶Ã¼ÀÇ ³»¿ëÀ» °»½ÅÇÏÁö ¸» ¾Æ¾ß¸¸ ÇÑ´Ù. ±×¸®°í, ¸¸ÀÏ ´ç½ÅÀÌ wordexpÀÇ Ã¹ ¹øÂ° È£Ãâ¿¡ WRDE_DOOFFS¸¦ ¼³Á¤Çϸé, ´ç½Å Àº ±× °á°úµéÀ» ºÙÀÏ ¶§¿¡µµ ¶ÇÇÑ ±×°ÍÀ» ¼³Á¤Çؾ߸¸ ÇÑ´Ù.

WRDE_DOOFFS

´Ü¾îµéÀÇ º¤ÅÍÀÇ ½ÃÀÛÁ¡¿¡ ºó ½½·ÔµéÀ» ³²°Ü¶ó. we_offs Çʵå´Â ¾ó¸¶³ª ¸¹Àº ½½·ÔµéÀ» ³²°Ü¾ßÇÏ´Â Áö¸¦ ¾Ë¸°´Ù. ºó ½½·ÔµéÀº ³Î Æ÷ÀÎÅ͸¦ Æ÷ÇÔÇÑ´Ù.

WRDE_NOCMD

¸í·É ġȯÀ» ÇÏÁö ¸»¾Æ¶ó; ¸¸ÀÏ ÀÔ·ÂÀÌ ¸í·É ġȯÀ» ¿äûÇϸé, ¿¡·¯¸¦ Ãâ·ÂÇÑ´Ù.

WRDE_REUSE

¾Õ¼­¼­ È£ÃâÇÑ wordexp¿¡¼­ ¸¸µé¾îÁø ¿öµå º¤Å͸¦ Àç»ç¿ë Ç϶ó. »õ·Î¿î º¤Å͸¦ ÇÒ´çÇÏ´Â ´ë½Å¿¡ wordexp´Â ÀÌ¹Ì Á¸ÀçÇϰí ÀÖ´Â( ÇÊ¿äÇѸ¸Å­ ±×°ÍÀ» Å©°Ô ¸¸µé¾î¼­) º¤Å͸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ±× º¤ÅÍ ¸¦ À̵¿ÇÒÁöµµ ¸ð¸¥´Ù´Â °ÍÀ» ±â¾ï Ç϶ó, ±×·¡¼­ ¿À·¡µÈ Æ÷ÀÎÅ͸¦ ÀúÀåÇϰí, wordexp¸¦ È£ÃâÇÑ ÈÄ¿¡ ±×°ÍÀ» ´Ù½Ã »ç¿ëÇÏ´Â °ÍÀº ¾ÈÁ¤ÀûÀÌÁö ¾Ê´Ù. ´ç½ÅÀº ¸Å¹ø È£Ã⸶´Ù »õ·Î¿î we_pathv¸¦ ÃßÃâÇØ¾ß¸¸ ÇÑ´Ù.

WRDE_SHOWERR

¸í·É ġȯ¿¡ÀÇÇØ ¸¸µé¾îÁø ¸í·ÉÀ¸·Î ½ÇÇàµÈ °á°ú·Î ³ª¿Â ÇÁ¸°Æ®µÈ ¿¡·¯¸Þ¼¼Áö¸¦ º¸¿©¶ó. ´õ Á¤È®È÷, ÇöÀç ÇÁ·Î¼¼½ºÀÇ Ç¥ÁØ ¿¡·¯ Ãâ·Â ½ºÆ®¸²À» °è½ÂÇϵµ·Ï ÀÌµé ¸í·Éµé¿¡°Ô Çã¿ëÇÑ´Ù. µðÆúÆ®·Î, wordexp´Â ¸ðµç Ãâ·ÂÀ» ¹ö¸° Ç¥ÁØ ¿¡·¯ ½ºÆ®¸²À» ÀÌµé ¸í·Éµé¿¡°Ô ÁØ´Ù.

WRDE_UNDEF

¸¸ÀÏ ÀÔ·ÂÀÌ Á¤ÀǵÇÁö ¾ÊÀº ½© º¯¼ö¸¦ ÂüÁ¶ÇÑ´Ù¸é ¿¡·¯°¡ Ãâ·ÂµÈ´Ù.

16.4.4 wordexp Example

wordexp¸¦ »ç¿ëÇØ¼­ ¿©·¯ ¹®ÀÚ¿­À» È®ÀåÇϰí, ±× °á°úµéÀ» ½© ¸í·ÉÀ»

½ÇÇàÇϱâ À§ÇØ »ç¿ëÇÏ´Â ¿¹Á¦°¡ ÀÖ´Ù. È®ÀåµéÀ» ºÐ¸®ÇϱâÀ§ÇØ »ç¿ëÇÑ

WRDE_APPEND¿Í wordexp¿¡ ÀÇÇØ ÇÒ´çµÈ °ø°£À» ÇØÁ¦Çϱâ À§ÇÑ

wordfreeÀÇ »ç¿ëµµ º¸¿©ÁÖ°í ÀÖ´Ù.

int

expand_and_execute (const char *program, const char *options)

{

wordexp_t result;

pid_t pid

int status, i;

/* ±× ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§Çؼ­ ¹®ÀÚ¿­À» È®ÀåÇ϶ó */

switch (wordexp (program, &result, 0))

{

case 0: /* Successful. */

break;

case WRDE_NOSPACE:

/* ¸¸ÀÏ ±× ¿¡·¯°¡ WRDE_NOSPACE¶ó¸é ¾Æ¸¶µµ °á°úÀÇ ÀϺκÐÀÌ ÇÒ´çµÇ¾îÁø´Ù. */

wordfree (&result);

default:

return -1;

/* ¾î¶² ´Ù¸¥ ¿¡·¯ */

}

/* Àμö¸¦ À§ÇØ Á¤ÇØÁø ¹®ÀÚ¿­À» È®ÀåÇ϶ó. */

for (i = 0; args[i]; i++)

{

if (wordexp (options, &result, WRDE_APPEND))

{

wordfree (&result);

return -1;

}

}

pid = fork ();

if (pid == 0)

{

/* À̰ÍÀº ÀÚ½Ä ÇÁ·Î¼¼½ºÀÌ´Ù. ±× ¸í·ÉÀ» ½ÇÇàÇ϶ó. */

execv (result.we_wordv[0], result.we_wordv);

exit (EXIT_FAILURE);

}

else if (pid < 0)

/* fork°¡ ½ÇÆÐÇÏ¿´´Ù, ½ÇÆÐ¸¦ º¸°íÇ϶ó */

status = -1;

else

/* À̰ÍÀº ºÎ¸ð ÇÁ·Î¼¼½ºÀÌ´Ù. ÀÚ½ÄÀÌ ¿Ï¼öÇϵµ·Ï ±â´Ù·Á¶ó */

if (waitpid (pid, &status, 0) != pid)

status = -1;

wordfree (&result);

return status;

}

½ÇÁ¦·Î, wordexp´Â ¼­ºê½©(subshell)·Î ½ÇÇàµÇ±â ¶§¹®¿¡, ¹®ÀÚ¿­¿¡¼­ ±×µé »çÀ̸¦ °ø¹éÀ¸·Î ºÐ¸®ÇÏ °í ½© ¸í·É `sh -c'¸¦ »ç¿ëÇØ¼­ ½ÇÇàÇϴ°ͺ¸´Ù´Â ºü¸£´Ù.