6Àå. Äõ¿ìÆÃ(quoting)

Äõ¿ìÆÃÀ̶õ ¹®ÀÚ¿­À» µû¿ÈÇ¥·Î ¹­´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏ´Â ÀÌÀ¯´Â ¹®ÀÚ¿­ ¾È¿¡ Ư¼ö ¹®ÀÚ°¡ µé¾î°¡ ÀÖÀ» °æ¿ì, ½©À̳ª ½© ½ºÅ©¸³Æ®¿¡ ÀÇÇØ ±× Ư¼ö ¹®ÀÚ°¡ ÀçÇؼ®À̳ª È®ÀåµÇ´Â °ÍÀ» ¹æÁöÇϱâ À§Çؼ­ ÀÔ´Ï´Ù.(¾î¶² ¹®ÀÚ°¡ °¡Áø ±ÛÀÚ ±×´ë·ÎÀÇ ¶æ°ú´Â ´Ù¸¥ Çؼ®ÀÌ °¡´ÉÇÑ ¹®ÀÚ¸¦ "Ư¼ö ¹®ÀÚ"¶ó°í ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é, ¿ÍÀϵå Ä«µå ¹®ÀÚÀÎ *°¡ Ư¼ö ¹®ÀÚÀÔ´Ï´Ù.)

bash$ ls -l [Vv]*
-rw-rw-r--    1 bozo  bozo       324 Apr  2 15:05 VIEWDATA.BAT
 -rw-rw-r--    1 bozo  bozo       507 May  4 14:25 vartrace.sh
 -rw-rw-r--    1 bozo  bozo       539 Apr 14 17:11 viewdata.sh

bash$ ls -l '[Vv]*'
ls: [Vv]*: No such file or directory

Âü°í: ¸î¸î ÇÁ·Î±×·¥À̳ª À¯Æ¿¸®Æ¼µéÀº Äõ¿ìÆ®µÈ ¹®ÀÚ¿­¿¡ µé¾î Àִ Ư¼ö ¹®ÀÚ¸¦ ÀçÇؼ®Çϰųª È®Àå ½Ãų ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº Äõ¿ìÆÃÀÇ Áß¿äÇÑ »ç¿ë¹ýÀ¸·Î½á ½©ÀÌ ¸í·É¾îÁÙ ¸Å°³º¯¼ö¸¦ Çؼ®ÇÏÁö ¾Ê°í ÇÁ·Î±×·¥ÀÌ Çؼ®Çؼ­ È®ÀåÇϵµ·Ï ÇØ ÁÝ´Ï´Ù.

bash$ grep '[Ff]irst' *.txt
file1.txt:This is the first line of file1.txt.
 file2.txt:This is the First line of file2.txt.

grep [Ff]irst *.txt ¶ó°í ÇÏ¸é ´ç¿¬È÷ µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.

º¯¼ö¸¦ ÂüÁ¶ÇÒ ¶§´Â º¸Åë Å« µû¿ÈÇ¥(" ")·Î ¹­¾î ÁÖ´Â°Ô ÁÁ½À´Ï´Ù. ÀÌ·¸°Ô Çϸé $, `(backquote), \(À̽ºÄÉÀÌÇÁ)¸¦ Á¦¿ÜÇÑ ¸ðµç Ư¼ö ¹®ÀÚµéÀ» º¸Á¸ÇØ ÁÝ´Ï´Ù. º¯¼ö¿¡ Äõ¿ìÆ®¸¦ °É¾î¼­("$variable") $À» Ư¼ö ¹®ÀÚ·Î ÀνÄÇÏ°Ô µÇ¸é ±× º¯¼öÀÇ °ªÀ¸·Î ¹Ù²ã ÁÝ´Ï´Ù (À§ÀÇ ¿¹ 5-1 Âü°í).

³¹¸» Á¶°¢³²(word splitting) [1] À» ÇÇÇÏ·Á¸é Å« µû¿ÈÇ¥¸¦ ¾²±â ¹Ù¶ø´Ï´Ù. ÀÌ·¸°Ô Çϸé ÀÎÀÚ¿¡ °ø¹é¹®ÀÚ°¡ µé¾î À־ ÇϳªÀÇ ³¹¸»·Î ÀνÄÇÏ°Ô ÇØ ÁÝ´Ï´Ù.
variable1="4°³ÀÇ ³¹¸»·Î ÀÌ·ç¾îÁø º¯¼ö"
COMMAND ÀÌ°ÍÀº $variable1 ÀÔ´Ï´Ù.    # COMMAND´Â 6°³ÀÇ ÀÎÀÚ¸¦ °¡Áö°í ½ÇÇàµË´Ï´Ù.
# "ÀÌ°ÍÀº" "4°³ÀÇ" "³¹¸»·Î" "ÀÌ·ç¾îÁø" "º¯¼ö" "ÀÔ´Ï´Ù."

COMMAND "ÀÌ°ÍÀº $variable1 ÀÔ´Ï´Ù."  # COMMAND´Â 1°³ÀÇ ÀÎÀÚ¸¦ °¡Áö°í ½ÇÇàµË´Ï´Ù.
# "ÀÌ°ÍÀº 4°³ÀÇ ³¹¸»·Î ÀÌ·ç¾îÁø º¯¼ö ÀÔ´Ï´Ù."


variable2=""    # ºñ¾î ÀÖ½À´Ï´Ù.
COMMAND $variable2 $variable2 $variable2        # COMMAND´Â ÀÎÀÚ ¾øÀÌ ½ÇÇàµË´Ï´Ù.
COMMAND "$variable2" "$variable2" "$variable2"  # COMMAND´Â 3°³ÀÇ ºó ÀÎÀÚ¸¦ °¡Áö°í ½ÇÇàµË´Ï´Ù.
COMMAND "$variable2 $variable2 $variable2"      # COMMAND´Â 2°³ÀÇ ºóÄ­À» °¡Áø ÇϳªÀÇ ÀÎÀÚ¸¦ °¡Áö°í ½ÇÇàµË´Ï´Ù.

# Thanks, S.C.

ÀÛÀº Á¤º¸: echo¹®ÀÇ ÀÎÀÚ¸¦ Å« µû¿ÈÇ¥·Î ¹­¾îÁÖ´Â °ÍÀº ³¹¸» Á¶°¢³²ÀÌ ¹®Á¦°¡ µÉ ¶§¿¡¸¸ ÇÊ¿äÇÕ´Ï´Ù.

¿¹ 6-1. ÀÌ»óÇÑ º¯¼ö¸¦ ¿¡ÄÚÇϱâ

#!/bin/bash
# weirdvars.sh: ÀÌ»óÇÑ º¯¼ö ¿¡ÄÚÇϱâ.

var="'(]\\{}\$\""
echo $var        # '(]\{}$"
echo "$var"      # '(]\{}$"     Â÷ÀÌ°¡ ¾øÁÒ?

echo

IFS='\'
echo $var        # '(] {}$"     \ °¡ ºó Ä­À¸·Î ¹Ù²î¾ú³×¿ä.
echo "$var"      # '(]\{}$"

# S.C. Á¦°ø

exit 0

ÀÛÀº µû¿ÈÇ¥(' ')µµ Å« µû¿ÈÇ¥¿Í ºñ½ÁÇÏ°Ô µ¿ÀÛÇÏÁö¸¸ $ÀÇ Æ¯º°ÇÑ Àǹ̸¦ ²¨ ¹ö·Á¼­ º¯¼ö ÂüÁ¶°¡ ÀϾÁö ¾Ê°Ô ÇÕ´Ï´Ù. ÀÛÀº µû¿ÈÇ¥¾ÈÀÇ 'À» Á¦¿ÜÇÑ ¸ðµç Ư¼ö ¹®ÀÚµéÀº ´Ü¼øÈ÷ ¹®ÀÚ ±×´ë·Î Çؼ®µË´Ï´Ù. ÀÛÀº µû¿ÈÇ¥("¿ÏÀüÇÑ Äõ¿ìÆÃ")¸¦ Å« µû¿ÈÇ¥("ºÎºÐ Àοë")º¸´Ù Á» ´õ ¾ö°ÝÇÑ ¹æ¹ýÀ̶ó°í »ý°¢ÇÏ¸é µË´Ï´Ù.

Âü°í: ÀÛÀº µû¿ÈÇ¥¾È¿¡¼­´Â À̽ºÄÉÀÌÇÁ ¹®ÀÚ(\)µµ ±ÛÀÚ ±×´ë·Î ÀνĵDZ⠶§¹®¿¡ ÀÛÀº µû¿ÈÇ¥·Î ¹­ÀÎ ¹®ÀÚ¿­¿¡ \À» ½á¼­ ÀÛÀº µû¿ÈÇ¥ ÀÚü¸¦ ³ÖÀ¸·Á°í ÇÑ´Ù¸é ¿øÇÏ´Â °á°ú°¡ ³ª¿ÀÁö ¾Ê½À´Ï´Ù.
echo "Why can't I write 's between single quotes"

echo
# °£Á¢ÀûÀÎ ¹æ¹ý
echo 'Why can'\''t I write '"'"'s between single quotes'
#    |-------|  |----------|   |-----------------------|
# À̽ºÄÉÀÌÇÁ¿Í Å« µû¿ÈÇ¥·Î Äõ¿ìÆ®µÈ ÀÛÀº µû¿ÈÇ¥¿¡ ÀÇÇØ 3°³ÀÇ ¹®ÀÚ¿­·Î ³ª´µ¾îÁ® ÀÖ½À´Ï´Ù.

# Stephane Chazelas Á¦°ø.

À̽ºÄÉÀÌÇÁ(Escaping)´Â ÇϳªÀÇ ¹®ÀÚ¸¦ Äõ¿ìÆÃÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ¾î¶² ¹®ÀÚ ¾Õ¿¡ À̽ºÄÉÀÌÇÁ ¹®ÀÚ(\)°¡ ¿À¸é ½©¿¡°Ô ±× ¹®ÀÚ¸¦ ¹®ÀÚ ±×´ë·Î Çؼ®ÇÏ°Ô ÇØ ÁÝ´Ï´Ù.

°æ°í

echo³ª sed°°Àº ¸î¸î ¸í·É¾îµé¿¡¼­´Â À̽ºÄÉÀÌÇÎÀÌ Æ¯¼ö ¹®ÀÚÀÇ Æ¯¼öÇÑ Àǹ̸¦ Å°µµ·Ï ÇØ ÁÖ´Â ¹Ý´ëÀÇ È¿°ú¸¦ °¡Áú ¼öµµ ÀÖ½À´Ï´Ù.

Ưº°ÇÑ Àǹ̸¦ °®´Â ¸î °³ÀÇ À̽ºÄÉÀÌÇÁ ¹®ÀÚµé

echo ¿Í sed¿Í ¾²ÀÓ

\n

´º¶óÀÎ(newline)

\r

¸®ÅÏ(return)

\t

ÅÇ(tab)

\v

¼öÁ÷ÅÇ(vertical tab)

\b

¹é½ºÆäÀ̽º(backspace)

\a

"°æ°í"(alert, ºñÇÁÀ½À̳ª ±ôºý°Å¸²)

\0xx

0xx °°Àº 8Áø¼ö ¾Æ½ºÅ° Ç¥ÇöÀ¸·Î º¯È¯

¿¹ 6-2. À̽ºÄÉÀÌÇÁµÈ ¹®ÀÚµé

#!/bin/bash
# escaped.sh: À̽ºÄÉÀÌÇÁµÈ ¹®ÀÚµé

echo; echo

echo "\v\v\v\v"      # \v\v\v\v ¶ó°í Ãâ·Â
# 'echo'°¡ À̽ºÄÉÀÌÇÁµÈ ¹®ÀÚµéÀ» Ãâ·ÂÇÏ°Ô ÇÏ·Á¸é -e ¿É¼ÇÀ» ½á¾ß µË´Ï´Ù.
echo -e "\v\v\v\v"   # 4 °³ÀÇ ¼öÁ÷ÅÇ Ãâ·Â
echo -e "\042"       # " Ãâ·Â(µû¿ÈÇ¥, 8Áø¼ö ¾Æ½ºÅ° ¹®ÀÚ 42).


# Bash ¹öÀü 2 ÀÌÈÄ¿¡¼­´Â $'\xxx' µµ Çã¿ëµË´Ï´Ù.
echo $'\n'
echo $'\a'
echo $'\t \042 \t'   # ÅÇÀ¸·Î µÑ·Á½×ÀÎ µû¿ÈÇ¥(").

# º¯¼ö¿¡ ¾Æ½ºÅ° ¹®ÀÚ¸¦ ÇÒ´çÇϱâ.
# ------------------------------
quote=$'\042'        # " ¸¦ º¯¼ö·Î ÇÒ´ç.
echo "$quote ¿©±â´Â Äõ¿ìÆ®µÈ ºÎºÐÀÌ°í, $quote ¿©±â´Â ¾È µÈ ºÎºÐÀÔ´Ï´Ù."

echo

# º¯¼ö¿¡ ¾Æ½ºÅ° ¹®ÀÚ¸¦ ¿©·¯°³ ¾²±â.
triple_underline=$'\137\137\137'  # 137 Àº "_"ÀÇ 8Áø¼ö ¾Æ½ºÅ° ÄÚµå.
echo "$triple_underline ¹ØÁÙ $triple_underline"

ABC=$'\101\102\103\010'           # 101, 102, 103 Àº °¢°¢ 8Áø¼ö A, B, C.
echo $ABC

echo; echo

escape=$'\033'                    # 033 Àº À̽ºÄÉÀÌÇÁÀÇ 8Áø¼ö.
echo "\"escape\" echoes as $escape"

echo; echo

exit 0

$' ' ¹®ÀÚ¿­ È®ÀåÀÇ ´Ù¸¥ ¿¹Á¦¸¦ º¸°í ½ÍÀ¸¸é ¿¹ 35-1 Âü°í.

\"

Å« µû¿ÈÇ¥¸¦ ±×³É Å« µû¿ÈÇ¥·Î Çؼ®

echo "Hello"                  # Hello
echo "\"Hello\", he said."    # "Hello", he said.

\$

´Þ·¯ Ç¥½Ã¸¦ ±×³É ´Þ·¯ Ç¥½Ã·Î Çؼ®(\$ µÚ¿¡ ¿À´Â º¯¼ö´Â ÂüÁ¶µÇÁö ¾Ê½À´Ï´Ù)

echo "\$variable01"  # $variable01 À̶ó°í ÂïÈû

\\

¹é½½·¡½¬¸¦ ±×³É ¹é½½·¡½¬·Î Çؼ®

echo "\\"  # \ ¶ó°í ÂïÈû

Âü°í: \ ÀÇ µ¿ÀÛÀº ÀÚ½ÅÀÌ À̽ºÄÉÀÌÇÁ µÆ´ÂÁö, Äõ¿ìÆ® µÆ´ÂÁö, here document¿¡¼­ ¾²ÀÌ´ÂÁö¿¡ µû¶ó ´Þ¶óÁý´Ï´Ù.
echo \z               #  z
echo \\z              # \z
echo '\z'             # \z
echo '\\z'            # \\z
echo "\z"             # \z
echo "\\z"            # \z
echo `echo \z`        #  z
echo `echo \\z`       #  z
echo `echo \\\z`      # \z
echo `echo \\\\z`     # \z
echo `echo \\\\\\z`   # \z
echo `echo \\\\\\\z`  # \\z
echo `echo "\z"`      # \z
echo `echo "\\z"`     # \z

cat <<EOF              
\z                      
EOF                   # \z

cat <<EOF              
\\z                     
EOF                   # \z

# Stephane Chazelas Á¦°ø.

¸í·É¾îÀÇ ÀÎÀÚ ¸®½ºÆ® Áß°£¿¡ ³ª¿À´Â ºóÄ­À» À̽ºÄÉÀÌÇÁ ½ÃÅ°¸é ³¹¸» Á¶°¢³²À» ¸·À» ¼ö ÀÖ½À´Ï´Ù.
file_list="/bin/cat /bin/gzip /bin/more /usr/bin/less /usr/bin/emacs-20.7"
# ¸í·É¾î¿¡ ³Ñ±æ ÀÎÀÚ(µé)ÀÇ ÆÄÀÏ ¸®½ºÆ®.

# ¸®½ºÆ®¿¡ µÎ °³¸¦ ´õ Ãß°¡ÇÏ°í ¸®½ºÆ®¸¦ º¸¿©ÁÜ.
ls -l /usr/X11R6/bin/xsetroot /sbin/dump $file_list

echo "-------------------------------------------------------------------------"

# ºóÄ­À» À̽ºÄÉÀÌÇÁ ½ÃÅ°¸é ¾î¶² ÀÏÀÌ ÀϾ±î¿ä?
ls -l /usr/X11R6/bin/xsetroot\ /sbin/dump\ $file_list
# ¿¡·¯: ÆÄÀϵéÀ» ±¸ºÐ Áö¾îÁÙ ºóÄ­À» À̽ºÄÉÀÌÇÁ ½ÃÄױ⠶§¹®¿¡
#       Á¦ÀÏ ¾Õ ¼¼°³ÀÇ ÆÄÀÏÀÌ 'ls -l' ¿¡°Ô ÇϳªÀÇ ÀÎÀÚ·Î ³Ñ¾î°©´Ï´Ù.

À̽ºÄÉÀÌÇÁ´Â ÇÑ ¸í·É¾î¸¦ ¿©·¯ÁÙ¿¡ °ÉÃÄ ¾µ ¼ö ÀÖ°Ôµµ ÇØ ÁÝ´Ï´Ù. º¸ÅëÀº, ÁÙÀÌ ´Ù¸£¸é ´Ù¸¥ ¸í·É¾î¸¦ ³ªÅ¸³»Áö¸¸ ÁÙ ³¡¿¡ À̽ºÄÉÀÌÇÁ¸¦ °É¸é ´º¶óÀÎ ¹®ÀÚ¸¦ À̽ºÄÉÀÌÇÁ½ÃÅ°±â ¶§¹®¿¡ ±× ´ÙÀ½ÁÙÀÌ ¿ø·¡ ÁÙ°ú ÇÑ ÁÙ·Î À̾îÁö°Ô µË´Ï´Ù.

(cd /source/directory && tar cf - . ) | \
(cd /dest/directory && tar xpvf -)
# ´Ù½Ã º¸´Â ¾Ë¶õ ÄÛ½ºÀÇ µð·ºÅ丮 Æ®¸® º¹»ç ¸í·É¾î
# ¿©±â¼­´Â ´õ Àб⠽±µµ·Ï µÎ ÁÙ·Î ³ª´©¾ú½À´Ï´Ù.

# ÀÌ·¸°Ôµµ °¡´ÉÇÏÁÒ:
tar cf - -C /source/directory |
tar xpvf - -C /dest/directory
# ¹ØÀÇ Âü°í¸¦ º¸¼¼¿ä.
# (Thanks, Stephane Chazelas.)

Âü°í: ÁÙÀÌ ÆÄÀÌÇÁ ¹®ÀÚÀÎ |À¸·Î ³¡³­´Ù¸é ±»ÀÌ À̽ºÄÉÀÌÇÁ ¹®ÀÚ(\)¸¦ Àû¾îÁÙ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. ÇÏÁö¸¸, ¿©·¯ÁÙ¿¡ °ÉÄ£ ÇϳªÀÇ ¸í·É¾î¿¡¼­ ÁÙ ³¡¿¡ Ç×»ó À̽ºÄÉÀÌÇÁ ¹®ÀÚ¸¦ Àû¾îÁÖ´Â °ÍÀº ¾ÆÁÖ ÁÁÀº ÇÁ·Î±×·¡¹Ö ½À°üÀÔ´Ï´Ù.

echo "foo
bar" 
#foo
#bar

echo

echo 'foo
bar'    # ¾ÆÁ÷Àº ´Ù¸¥Á¡ÀÌ ¾øÁÒ.
#foo
#bar

echo

echo foo\
bar     # ´º¶óÀÎÀÌ À̽ºÄÉÀÌÇÁ µÆ½À´Ï´Ù.
#foobar

echo

echo "foo\
bar"     # ¾àÇÑ Äõ¿ìÆ® ¾È¿¡¼­´Â \ °¡ À̽ºÄÉÀÌÇÁ ¹®ÀÚ·Î Çؼ®µÇ±â ¶§¹®¿¡ ¶È°°½À´Ï´Ù.
#foobar

echo

echo 'foo\
bar'     # °­ÇÑ Äõ¿ìÆà ¾È¿¡¼­ \ ´Â ¾Æ¹« ÀÇ¹Ì ¾øÀÌ ±×³É \ ÀÔ´Ï´Ù.
#foor\
#bar

# Stephane Chazelas Á¦°ø.

ÁÖ¼®

[1]

¿©±â¼­ "³¹¸» Á¶°¢³²"Àº ¹®ÀÚ¿­ÀÌ Á¶°¢³ª¼­ ¿©·¯°³ÀÇ ÀÎÀÚ·Î ÀνĵǴ °ÍÀ» ¶æÇÕ´Ï´Ù.