5.1. º¯¼ö ġȯ(Variable Substitution)

º¯¼öÀÇ À̸§Àº ÀÚ½ÅÀÌ °®°í ÀÖ´Â µ¥ÀÌŸÀÇ °ªÀ» ´ã´Â ±×¸©ÀÔ´Ï´Ù. ±× º¯¼öÀÇ °ªÀ» ÂüÁ¶ÇÏ´Â °ÍÀ» º¯¼ö ġȯ(variable substitution)À̶ó°í ÇÕ´Ï´Ù.

$

º¯¼ö À̸§°ú ±× °ªÀ» Á¶½É½º·´°Ô »ìÆìº¸ÁÒ. ¸¸¾à¿¡ variable1ÀÌ º¯¼ö À̸§À̶ó¸é $variable1Àº ±× º¯¼ö°¡ °®°í ÀÖ´Â µ¥ÀÌŸ ¾ÆÀÌÅÛÀÎ °ªÀ» ³ªÅ¸³À´Ï´Ù. º¯¼ö¸¦ ¼±¾ðÇϰųª ÇÒ´çÇÒ ¶§, unset µÉ ¶§, exportµÉ ¶§¿¡¸¸ $¾øÀÌ ¾²ÀÔ´Ï´Ù. º¯¼ö ÇÒ´çÀº =À» ¾²°Å³ª(var1=27 ó·³), read ¹®¿¡¼­ ¾²À̰ųª, ·çÇÁ¹®ÀÇ Ã³À½¿¡¼­ ¾²ÀÔ´Ï´Ù(for var2 in 1 2 3).

ÂüÁ¶µÇ´Â °ªÀ» Å«µû¿ÈÇ¥(" ")·Î ¹­¾îµµ º¯¼ö ġȯÀÌ ÀϾ´Â °ÍÀ» ¸·Áö ¸øÇÕ´Ï´Ù. À̸¦ ºÎºÐÀû Äõ¿ìÆÃ(partial quoting)À̳ª "¾àÇÑ Äõ¿ìÆÃ(weak quoting)"À̶ó°í ÇÕ´Ï´Ù. ÀÛÀºµû¿ÈÇ¥¸¦ ¾²°Ô µÇ¸é º¯¼ö À̸§ÀÌ ±×³É ¹®ÀÚ ±×´ë·Î ÇØ¼®µÇ¾î ¾Æ¹«·± Àϵµ ÀϾÁö ¾Ê½À´Ï´Ù. À̸¦ ¿ÏÀüÇÑ Äõ¿ìÆÃ(full quoting)À̳ª "°­ÇÑ Äõ¿ìÆÃ(strong quoting)"À̶ó°í ÇÕ´Ï´Ù. ´õ ÀÚ¼¼ÇÑ »çÇ×Àº 6ÀåÀ» Âü°íÇϼ¼¿ä.

$variableÀº ${variable}À» ª°Ô ¾´ Ç¥ÇöÀÓ¿¡ ÁÖÀÇÇϼ¼¿ä. $variable¶ó°í ½á¼­ ¿¡·¯°¡ ³µÀ» °æ¿ì¿¡´Â ±ä ÇüÅ·Π½áÁÖ¸é ÇØ°áµÉ ¼öµµ ÀÖ½À´Ï´Ù(´ÙÀ½¿¡ ³ª¿À´Â 9.3Àý¸¦ Âü°íÇϼ¼¿ä).

¿¹ 5-1. º¯¼ö ÇÒ´ç°ú ġȯ

#!/bin/bash

# º¯¼ö: ÇÒ´ç°ú ġȯ

a=375
hello=$a

#-------------------------------------------------------------------------
# º¯¼ö¸¦ ÃʱâÈ­ ÇÒ ¶§, = ¾çÂÊ¿¡´Â ºó Ä­ÀÌ µé¾î°¡¸é ¾È µË´Ï´Ù.

#  "VARIABLE =value" ¶ó°í Çϸé,
#+ ½ºÅ©¸³Æ®´Â "VARIABLE" ¸í·É¾î°¡ "=value"¶õ ÀÎÀÚ¸¦ °®´Â°Íó·³ ÀνÄÇÕ´Ï´Ù.

#  "VARIABLE= value" ¶ó°í Çϸé,
#+ ½ºÅ©¸³Æ®´Â "value" ¸í·É¾î°¡ ȯ°æº¯¼ö "VARIABLE"À» ""·Î ¼¼ÆÃÇØ¼­ 
#+ ½ÇÇàµÇ´Â °ÍÀ¸·Î ÀνÄÇÕ´Ï´Ù.
#-------------------------------------------------------------------------


echo hello    # º¯¼ö ÂüÁ¶°¡ ¾Æ´Ï°í ±×³É "hello"¶õ ¹®ÀÚ¿­ÀÔ´Ï´Ù.

echo $hello
echo ${hello} # À§¿Í ¶È°°½À´Ï´Ù.

echo "$hello"
echo "${hello}"

echo

hello="A B  C   D"
echo $hello
echo "$hello"
# ÀÌÁ¦ echo $hello ¿Í echo "$hello" ´Â ´Ù¸¥ °á°ú°¡ ³ª¿É´Ï´Ù.
# º¯¼ö¸¦ Äõ¿ìÆÃÇØÁÖ¸é °ø¹é¹®ÀÚ°¡ º¸Á¸µË´Ï´Ù.

echo

echo '$hello'
#  ÀÛÀº µû¿ÈÇ¥·Î º¯¼ö¸¦ Äõ¿ìÆÃÇØÁÖ¸é "$"°¡ ¹®ÀÚ ±×´ë·Î ÇØ¼®µÇ±â ¶§¹®¿¡
#+ º¯¼ö ÂüÁ¶°¡ ÀϾÁö ¾Ê½À´Ï´Ù.

# Äõ¿ìÆÃÀÇ Á¾·ù¿¡ µû¶ó ´Þ¶óÁö´Â °á°ú¿¡ ÁÖ¸ñÇϼ¼¿ä.


hello=    # ³Î °ªÀ» °®µµ·Ï ¼¼ÆÃ.
echo "\$hello (³Î °ª) = $hello"
#  º¯¼ö¸¦ ³Î °ªÀ¸·Î ¼¼ÆÃÇÏ´Â °Í°ú unset ÇÏ´Â °ÍÀº ºñ·Ï °á°ú´Â °°Áö¸¸
#+ ¾ö¿¬È÷ ´Ù¸¨´Ï´Ù(´ÙÀ½ ÂüÁ¶).

# --------------------------------------------------------------

#  ¿©·¯ º¯¼öµéÀ» °ø¹é¹®ÀÚ·Î ±¸ºÐÇØ¼­ ÇÑ ÁÙ¿¡¼­ ¼¼Æ®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
#  ÇÏÁö¸¸ ÀÌ·¸°Ô Çϸé ÄÚµåÀÇ °¡µ¶¼ºÀÌ ¶³¾îÁö°í 
#+ ´Ù¸¥ ½Ã½ºÅÛÀ¸·Î À̽ÄÇÒ ¼ö°¡ ¾øÀ» ¼öµµ Àֱ⠶§¹®¿¡ Á¶½ÉÇØ¼­ ½á¾ß µË´Ï´Ù.

var1=variable1  var2=variable2  var3=variable3
echo
echo "var1=$var1   var2=$var2  var3=$var3"

# ¿¹Àü ¹öÀüÀÇ "sh"¿¡¼­´Â ¹®Á¦°¡ »ý±æ¼öµµ ÀÖ½À´Ï´Ù.

# --------------------------------------------------------------

echo; echo

numbers="one two three"
other_numbers="1 2 3"
# º¯¼ö¿¡ °ø¹é¹®ÀÚ°¡ µé¾î ÀÖ´Ù¸é Äõ¿ìÆÃÀ» ÇØÁà¾ß ÇÕ´Ï´Ù.
echo "numbers = $numbers"
echo "other_numbers = $other_numbers"
echo

echo "uninitialized_variable = $uninitialized_variable"
# ÃʱâÈ­ ¾È µÈ º¯¼ö´Â ³Î °ªÀ» °®½À´Ï´Ù(¾Æ¹« °ªµµ ¾ø½À´Ï´Ù).
uninitialized_variable=   #  ¼±¾ð¸¸ Çϰí ÃʱâÈ­ ¾ÈÇÔ.
                          #+ (À§¿¡¼­Ã³·³ ³Î °ªÀ¸·Î ¼¼ÆÃÇÑ °Í°ú ¶È°°À½).
echo "uninitialized_variable = $uninitialized_variable"
                          # ¿©ÀüÈ÷ ³Î °ªÀ» °®°í Àֳ׿ä.

uninitialized_variable=23       # ¼¼Æ®.
unset uninitialized_variable    # ¾ð¼¼Æ®.
echo "uninitialized_variable = $uninitialized_variable"
                                # ¿©ÀüÈ÷ ³Î °ªÀÔ´Ï´Ù.

echo

exit 0

ÁÖÀÇ

ÃʱâÈ­°¡ ¾È µÈ º¯¼ö´Â "null" °ªÀ» °®´Âµ¥, ÀÌ´Â °ªÀÌ ÇÒ´ç ¾È µÈ °ÍÀÌÁö 0 À̶ó´Â °ªÀ» °®´Â´Ù´Â À̾߱Ⱑ ¾Æ´Õ´Ï´Ù! °ªÀ» ÇÒ´çÇϱâ Àü¿¡ º¯¼ö¸¦ ¾²°Ô µÇ¸é ¹®Á¦°¡ »ý±æ ¼ö ÀÖ½À´Ï´Ù.