23.1. º¹Àâ ÇÔ¼ö¿Í ÇÔ¼öÀÇ º¹À⼺(Complex Functions and Function Complexities)

ÇÔ¼ö´Â ÀÎÀÚ¸¦ ¹Þ¾Æ µéÀÏ ¼ö ÀÖ°í ´ÙÀ½ ÀÛ¾÷µéÀ» À§Çؼ­ Á¾·á »óŸ¦ ¸®ÅÏÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

function_name $arg1 $arg2

ÇÔ¼ö´Â Àڽſ¡°Ô ³Ñ¾î¿Â ÀÎÀÚ¸¦ À§Ä¡ ¸Å°³º¯¼öó·³, ÀÎÀÚÀÇ À§Ä¡·Î ÂüÁ¶Çϴµ¥ ¿¹¸¦ µé¸é, ù¹øÂ° ÀÎÀÚ´Â $1, µÎ¹øÂ° ÀÎÀÚ´Â $2 µîÀÔ´Ï´Ù.

¿¹ 23-2. ¸Å°³º¯¼ö¸¦ ¹Þ´Â ÇÔ¼ö

#!/bin/bash

func2 () {
   if [ -z "$1" ]                    # ù¹øÂ° ¸Å°³º¯¼ö ±æÀ̰¡ 0 ÀÎÁö È®ÀÎ.
   then
     echo "-ù¹øÂ° ¸Å°³º¯¼ö ±æÀ̰¡ 0 ÀÔ´Ï´Ù.-"  # ¸Å°³º¯¼ö°¡ ¾øÀ» °æ¿ì¿¡µµ.
   else
     echo "-ù¹øÂ° ¸Å°³º¯¼ö´Â \"$1\" ÀÔ´Ï´Ù.-"
   fi

   if [ "$2" ]
   then
     echo "-µÎ¹øÂ° ¸Å°³º¯¼ö´Â \"$2\" ÀÔ´Ï´Ù.-"
   fi

   return 0
}

echo
   
echo "¸Å°³º¯¼ö ¾øÀÌ ºÒ·¯º¸ÁÒ."   
func2                          # ¸Å°³º¯¼ö ¾øÀÌ È£Ãâ
echo


echo "±æÀ̰¡ 0 ÀÎ ¸Å°³º¯¼ö¸¦ ³Ñ±è."
func2 ""                       # ±æÀ̰¡ 0 ÀÎ ¸Å°³º¯¼ö·Î È£Ãâ
echo

echo "³Î ¸Å°³º¯¼ö¸¦ ³Ñ±è."
func2 "$uninitialized_param"   # ³Î ¸Å°³º¯¼ö·Î È£Ãâ
echo

echo "¸Å°³º¯¼ö ÇÑ °³¸¦ ³Ñ±è."   
func2 first           # ¸Å°³º¯¼ö ÇÑ °³·Î È£Ãâ
echo

echo "¸Å°³º¯¼ö µÎ °³¸¦ ³Ñ±è."   
func2 first second    # ¸Å°³º¯¼ö µÎ °³·Î È£Ãâ
echo

echo "\"\" \"second\" ¸¦ ³Ñ±è."
func2 "" second       # ù¹øÂ° ¸Å°³º¯¼ö ±æÀÌ´Â 0
echo                  # µÎ¹øÂ° ¸Å°³º¯¼ö´Â ¾Æ½ºÅ° ¹®ÀÚ¿­

exit 0

Âü°í: ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾îµé°ú´Â ´Ù¸£°Ô ½© ½ºÅ©¸³Æ®´Â º¸Åë, ÀÎÀÚ¸¦ °ª¿¡ ÀÇÇØ¼­ ¹Þ¾Æ µéÀÔ´Ï´Ù. [1] ½ÇÁ¦·Î´Â Æ÷ÀÎÅÍÀÎ º¯¼ö À̸§ÀÌ ÇÔ¼öÀÇ ¸Å°³º¯¼ö·Î ³Ñ¾î°£´Ù¸é ¹®ÀÚ¿­ ±×´ë·Î Ãë±ÞµÉ °ÍÀ̱⠶§¹®¿¡ ¿ªÂüÁ¶°¡ ºÒ°¡´ÉÇØ Áý´Ï´Ù. ÇÔ¼ö´Â ÀÎÀÚ¸¦ ¹®ÀÚ ±×´ë·Î ÇØ¼®ÇÕ´Ï´Ù.

Á¾·á¿Í ¸®ÅÏ

Á¾·á »óÅÂ

ÇÔ¼ö´Â Á¾·á »óŶó°í ºÎ¸£´Â °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. Á¾·á »óÅ´ return ¹®¿¡ ÀÇÇØ¼­ ºÐ¸íÇÏ°Ô Ç¥ÇöµÇ°Å³ª ±× ÇÔ¼ö¾È¿¡¼­ ¸¶Áö¸·À¸·Î ½ÇÇàµÈ ¸í·É¾îÀÇ Á¾·á »óŸ¦ ÇÔ¼ö ÀÚ½ÅÀÇ Á¾·á »óÅ·Π°¡Á®°©´Ï´Ù(¼º°øÀ̸é 0, ½ÇÆÐ¶ó¸é 0ÀÌ ¾Æ´Ñ ¿¡·¯ ÄÚµå). $?¸¦ ÂüÁ¶Çؼ­ Á¾·á »óŸ¦ ¾Ë¾Æ³¾ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ýÀ¸·Î½á C ÇÔ¼ö¿Í ºñ½ÁÇÏ°Ô ½© ½ºÅ©¸³Æ® ÇÔ¼öµµ È¿°úÀûÀ¸·Î "¸®ÅÏ °ª"À» °¡Áú ¼ö ÀÖ½À´Ï´Ù.

return

ÇÔ¼ö¸¦ ³¡³À´Ï´Ù. return ¸í·É¾î [2] ´Â ÀÓÀÇÀÇ Á¤¼ö ÀÎÀÚ¸¦ °¡Áú ¼ö Àִµ¥ ÀÌ´Â ÀÌ ÇÔ¼ö¸¦ ºÎ¸¥ ÂÊ¿¡°Ô ÇÔ¼öÀÇ "Á¾·á »óÅÂ"¸¦ ¾Ë·Á ÁÖ°í, ¶ÇÇÑ ÀÌ Á¾·á »óÅ´ $? º¯¼ö¿¡ ÇÒ´ç µË´Ï´Ù.

¿¹ 23-3. µÎ ¼ýÀÚÁß Å« ¼ö ã±â

#!/bin/bash
# max.sh: µÎ Á¤¼öÁß Å« ¼ö ã±â.

E_PARAM_ERR=-198    # ÇÔ¼ö·Î 2°³ ¹Ì¸¸ÀÇ ¸Å°³º¯¼ö°¡ ³Ñ¾î ¿ÔÀ» ¶§.
EQUAL=-199          # µÎ ¸Å°³º¯¼ö°¡ °°À» °æ¿ìÀÇ ¸®Åϰª.

max2 ()             # µÎ ¼ýÀÚÁß Å« ¼ö¸¦ ¸®ÅÏ.
{                   # ÁÖÀÇ: ºñ±³ÇÒ ¼ýÀÚ´Â 257º¸´Ù ÀÛ¾Æ¾ß ÇÕ´Ï´Ù.
if [ -z "$2" ]
then
  return $E_PARAM_ERR
fi

if [ "$1" -eq "$2" ]
then
  return $EQUAL
else
  if [ "$1" -gt "$2" ]
  then
    return $1
  else
    return $2
  fi
fi
}

max2 33 34
return_val=$?

if [ "$return_val" -eq $E_PARAM_ERR ]
then
  echo "¸Å°³º¯¼ö°¡ µÎ °³ ÇÊ¿äÇÕ´Ï´Ù."
elif [ "$return_val" -eq $EQUAL ]
  then
    echo "µÎ ¼ýÀÚ´Â °°½À´Ï´Ù."
else
    echo "µÎ ¼ýÀÚÁß Å« ¼ö´Â $return_val ÀÔ´Ï´Ù."
fi  

  
exit 0

# µ¶ÀÚ¿ë ¿¬½À¹®Á¦(ÃʱÞ):
# ´ëÈ­¸ðµå ½ºÅ©¸³Æ®·Î º¯°æÇØ º¸¼¼¿ä.
# »ç¿ëÀÚ¿¡°Ô ÀÔ·Â(µÎ ¼ýÀÚ)À» ¹°¾îº¸°Ô ÇÏ¸é µË´Ï´Ù.

ÀÛÀº Á¤º¸: ÇÔ¼ö°¡ ¹®ÀÚ¿­À̳ª ¹è¿­À» ¸®ÅÏÇϱâ À§Çؼ­´Â Àü¿ë º¯¼ö¸¦ ¾²¸é µË´Ï´Ù.
count_lines_in_etc_passwd()
{
  [[ -r /etc/passwd ]] && REPLY=$(echo $(wc -l < /etc/passwd))
  # /etc/passwd ¸¦ ÀÐÀ» ¼ö ÀÖÀ¸¸é REPLY ¿¡ ÁÙ ¼ö¸¦ ¼¼ÆÃ.
  # ¸Å°³º¯¼ö °ª°ú »óÅ Á¤º¸¸¦ °°ÀÌ ¸®ÅÏ.
}

if count_lines_in_etc_passwd
then
  echo "/etc/passwd ¿¡´Â $REPLY °³ÀÇ ÁÙÀÌ ÀÖ½À´Ï´Ù."
else
  echo "/etc/passwd ÀÇ ÁÙ ¼ö¸¦ ¼¿ ¼ö°¡ ¾ø½À´Ï´Ù."
fi

# Thanks, S.C.

¿¹ 23-4. ¼ýÀÚ¸¦ ·Î¸¶ ¼ýÀÚ·Î ¹Ù²Ù±â

#!/bin/bash

# ¾Æ¶óºñ¾Æ ¼ýÀÚ¸¦ ·Î¸¶ ¼ýÀÚ·Î ¹Ù²Ù±â
# ¹üÀ§: 0 - 200
# Á¶ÀâÇÏÁö¸¸ µ¿ÀÛÀº ÇÕ´Ï´Ù.

# ó¸® °¡´ÉÇÑ ¼ýÀÚÀÇ ¹üÀ§¸¦ ´Ã¸®°Å³ª ½ºÅ©¸³Æ®ÀÇ ±â´ÉÀ» Çâ»ó½ÃŰ´Â °ÍÀº
# µ¶ÀÚ ¿©·¯ºÐÀ» À§ÇØ ¿¬½À¹®Á¦·Î ³²°Ü ³õ½À´Ï´Ù.

# »ç¿ë¹ý: roman number-to-convert

LIMIT=200
E_ARG_ERR=65
E_OUT_OF_RANGE=66

if [ -z "$1" ]
then
  echo "»ç¿ë¹ý: `basename $0` number-to-convert"
  exit $E_ARG_ERR
fi  

num=$1
if [ "$num" -gt $LIMIT ]
then
  echo "ó¸® °¡´É ¹üÀ§ Ãʰú!"
  exit $E_OUT_OF_RANGE
fi  

to_roman ()   # ÇÔ¼ö¸¦ ºÎ¸£±â Àü¿¡ ¹Ì¸® ¼±¾ðÇØ Áà¾ß µË´Ï´Ù.
{
number=$1
factor=$2
rchar=$3
let "remainder = number - factor"
while [ "$remainder" -ge 0 ]
do
  echo -n $rchar
  let "number -= factor"
  let "remainder = number - factor"
done  

return $number
       # µ¶ÀÚ¿ë ¿¬½À¹®Á¦:
       # ÀÌ ÇÔ¼ö°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¼³¸íÇØ º¸¼¼¿ä.
       # ÈùÆ®: ¿¬¼ÓÀû »©±â¿¡ ÀÇÇÑ ³ª´©±â.
}
   

to_roman $num 100 C
num=$?
to_roman $num 90 LXXXX
num=$?
to_roman $num 50 L
num=$?
to_roman $num 40 XL
num=$?
to_roman $num 10 X
num=$?
to_roman $num 9 IX
num=$?
to_roman $num 5 V
num=$?
to_roman $num 4 IV
num=$?
to_roman $num 1 I

echo

exit 0

¿¹ 10-26 µµ Âü°í.

Áß¿ä: ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¼ö ÀÖ´Â °¡Àå Å« ¾ç¼ö´Â 256ÀÔ´Ï´Ù. return ¸í·É¾î´Â ÀÌ Á¦ÇÑ »çÇ×ÀÇ ¿øÀÎÀÌ µÇ´Â Á¾·á »óÅÂÀÇ °³³ä¿¡ ¾ÆÁÖ ¹ÐÁ¢ÇÏ°Ô ¿¬°áµÇ¾î ÀÖ½À´Ï´Ù. ´ÙÇàÈ÷µµ, ÇÔ¼ö¿¡¼­ ¾ÆÁÖ Å« Á¤¼ö¸¦ ¸®ÅÏÇØ¾ß ÇÏ´Â °æ¿ì°¡ »ý±â¸é ÀÌ·± Á¦ÇÑ »çÇ×À» ÇØ°áÇÒ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.

¿¹ 23-5. ÇÔ¼ö¿¡¼­ Å« °ªÀ» ¸®ÅÏÇÏ´ÂÁö Å×½ºÆ®Çϱâ

#!/bin/bash
# return-test.sh

# ÇÔ¼ö¿¡¼­ ¸®ÅÏÇÒ ¼ö ÀÖ´Â °¡Àå Å« ¾ç¼ö´Â 256 ÀÔ´Ï´Ù.

return_test ()         # ¹«Á¶°Ç ³Ñ¾î¿Â °ÍÀ» ¸®ÅÏ.
{
  return $1
}

return_test 27         # o.k.
echo $?                # 27 ¸®ÅÏ.
  
return_test 256        # ¿ª½Ã o.k.
echo $?                # 256 ¸®ÅÏ.

return_test 257        # ¿¡·¯!
echo $?                # 1 ¸®ÅÏ(ÀÚÁú±¸·¹ÇÑ ¿¡·¯¿ë ÄÚµå ¸®ÅÏ).

return_test -151896    # ÇÏÁö¸¸, Å« À½¼ö´Â µË´Ï´Ù.
echo $?                # -151896 ¸®ÅÏ.

exit 0

»ìÆìº» °Íó·³, ÇÔ¼ö´Â Å« À½¼ö°ªÀ» ¸®ÅÏÇÒ ¼ö ÀÖ½À´Ï´Ù. À̸¦ ÀÌ¿ëÇÏ¸é ¾à°£ÀÇ ²Ç¼ö¸¦ ½á¼­ Å« ¾ç¼ö¸¦ ¸®ÅÏÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

´Ù¸¥ ¹æ¹ýÀ¸·Î´Â "¸®ÅÏ °ª"À» ±×³É Àü¿ª º¯¼ö¿¡ ÇÒ´çÇÏ¸é µË´Ï´Ù.
Return_Val=   # ÃʰúµÇ´Â ÇÔ¼ö ¸®ÅϰªÀ» ´ãÀ» Àü¿ª º¯¼ö.

alt_return_test ()
{
  fvar=$1
  Return_Val=$fvar
  return   # 0 ¸®ÅÏ(¼º°ø).
}

alt_return_test 1
echo $?                              # 0
echo "return value = $Return_Val"    # 1

alt_return_test 256
echo "return value = $Return_Val"    # 256

alt_return_test 257
echo "return value = $Return_Val"    # 257

alt_return_test 25701
echo "return value = $Return_Val"    #25701

¿¹ 23-6. Å« µÎ Á¤¼ö ºñ±³Çϱâ

#!/bin/bash
# max2.sh: ¾ÆÁÖ Å« µÎ Á¤¼öÁß Å« ¼ö ±¸Çϱâ.

# ÀÌ ½ºÅ©¸³Æ®´Â ¾Õ¿¡¼­ ¼Ò°³Çß´ø "max.sh" ¿¹Á¦¸¦
# Å« Á¤¼ö¿¡ ´ëÇØ¼­ µ¿ÀÛÇϵµ·Ï ¼öÁ¤ÇÑ °ÍÀÔ´Ï´Ù.

EQUAL=0             # µÎ ¸Å°³º¯¼ö°¡ °°À» °æ¿ìÀÇ ¸®ÅÏ °ª.
MAXRETVAL=256       # ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¼ö ÀÖ´Â ÃÖ´ë ¾ç¼ö.
E_PARAM_ERR=-99999  # ¸Å°³º¯¼ö ¿¡·¯.
E_NPARAM_ERR=99999  # "ÀϹÝÈ­µÈ"(Normalized) ¸Å°³º¯¼ö ¿¡·¯.

max2 ()             # µÎ ¼ýÀÚÁß Å« ¼ö¸¦ ¸®ÅÏ.
{
if [ -z "$2" ]
then
  return $E_PARAM_ERR
fi

if [ "$1" -eq "$2" ]
then
  return $EQUAL
else
  if [ "$1" -gt "$2" ]
  then
    retval=$1
  else
    retval=$2
  fi
fi

# -------------------------------------------------------------- #
# ¿©±â°¡ Å« Á¤¼ö¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ°Ô ÇØ ÁÖ´Â ºÎºÐÀÔ´Ï´Ù.
if [ "$retval" -gt "$MAXRETVAL" ]    # ¹üÀ§¸¦ ³Ñ´Â ¼ö¶ó¸é,
then                                 
  let "retval = (( 0 - $retval ))"   # À½¼ö·Î Á¶ÀýÇØ ÁÝ´Ï´Ù.
  # (( 0 - $VALUE )) °¡ VALUE ÀÇ ºÎÈ£¸¦ ¹Ù²ãÁÝ´Ï´Ù.
fi
# ´ÙÇེ·´°Ôµµ, Å« *À½¼ö* ¸®ÅÏÀº °¡´ÉÇÕ´Ï´Ù.
# -------------------------------------------------------------- #

return $retval
}

max2 33001 33997
return_val=$?

# -------------------------------------------------------------------------- #
if [ "$return_val" -lt 0 ]                  # "Á¶ÀýµÈ" À½¼ö¶ó¸é,
then                                       
  let "return_val = (( 0 - $return_val ))"  # ¾ç¼ö·Î º¯È¯.
fi                                          # $return_valÀÇ "Àý´ë°ª".
# -------------------------------------------------------------------------- #


if [ "$return_val" -eq "$E_NPARAM_ERR" ]
then                   # ¸Å°³º¯¼ö ¿¡·¯ "Ç÷¡±×"µµ ºÎÈ£°¡ ¹Ù²ò´Ï´Ù.
  echo "¿¡·¯: ¸Å°³º¯¼ö°¡ ¸ðÀÚ¶ø´Ï´Ù."
elif [ "$return_val" -eq "$EQUAL" ]
  then
    echo "µÎ ¼ýÀÚ°¡ °°½À´Ï´Ù."
else
    echo "µÎ ¼ýÀÚÁß Å« ¼ö´Â $return_val ÀÔ´Ï´Ù."
fi  
  
exit 0

¿¹ A-6 Âü°í.

µ¶ÀÚ¿ë ¿¬½À¹®Á¦: ¿©±â¼­ ¹è¿î °ÍÀ» °¡Áö°í ¾Õ¿¡¼­ »ìÆìºÃ´ø ·Î¸¶ ¼ýÀÚ ¿¹Á¦°¡ ÀÓÀÇÀÇ Å« ÀԷ°ªÀ» ó¸®Çϵµ·Ï °íÃÄ º¸¼¼¿ä.

ÀçÁöÇâ

ÇÔ¼öÀÇ Ç¥ÁØÀÔ·ÂÀ» ÀçÁöÇâ

ÇÔ¼ö´Â º»ÁúÀûÀ¸·Î ÄÚµå ºí·°Àε¥ À̰ÍÀº ÇÔ¼öÀÇ Ç¥ÁØÀÔ·ÂÀÌ ÀçÁöÇâ µÉ ¼ö ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù(¿¹ 4-1¿¡ ÀÖ´Â °Íó·³).

¿¹ 23-7. »ç¿ëÀÚ °èÁ¤ À̸§¿¡¼­ ½ÇÁ¦ À̸§À» ¾Ë¾Æ³»±â

#!/bin/bash

# /etc/passwd ¸¦ º¸°í »ç¿ëÀÚ °èÁ¤À̸§¿¡¼­ "½ÇÁ¦ À̸§"À» ¾Ë¾Æ³¿.

ARGCOUNT=1  # ÇÑ °³ ÀÎÀÚ¸¸ ÇÊ¿ä.
E_WRONGARGS=65

file=/etc/passwd
pattern=$1

