9.5. º¯¼ö °£Á¢ ÂüÁ¶

¾î¶² º¯¼ö°ªÀÌ ´ÙÀ½¿¡ ³ª¿Ã º¯¼öÀÇ À̸§À̶ó°í °¡Á¤ÇØ º¾½Ã´Ù. ±×·¸´Ù¸é ±× ¾î¶² º¯¼ö·Î ´ÙÀ½¿¡ ³ª¿Ã º¯¼öÀÇ °ªÀ» ¾Ë¾Æ³¾ ¼ö ÀÖÀ»±î¿ä? ¿¹¸¦ µé¾î, a=letter_of_alphabet ÀÌ°í letter_of_alphabet=z ¶ó°í ÇÒ ¶§ a¸¦ ÂüÁ¶Çϸé z°¡ ³ª¿Ã±î¿ä? ÀÌ´Â ¿ì¸® »ý°¢Ã³·³ Á¦´ë·Î µ¿ÀÛÀ» ÇÏ°í À̸¦ °£Á¢ ÂüÁ¶¶ó°í ºÎ¸¨´Ï´Ù. eval var1=\$$var2 ó·³ ¾à°£Àº ÀÌ»óÇÏ°Ô »ý±ä ÇüÅ·Π½á¸ÔÀ» ¼ö ÀÖ½À´Ï´Ù.

¿¹ 9-17. °£Á¢ ÂüÁ¶

#!/bin/bash
# º¯¼ö °£Á¢ ÂüÁ¶.

a=letter_of_alphabet
letter_of_alphabet=z

echo

# Á÷Á¢ ÂüÁ¶.
echo "a = $a"

# °£Á¢ ÂüÁ¶.
eval a=\$$a
echo "ÀÌÁ¦ a = $a"

echo


# ÀÌÁ¦ 2Â÷ ÂüÁ¶(second order reference)¸¦ ¹Ù²ãº¸µµ·Ï ÇÏÁÒ.

t=table_cell_3
table_cell_3=24
echo "\"table_cell_3\" = $table_cell_3"
echo -n "¿ªÂüÁ¶(dereferenced)µÈ \"t\" = "; eval echo \$$t
# ÀÌ °£´ÜÇÑ ¿¹Á¦¿¡¼­´Â, 
#   eval t=\$$t; echo "\"t\" = $t"
# ¶ó°í Çصµ µË´Âµ¥ ¿Ö ±×·²±î¿ä?

echo

t=table_cell_3
NEW_VAL=387
table_cell_3=$NEW_VAL
echo "\"table_cell_3\" ÀÇ °ªÀ» $NEW_VAL ·Î ¹Ù²ß´Ï´Ù."
echo "\"table_cell_3\" Àº ÀÌÁ¦ $table_cell_3 ÀÌ°í,"
echo -n "¿ªÂüÁ¶µÈ \"t\" ´Â "; eval echo \$$t
# "eval" Àº "echo"¿Í "\$$t" µÎ °³ÀÇ ÀÎÀÚ¸¦ ¹Þ¾Æ¼­ $table_cell_3 °ú ¶È°°ÀÌ ¼¼Æ®ÇØÁÝ´Ï´Ù.
echo

# (S.C. °¡ À§ µ¿ÀÛÀ» ÀÚ¼¼È÷ ¼³¸íÇØ ÁÖ¾ú½À´Ï´Ù.)


# "Bash, ¹öÀü 2" Àå¿¡¼­ ¼³¸íÇÒ ${!t} Ç¥±â¹ýµµ ¾µ ¼ö ÀÖ½À´Ï´Ù.
# "ex78.sh" ¿¹Á¦¸¦ Âü°íÇϼ¼¿ä.

exit 0

¿¹ 9-18. awk¿¡°Ô °£Á¢ ÂüÁ¶¸¦ ³Ñ±â±â

#!/bin/bash

# "column totaler" ½ºÅ©¸³Æ®ÀÇ ´Ù¸¥ ¹öÀüÀ¸·Î
# °£Á¢ ÂüÁ¶¸¦ »ç¿ëÇؼ­,
# ´ë»ó ÆÄÀÏ¿¡¼­ ÁöÁ¤µÈ Ä÷³À» ¸ðµÎ ´õÇØ ÁÝ´Ï´Ù.

ARGS=2
E_WRONGARGS=65

if [ $# -ne "$ARGS" ] # ¸í·É¾îÁÙ ÀÎÀÚ °¹¼ö üũ.
then
   echo "»ç¿ë¹ý: `basename $0` filename column-number"
   exit $E_WRONGARGS
fi

filename=$1
column_number=$2

#===== ¿©±â±îÁö´Â ¿ø·¡ ½ºÅ©¸³Æ®¿Í ¶È°°³×¿ä. =====#


# ¿©·¯ÁÙÂ¥¸® awk ½ºÅ©¸³Æ®´Â awk ' ..... '  ¶ó°í ÇÏ¸é µË´Ï´Ù.


# awk ½ºÅ©¸³Æ® ½ÃÀÛ.
# ------------------------------------------------
awk "

{ total += \$${column_number} # °£Á¢ ÂüÁ¶
}
END {
     print total
     }

     " "$filename"
# ------------------------------------------------
# awk ½ºÅ©¸³Æ® ³¡.

# º¯¼ö °£Á¢ ÂüÁ¶´Â ½© ½ºÅ©¸³Æ® ¾È¿¡¼­ awk ½ºÅ©¸³Æ®¸¦ ¾µ ¶§ 
# ½© º¯¼ö ÂüÁ¶½Ã ±î´Ù·Î¿î ¿©·¯°¡Áö¸¦ ÇÇÇÏ°Ô ÇØ ÁÝ´Ï´Ù.
# Thanks, Stephane Chazelas.


exit 0

°æ°í

ÀÌ·± ½ÄÀÇ °£Á¢ ÂüÁ¶´Â ¾à°£ ±î´Ù·Î¿î ºÎºÐÀÌ Àִµ¥, ¸¸¾à¿¡ µÎ¹ø° º¯¼öÀÇ °ªÀÌ ¹Ù²î¸é ù¹ø° º¯¼ö´Â ÂüÁ¶ÇÏ´ø °ÍÀ» Á¦´ë·Î Ç®¾îÁà¾ß ÇÕ´Ï´Ù(À§ÀÇ ¿¹Á¦Ã³·³). ´ÙÇེ·´°Ôµµ, bash ¹öÀü 2(¿¹ 35-2 Âü°í)¿¡¼­ »õ·Ó°Ô ³ªÅ¸³­ ${!variable} Ç¥±â¹ýÀ¸·Î °£Á¢ ÂüÁ¶¸¦ Á» ´õ Á÷°üÀûÀ¸·Î ÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù.