3.3. º¯¼ö¿Í ÀÎÀÚ ¼Ò°³

º¯¼ö´Â ¸ðµç ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ½ºÅ©¸³Æ®¿¡¼­ ÇÙ½ÉÀÔ´Ï´Ù. »ê¼ú ¿¬»ê°ú ¹®ÀÚ¿­ ÆÄ½Ì, ½Éº¼ÀÇ Ãß»óÈ­µî¿¡ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù. º¯¼ö´Â ´ÜÁö ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´Â ½ÇÁ¦ µ¥ÀÌŸÀÇ ¸Þ¸ð¸® »ó À§Ä¡¸¦ ³ªÅ¸³À´Ï´Ù.

$

º¯¼ö ¹Ù²Ù±â. º¯¼ö À̸§°ú ±× °ª¿¡ ´ëÇØ ÀÚ¼¼È÷ »ìÆìº¾½Ã´Ù. ¸¸¾à¿¡ variable1 ÀÌ º¯¼öÀÇ À̸§À̶ó¸é $variable1 Àº ±× °ªÀ» ³ªÅ¸³À´Ï´Ù. º¯¼ö¸¦ Á¤ÀÇ ÇÒ ¶§³ª º¯¼ö¿¡ °ªÀ» ´ëÀÔ ÇÒ ¶§¸¸ $¾øÀÌ ¾²ÀÔ´Ï´Ù. º¯¼ö¸¦ ´ëÀÔÇÒ ¶§´Â = À» ¾²´Âµ¥(var1=27 ó·³), read ¹®À̳ª ·çÇÁÀÇ Ã³À½¿¡ ¾µ ¼ö ÀÖ½À´Ï´Ù. (for var2 in 1 2 3).

Å« µû¿ÈÇ¥(" ")·Î ¹­ÀÎ ÂüÁ¶ °ªÀº º¯¼ö ¹Ù²Ù±â¸¦ ¹æÇعÞÁö ¾Ê½À´Ï´Ù. À̸¦ ºÎºÐÀû Àοë(partial quoting)À̶ó Çϰí, ÀÛÀº µû¿ÈÇ¥(' ')·Î ¹­ÀÎ º¯¼ö À̸§Àº ¹®ÀÚ ±×´ë·Î ÇØ¼®µÇ¾î ¾Æ¹«·± ¹Ù²Ù±âµµ ÀϾÁö ¾Ê¾Æ ¿ÏÀüÇÑ Àοë(full quoting)À̶ó°í ÇÕ´Ï´Ù.

$variableÀº ${variable} À» °£´ÜÇÏ°Ô Ç¥½ÃÇÑ °ÍÀ̱⠶§¹®¿¡ °°Àº ÀǹÌÀÔ´Ï´Ù. $variableÀÌ ¹®¹ý ¿¡·¯¸¦ ÀÏÀ¸Å²´Ù¸é ${variable}ÀÇ ÇüÅ·Π¾²¸é µË´Ï´Ù (3.3.1절 Âü°í).

예 3-5. º¯¼ö ´ëÀÔ°ú ´ëü

#!/bin/bash

# º¯¼ö: ÇÒ´ç°ú ¹Ù²Ù±â

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

echo hello
# º¯¼ö ÂüÁ¶°¡ ¾Æ´Õ´Ï´Ù.

echo $hello
echo ${hello} # À§ÀÇ °Í°ú °°½À´Ï´Ù.

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

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

# ´Ù¸¥ Á¾·ùÀÇ Àοë(quoting)ÀÇ Â÷ÀÌÁ¡¿¡ ÁÖÀÇÇϼ¼¿ä.

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

# ¿©·¯ º¯¼öµéÀ» °ø¹é ¹®ÀÚ·Î ±¸ºÐÇØ¼­ ÇÑ ÁÙ¿¡¼­ ¼¼Æ®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
# ÇÏÁö¸¸ ÀÌ·¸°Ô ÇÑ´Ù¸é °¡µ¶¼ºÀÌ ¶³¾îÁö±â ¶§¹®¿¡ Á¶½ÉÇØ¼­ ¾²±â ¹Ù¶ø´Ï´Ù.

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

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

echo; echo

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

echo "uninitialized variable = $uninitialized_variable"
# ÃʱâÈ­ ¾È µÈ º¯¼ö´Â ³Î °ªÀ» °¡Áý´Ï´Ù(¾Æ¹« °ªµµ ¾ø½À´Ï´Ù).

echo

exit 0

경고

ÃʱâÈ­ µÇÁö ¾ÊÀº º¯¼ö´Â "³Î" °ª(¾Æ¹« °ªµµ ´ëÀÔ µÇÁö ¾Ê¾Ò´Ù´Â ¶æÀÌÁö 0 °ªÀÌ ´ëÀԵǾú´Ù´Â ¶æÀÌ ¾Æ´Õ´Ï´Ù!)À» °®½À´Ï´Ù. °ªÀ» ´ëÀÔÇϱâ Àü¿¡ º¯¼ö¸¦ »ç¿ëÇÏ°Ô µÇ¸é ÇÇÇÒ ¼ö ¾ø´Â ¹®Á¦°¡ »ý±æ°Ì´Ï´Ù.

3.3.1. ÀÎÀÚ ¹Ù²Ù±â

${parameter}

$parameter¿Í °°½À´Ï´Ù. Áï, º¯¼ö parameterÀÇ °ªÀ̶õ ¶æÀÔ´Ï´Ù.

¹®ÀÚ¿­ º¯¼öµéÀ» ¿¬°áÇÒ ¶§ ¾µ ¼ö ÀÖ½À´Ï´Ù.

your_id=${USER}-on-${HOSTNAME}
echo "$your_id"

${parameter-default}

parameter°¡ ¼±¾ðÀº µÇ¾ú´Âµ¥ °ªÀÌ ´ëÀÔµÇÁö ¾Ê¾Ò´Ù¸é default°ªÀ» »ç¿ëÇÕ´Ï´Ù.

echo ${username-`whoami`}
# "username"¿¡ °ªÀÌ ´ëÀÔ µÇ¾î ÀÖÁö ¾Ê´Ù¸é `whoami`ÀÇ °á°ú¸¦ Ç¥½ÃÇÕ´Ï´Ù.

참고: ${parameter:-default}¿Í °ÅÀÇ ºñ½ÁÇÕ´Ï´Ù¸¸ ´Ù¸¥ Á¡Àº parameter°¡ ¼±¾ðÀº µÇ¾î Àִµ¥ ³ÎÀÏ °æ¿ì¿¡, :ÀÌ ÀÖ´Ù¸é µðÆúÆ®°ªÀ», :ÀÌ ¾ø´Ù¸é ±×³É ³Î °ªÀ» Àû¿ë½ÃŲ´Ù´Â °ÍÀÔ´Ï´Ù.

#!/bin/bash

username0=
echo "username0 = ${username0-`whoami`}"
# username0 Àº ¼±¾ð¸¸ µÇ°í ³Î °ªÀÌ ÇÒ´ç µÇ¾ú½À´Ï´Ù.
# µû¶ó¼­ ¾Æ¹« °ªµµ ¾È ÂïÈú °Ì´Ï´Ù.

echo "username1 = ${username1-`whoami`}"
# username1 Àº ¼±¾ð µÇÁö ¾Ê¾Ò½À´Ï´Ù.
# ÂïÈú °Ì´Ï´Ù.

username2=
echo "username2 = ${username2:-`whoami`}"
# username2 ´Â ¼±¾ð µÇ°í ³Î °ªÀÌ ÇÒ´ç µÇ¾ú½À´Ï´Ù.
# ÇÏÁö¸¸ Á¶°Ç È®Àνà - ´ë½Å :- °¡ Àֱ⠶§¹®¿¡ ÂïÈú °Ì´Ï´Ù.

exit 0

${parameter=default}, ${parameter:=default}

ÀÎÀÚ °ªÀÌ ¼¼Æ®µÇ¾î ÀÖÁö ¾ÊÀ» °æ¿ì µðÆúÆ®°ªÀ» Àû¿ë½Ãŵ´Ï´Ù.

µÑ ´Ù ºñ½ÁÇÏÁö¸¸ À§ÀÇ °æ¿ì¿Í ¶È°°Àº Â÷ÀÌÁ¡À» °®½À´Ï´Ù.

echo ${username=`whoami`}
# "username"Àº `whoami`ÀÇ °á°ú·Î ¼¼Æ®µË´Ï´Ù.

${parameter+otherwise}, ${parameter:+otherwise}

ÀÎÀÚ °ªÀÌ ¼¼Æ® µÇ¾î ÀÖÀ» °æ¿ì 'otherwise'°ªÀ» ¾²°í ¾Æ´Ï¶ó¸é ³Î ¹®ÀÚ¿­À» ¾¹´Ï´Ù.

À§ÀÇ ¿¹¿¡¼­ -¿Í :-ÀÇ °æ¿ì¿Í ¹Ý´ë·Î »ý°¢ÇÏ¸é µË´Ï´Ù.

${parameter?err_msg}, ${parameter:?err_msg}

ÀÎÀÚ°¡ ¼¼Æ®µÇ¾î ÀÖ´Ù¸é ±× °ªÀ» »ç¿ëÇÏ°í ¾Æ´Ï¶ó¸é err_msg¸¦ Ãâ·ÂÇÕ´Ï´Ù.

µÑ ´Ù ºñ½ÁÇÏÁö¸¸ ¿ª½Ã À§¿¡¼­¿Í ¸¶Âù°¡Áö·Î ¼±¾ð¸¸ µÇ°í ¼¼Æ®°¡ ¾È µÇ¾î ÀÖÀ» °æ¿ì :ÀÌ ÀÖ´Ù¸é err_msg¸¦ Âï°í ¾ø´Ù¸é ³Î ¹®ÀÚ¿­À» ÂïÀ» °ÍÀÔ´Ï´Ù.

예 3-6. ÀÎÀÚ ¹Ù²Ù±â¿Í :

#!/bin/bash

# ½Ã½ºÅÛ È¯°æ º¯¼ö ¸î °³¸¦ È®ÀÎÇØ º¾½Ã´Ù.
# ¿¹¸¦ µé¾î, ÇöÀç Äֿܼ¡ ÀÖ´Â »ç¶÷ÀÇ À̸§ÀÎ $USER°¡ ¼¼Æ® µÅ ÀÖÁö 
# ¾Ê´Ù¸é ½Ã½ºÅÛÀº ±× »ç¶÷À» ÀνÄÇÏÁö ¸ø ÇÕ´Ï´Ù.

: ${HOSTNAME?} ${USER?} ${HOME} ${MAIL?}
  echo
  echo "ÀÌ ¸Ó½Å À̸§Àº $HOSTNAME ÀÔ´Ï´Ù."
  echo "´ç½ÅÀº $USER ÀÔ´Ï´Ù."
  echo "´ç½ÅÀÇ È¨ µð·ºÅ丮´Â $HOME ÀÔ´Ï´Ù."
  echo "´ç½ÅÀÇ ¸ÞÀÏ ¼ö½Å ÆÄÀÏ(INBOX)Àº $MAIL ¿¡ ÀÖ½À´Ï´Ù."
  echo
  echo "¸¸¾à ÀÌ ¸Þ¼¼Áö¸¦ ÀÐÀ» ¼ö ÀÖ´Ù¸é,"
  echo "Áß¿äÇÑ È¯°æ º¯¼öµéÀº Á¦´ë·Î ¼¼Æ® µÇ¾î ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù."
  echo
  echo

# ':' ¿¬»êÀÚ´Â ¿¡·¯ 󸮸¦ ²Ï Àß ÇØ³»´Â °Í(error tolerant) °°½À´Ï´Ù.
# {HOSTNAME}, {USER?}, {HOME?}, {MAIL?} ¾ÕÀÇ '$'¸¦ »©°í µ¹·Áµµ
# Àß µ¹¾Æ °©´Ï´Ù. ¿Ö ±×·²±î¿ä?

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

# ${variablename?} ¹®µµ ½ºÅ©¸³Æ®¿¡¼­ º¯¼ö°¡ ¼¼Æ® µÇ¾î ÀÖ´ÂÁö¸¦ 
# È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ThisVariable=Value-of-ThisVariable
# ¹®ÀÚ¿­ º¯¼ö´Â º¯¼ö À̸§¿¡ ¾µ ¼ö ¾ø´Â ¹®ÀÚ°¡ 
# ¼¼Æ®µÉ ¼öµµ ÀÖÀ¸´Ï ÁÖÀÇÇϼ¼¿ä.
: ${ThisVariable?}
echo "ThisVariable ÀÇ °ªÀº $ThisVariable ÀÔ´Ï´Ù."
echo
echo

# ZZXy23AB ¿¡ °ªÀÌ ¼¼Æ® µÇ¾î ÀÖÁö ¾Ê´Ù¸é...
: ${ZZXy23AB?}
# ¿¡·¯ ¸Þ¼¼Áö¸¦ »Ñ¸®°í Á¾·áÇÒ °ÍÀÔ´Ï´Ù.

echo "ÀÌ ¸Þ¼¼Áö´Â ¾È º¸ÀÔ´Ï´Ù."

exit 0 

ÀÎÀÚ ¹Ù²Ù±â¿Í È®ÀåÇϱâ. ´ÙÀ½Àº expr ¸í·É¾î¿¡¼­ ¹®ÀÚ¿­ ¿¬»ê¿¡ ´ëÇØ ºÎÁ·ÇÑ ºÎºÐÀ» º¸¿ÏÇÕ´Ï´Ù(예 3-52 Âü°í). À̰͵éÀº ÆÄÀÏÀÇ °æ·Î¸íÀ» ÆÄ½Ì ÇÒ ¶§ ÁÖ·Î ¾²ÀÔ´Ï´Ù.

${var#pattern}, ${var##pattern}

variableÀÇ ¾Õ ºÎºÐºÎÅÍ patternÀÌ ¸Â´Â°Ô ÀÖ´Ù¸é °¡Àå ªÀº ºÎºÐ/±ä ºÎºÐÀ» Àß¶ó ³À´Ï´Ù.

${var%pattern}, ${var%%pattern}

variableÀÇ ³¡ºÎºÐºÎÅÍ ¸Â´Â patternÀÌ ÀÖ´Ù¸é °¡Àå ªÀº ºÎºÐ/±ä ºÎºÐÀ» Àß¶ó ³À´Ï´Ù.

Bash 2 ¿¡´Â ´õ ¸¹Àº ¿É¼ÇÀÌ ÀÖ½À´Ï´Ù.

예 3-7. ÆÄÀÏ È®ÀåÀÚ ¹Ù²Ù±â:

#!/bin/bash

#                 rfe
#                 ---

# ÆÄÀÏ È®ÀåÀÚ ¹Ù²Ù±â.
#
#         rfe old_extension new_extension
#
# ¿¹Á¦:
# ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç *.gif ÆÄÀÏÀ» *.jpg·Î ¹Ù²Ù±â
#          rfe gif jpg

if [ $# -ne 2 ]
then
  echo "»ç¿ë¹ý: `basename $0` old_file_suffix new_file_suffix"
  exit 1
fi

for filename in *.$1
# ù ¹øÂ° ÀÎÀÚ·Î ³¡³ª´Â ÆÄÀϵéÀ» ã¾Æ¼­
do
  mv $filename ${filename%$1}$2
  # ÆÄÀÏ À̸§¿¡¼­ ù ¹øÂ° ÀÎÀÚ ºÎºÐÀ» ¶¼¾î³»°í µÎ ¹øÂ° ÀÎÀÚ¸¦ ºÙÀδÙ.
done

exit 0

${var:pos}

º¯¼ö var È®Àå, pos ¾Õ ºÎºÐÀ» Àß¶ó³¿.

${var:pos:len}

var¿¡¼­ posºÎÅÍ len ¸¸Å­ ³²±â°í ´Ù Àß¶ó³¿. ÀÌ ¿¬»êÀÚÀÇ ¸ÚÁø ¿¹Á¦´Â 예 A-6 Âü°í

${var/patt/replacement}

var¿¡¼­ óÀ½ ³ªÅ¸³ª´Â patt À» replacement·Î ¹Ù²Þ. replacement ÀÌ »ý·«µÇ¸é pattÀº Áö¿öÁý´Ï´Ù.

${var//patt/replacement}

À§¿Í ¶È°°À¸³ª ¸ðµç patt¿¡ Àû¿ëµË´Ï´Ù. ¸¶Âù°¡Áö·Î replacementÀ» »ý·«Çϸé pattÀº Áö¿öÁý´Ï´Ù.

예 3-8. ƯÁ¤ ¹®ÀÚ¿­À» ÆÄ½ÌÇϱâ À§Çؼ­ ÆÐÅÏ ¸ÅĪ »ç¿ëÇϱâ

#!/bin/bash

var1=abcd-1234-defg
echo "var1 = $var1"

t=${var1#*-*}
echo "var1 (ù¹øÂ° ³ª¿À´Â - ±îÁö¸¦ Àß¶ó³¿) = $t"
t=${var1%*-*}
echo "var1 (¸¶Áö¸·¿¡ ³ª¿À´Â - ºÎÅÍ Àß¶ó³¿) = $t"

echo

path_name=/home/bozo/ideas/thoughts.for.today
echo "path_name = $path_name"
t=${path_name##/*/}
# t=`basename $path_name` °ú ¶È°°Àº È¿°ú
echo "°æ·ÎÀ̸§(prefix)À» Àß¶ó³½ path_name = $t"
t=${path_name%/*.*}
# t=`dirname $path_name` °ú ¶È°°Àº È¿°ú
echo "ÆÄÀÏÀ̸§(suffix)À» Àß¶ó³½ path_name = $t"

echo

t=${path_name:11}
echo "¾ÕÀÇ 11 ±ÛÀÚ¸¦ Àß¶ó³½ $path_name = $t"
t=${path_name:11:5}
echo "¾ÕÀÇ 11 ±ÛÀÚ¸¦ Àß¶ó³»°í ´Ù¼¸ ±ÛÀÚ ¸¸Å­ÀÇ $path_name = $t"

echo

t=${path_name/bozo/clown}
echo "\"bozo\"¸¦ \"clown\"À¸·Î ¹Ù²Û $path_name = $t"
t=${path_name/today/}
echo "\"today\"°¡ Áö¿öÁø $path_name = $t"
t=${path_name//o/O}
echo "¸ðµç o°¡ ´ë¹®ÀÚ·Î ¹Ù²ï $path_name = $t"
t=${path_name//o/}
echo "¸ðµç o°¡ Áö¿öÁø $path_name = $t"

exit 0