if [ $# -ne "$ARGCOUNT" ]
then
  echo "»ç¿ë¹ý: `basename $0` USERNAME"
  exit $E_WRONGARGS
fi  

file_excerpt ()  # ÆÄÀÏ¿¡¼­ ÆÐÅÏÀ» °Ë»öÇØ¼­ ÇØ´ç ºÎºÐÀ» Ãâ·Â.
{
while read line  # while ¿¡¼­ ²À "[ condition ]" À» ¾È ½áµµ µË´Ï´Ù.
do
  echo "$line" | grep $1 | awk -F":" '{ print $5 }'  # awk °¡ ":" ±¸ºÐÀÚ¸¦ ¾²µµ·Ï.
done
} <$file  # ÇÔ¼ö Ç¥ÁØÀÔ·ÂÀ¸·Î ÀçÁöÇâ.

file_excerpt $pattern

# ÀÌ Àüü ½ºÅ©¸³Æ®´Â ´ÙÀ½Ã³·³ ÇØµµ µË´Ï´Ù.
#       grep PATTERN /etc/passwd | awk -F":" '{ print $5 }'
# ¾Æ´Ï¸é
#       awk -F: '/PATTERN/ {print $5}'
# ȤÀº
#       awk -F: '($1 == "username") { print $5 }' # »ç¿ëÀÚ À̸§À» º¸°í ½ÇÁ¦À̸§À» ã¾Æ³¿
# ÇÏÁö¸¸, ÀÌ·± ¹æ¹ýÀº ±³À°ÀûÀÌÁö´Â ¾ÊÀº °Í °°³×¿ä.

exit 0

ÇÔ¼öÀÇ Ç¥ÁØÀÔ·ÂÀ» ÀçÁöÇâ ÇØÁÖ´Â ´ú Çò°¥¸° ´Ù¸¥ ¹æ¹ýÀÌ Àִµ¥, ÇÔ¼ö ¾È¿¡ µé¾î ÀÖ´Â Áß°ýÈ£ ÄÚµå ºí·°À¸·Î Ç¥ÁØÀÔ·ÂÀ» ÀçÁöÇâ ½ÃŰ´Â °ÍÀÔ´Ï´Ù.
# ÀÌ·¸°Ô ÇÏÁö ¸»°í,
Function ()
{
 ...
 } < file

# ÀÌ·¸°Ô Çϼ¼¿ä.
Function ()
{
  {
    ...
   } < file
}

# ºñ½ÁÇϰÔ,

Function ()  # ÀÌ°Ç µÇÁö¸¸,
{
  {
   echo $*
  } | tr a b
}

Function ()  # ÀÌ°Ç ¾È µË´Ï´Ù.
{
  echo $*
} | tr a b   # ¿©±â¼­´Â ÁßøµÈ ÄÚµå ºí·°ÀÌ ²À ÀÖ¾î¾ß µË´Ï´Ù.


# Thanks, S.C.

ÁÖ¼®

[1]

°£Á¢ º¯¼ö ÂüÁ¶(¿¹ 35-2 ÂüÁ¶)´Â ÇÔ¼ö¿¡ º¯¼ö Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁÖ´Â ¼­Åõ¸¥ ¹æ¹ýÀ» Á¦°øÇØ ÁÝ´Ï´Ù.
#!/bin/bash

ITERATIONS=3  # ÀÔ·ÂÀ» ¸î ¹øÀ̳ª ¹ÞÀ» °ÍÀÎÁö.
icount=1

my_read () {
  # my_read varname À̶ó°í ºÎ¸£¼¼¿ä.
  # ÀÌ ÇÔ¼ö´Â ±âº»°ªÀ¸·Î ó¸®µÉ ÀÌÀü ÀԷ°ªÀ» ´ë°ýÈ£·Î ¹­¾î¼­ º¸¿©ÁÖ°í,
  # »õ °ªÀ» ¹°¾îº¾´Ï´Ù.

  local local_var

  echo -n "°ªÀ» ³ÖÀ¸¼¼¿ä"
  eval 'echo -n "[$'$1'] "'  # ÀÌÀü °ª.
  read local_var
  [ -n "$local_var" ] && eval $1=\$local_var

  # "And-list": "local_var" °¡ ÂüÀ̶ó¸é "$1"À» "loval_var"·Î ¼¼ÆÃ.
}

echo

while [ "$icount" -le "$ITERATIONS" ]
do
  my_read var
  echo "Entry #$icount = $var"
  let "icount += 1"
  echo
done  


# ÀÌ ±³À°ÀûÀÎ ¿¹Á¦´Â Stephane Chazelas °¡ Á¦°øÇØ ÁÖ¾ú½À´Ï´Ù.

exit 0

[2]

return ¸í·É¾î´Â BashÀÇ ³»Àå ¸í·ÉÀÔ´Ï´Ù.