Àç±Í ÇÔ¼ö´Â Áö¿ª º¯¼ö¸¦ ½á¼ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
Áö¿ªÀûÀ¸·Î ¼±¾ðµÈ º¯¼ö´Â ¼±¾ðµÈ °÷ÀÌ Æ÷ÇԵǾî ÀÖ´Â ÄÚµå ºí·°¿¡¼¸¸ º¸ÀÌ°Ô µË´Ï´Ù. Áï, Áö¿ªÀû "Åë¿ë ¹üÀ§"(local scope)¸¦ °®½À´Ï´Ù. ÇÔ¼ö¿¡ ÀÖ¾î Áö¿ª º¯¼ö´Â ¿ÀÁ÷ ±× ÇÔ¼ö ºí·° ¾È¿¡¼¸¸ Àǹ̸¦ °®½À´Ï´Ù.
¿¹ 23-8. Áö¿ª º¯¼öÀÇ ¿µ¿ª(Local variable visibility)
#!/bin/bash func () { local a=23 echo echo "ÇÔ¼ö ¾È¿¡¼ a = $a" echo } func # ÀÌÁ¦ Áö¿ª º¯¼öÀÎ 'a'°¡ ÇÔ¼ö ¹Û¿¡¼µµ º¸ÀÌ´ÂÁö »ìÆìº¸ÁÒ. echo "ÇÔ¼ö ¹Û¿¡¼ a = $a" # ¾Æ´ÏÁÒ. 'a'´Â Àü¿ªÀûÀ¸·Î Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù. echo exit 0 |
Áö¿ª º¯¼ö¸¦ ¾²¸é Àç±Í ÇÔ¼ö [1] ¸¦ ¾µ¼ö ÀÖÁö¸¸, ÀÌ ¹æ¹ýÀº ÀϹÝÀûÀ¸·Î ¾µµ¥ ¾øÀÌ ¸¹Àº ÀÛ¾÷·®À» ÇÊ¿ä·Î Çϱ⠶§¹®¿¡ ½© ½ºÅ©¸³Æ®¿¡¼´Â ¾²Áö ¾Êµµ·Ï ±ÇÀåÇÕ´Ï´Ù. [2]
¿¹ 23-9. Áö¿ª º¯¼ö¸¦ ¾´ Àç±Í ÇÔ¼ö
#!/bin/bash # factorial # --------- # bash °¡ Àç±Í ÇÔ¼ö¸¦ Áö¿øÇÒ±î¿ä? # À½, ±×·¸±ä ÇÏÁö¸¸ Àç±Í ÇÔ¼ö¸¦ ¾²·Á¸é ¸Ó¸®°¡ µÚÁ×¹ÚÁ× µÉ °Ì´Ï´Ù. MAX_ARG=5 E_WRONG_ARGS=65 E_RANGE_ERR=66 if [ -z "$1" ] then echo "»ç¿ë¹ý: `basename $0` number" exit $E_WRONG_ARGS fi if [ "$1" -gt $MAX_ARG ] then echo "¹üÀ§ Ãʰú(ÃÖ´ë 5)." # Çö½ÇÀûÀ¸·Î À̰ͺ¸´Ù ´õ Å« ¹üÀ§¸¦ ¿øÇÑ´Ù¸é # ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ´Ù½Ã ÀÛ¼ºÇϱ⠹ٶø´Ï´Ù. exit $E_RANGE_ERR fi fact () { local number=$1 # "number"¸¦ Áö¿ª º¯¼ö·Î ¼±¾ðÇØ ÁÖÁö ¾ÊÀ¸¸é Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. if [ "$number" -eq 0 ] then factorial=1 # 0 ÀÇ ÆÑÅ丮¾ó = 1. else let "decrnum = number - 1" fact $decrnum # Àç±Í ÇÔ¼ö È£Ãâ. let "factorial = $number * $?" fi return $factorial } fact $1 echo "$1 ÀÇ ÆÑÅ丮¾óÀº $? ÀÔ´Ï´Ù." exit 0 |
½ºÅ©¸³Æ®¿¡¼ Àç±Í ÇÔ¼ö¸¦ ¾²´Â ¿¹Á¦ÀÎ ¿¹ A-11µµ Âü°íÇϼ¼¿ä. ½ºÅ©¸³Æ®¿¡¼ ¾²ÀÌ´Â Àç±Í ÇÔ¼ö´Â ƯÈ÷, ¸®¼Ò½º¸¦ ¸¹ÀÌ Àâ¾Æ ¸Ô°í ¼Óµµ°¡ ´À¸®±â ¶§¹®¿¡ ÀϹÝÀûÀ¸·Î ½ºÅ©¸³Æ®¿¡´Â Àû´çÇÏÁö ¾Ê½À´Ï´Ù.
[1] | Herbert Mayer´Â Àç±Í ÇÔ¼ö¸¦ "¶È°°Àº ¾Ë°í¸®ÁòÀ» ´õ °£´ÜÇÏ°Ô ½á¼ Ç¥ÇöÇÏ´Â °Í"À̶ó°í Á¤ÀÇÇß½À´Ï´Ù. Àç±Í ÇÔ¼ö¶õ ÀÚ±â ÀÚ½ÅÀ» ºÎ¸£´Â ÇÔ¼ö¸¦ ¸»ÇÕ´Ï´Ù. | |
[2] | Àç±Í°¡ ³Ê¹« ¸¹ÀÌ ÀϾ¸é ½ºÅ©¸³Æ®°¡ ¼¼±×ÆúÆ®(segfault)¸¦ ³»¸é¼ Á×À» ¼öµµ ÀÖ½À´Ï´Ù.
|