14Àå. ¸í·É¾î ġȯ(Command Substitution)

¸í·É¾î ġȯÀº Çϳª³ª ±× ÀÌ»óÀÇ ¸í·É¾îÀÇ Ãâ·ÂÀ» ÀçÇÒ´ç ÇØÁÝ´Ï´Ù. ¸í·É¾î ġȯÀº ¸»±×´ë·Î ÇÑ ¸í·É¾îÀÇ Ãâ·ÂÀ» ´Ù¸¥ ¹®¸ÆÀ¸·Î ¿¬°áÇØ ÁÝ´Ï´Ù.

¸í·É¾î ġȯÀÇ ÀüÇüÀûÀÎ ÇüÅ´ ¿ªµû¿ÈÇ¥(`...`)¸¦ ¾²´Â °ÍÀÔ´Ï´Ù. ¿ªµû¿ÈÇ¥ ¾È¿¡ µé¾î ÀÖ´Â ¸í·É¾î´Â ¸í·É¾î ÁÙ¿¡¼­ ¾µ ¼ö ÀÖ´Â ÅØ½ºÆ®¸¦ ¸¸µé¾î ³À´Ï´Ù.
script_name=`basename $0`
echo "ÀÌ ½ºÅ©¸³Æ®ÀÇ À̸§Àº $script_name ÀÔ´Ï´Ù."

¸í·É¾îÀÇ Ãâ·ÂÀº ´Ù¸¥ ¸í·É¾îÀÇ ÀÎÀÚ·Î ¾µ ¼ö Àִµ¥, º¯¼ö¸¦ ¼³Á¤Çϰųª for ·çÇÁ¿¡¼­ ÀÎÀÚ ¸®½ºÆ®·Îµµ ¾µ ¼ö ÀÖ½À´Ï´Ù.

rm `cat filename`   # "filename" Àº Áö¿ï ÆÄÀÏ ¸ñ·ÏÀ» °®°í ÀÖ½À´Ï´Ù.
#
# S. C. °¡ "arg list too long" À̶õ ¿¡·¯°¡ ³ª¿Ã ¼öµµ ÀÖ´Ù°í ÁöÀûÇß½À´Ï´Ù.
# ´õ ÁÁÀº ¹æ¹ý             xargs rm -- < filename
# ( -- ´Â "-"·Î ½ÃÀÛÇÏ´Â "filename"µµ ó¸®ÇØ ÁÝ´Ï´Ù. )

textfile_listing=`ls *.txt`
# ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç *.txt ÆÄÀÏÀÇ À̸§À» ´ã°í ÀÖ´Â º¯¼ö.
echo $textfile_listing

textfile_listing2=$(ls *.txt)   # ¸í·É¾î ġȯÀÇ ´Ù¸¥ ÇüÅÂ.
echo $textfile_listing
# ¶È°°Àº °á°ú.

# ÆÄÀÏ ¸ñ·ÏÀ» ÇϳªÀÇ ¹®ÀÚ¿­·Î °¡Á®°¡¸é ´º¶óÀÎ ¹®ÀÚ°¡ Áß°£¿¡ µé¾î°¡´Â
# ¹®Á¦°¡ »ý±æ ¼öµµ ÀÖ½À´Ï´Ù.
#
# ÆÄÀÏ ¸ñ·ÏÀ» ÀÎÀÚ·Î ÁöÁ¤ÇÏ´Â ¾ÈÀüÇÑ ¹æ¹ýÀº ¹è¿­À» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.
#      shopt -s nullglob    # ÀÏÄ¡ÇÏ´Â°Ô ¾ø´Ù¸é ÆÄÀϸí È®ÀåÀº ¹«ÀǹÌÇØ Áý´Ï´Ù.
#      textfile_listing=( *.txt )
#
# Thanks, S.C.

°æ°í

¸í·É¾î ġȯÀº ³¹¸» Á¶°¢³²(word splitting)ÀÌ »ý±æ¼öµµ ÀÖ½À´Ï´Ù.
COMMAND `echo a b`     # 2°³ÀÇ ÀÎÀÚ: a ¿Í b

COMMAND "`echo a b`"   # 1°³ÀÇ ÀÎÀÚ: "a b"

COMMAND `echo`         # ÀÎÀÚ ¾øÀ½

COMMAND "`echo`"       # ÇϳªÂ¥¸® ºó ÀÎÀÚ


# Thanks, S.C.

°æ°í

¸í·É¾î ġȯ¿¡¼­ ³¹¸» Á¶°¢³²Àº ÀçÇÒ´çµÇ´Â ¸í·É¾îÀÇ Ãâ·Â¿¡¼­ ´º¶óÀÎ ¹®ÀÚµéÀ» Áö¿ö ¹ö·Á¼­ À¯ÄèÇÏÁö ¾ÊÀº °á°ú¸¦ °¡Á® ¿Ã ¼ö ÀÖ½À´Ï´Ù.
dir_listing=`ls -l`
echo $dirlisting

# ´ÙÀ½Ã³·³ ¸ÚÁö°Ô Á¤·ÄµÈ µð·ºÅ丮 ¸ñ·ÏÀ» ¹Ù¶ó°ÚÁö¸¸
# -rw-rw-r--    1 bozo       30 May 13 17:15 1.txt
# -rw-rw-r--    1 bozo       51 May 15 20:57 t2.sh
# -rwxr-xr-x    1 bozo      217 Mar  5 21:13 wi.sh

# ½ÇÁ¦·Î ¿©·¯ºÐÀº ÀÌ·± °á°ú¸¦ º¸°Ô µË´Ï´Ù.:
# total 3 -rw-rw-r-- 1 bozo bozo 30 May 13 17:15 1.txt -rw-rw-r-- 1 bozo
# bozo 51 May 15 20:57 t2.sh -rwxr-xr-x 1 bozo bozo 217 Mar 5 21:13 wi.sh

# ´º¶óÀÎ ¹®ÀÚ°¡ »ç¶óÁ® ¹ö·È½À´Ï´Ù.

¸í·É¾î ġȯ¿¡¼­ ³¹¸» Á¶°¢³²ÀÌ ¾È »ý±ä´Ù ÇÏ´õ¶óµµ ´º¶óÀÎ ¹®ÀÚ¸¦ Áö¿ö¹ö¸± ¼ö ÀÖ½À´Ï´Ù.
# cd "`pwd`"  # ÀÌ·¸°Ô Çϸé Ç×»ó µ¿ÀÛÇÒ °Ì´Ï´Ù.
# ÇÏÁö¸¸...

mkdir 'Á¦ÀÏ ³¡¿¡ ´º¶óÀÎÀÌ ÀÖ´Â µð·ºÅ丮
'

cd 'Á¦ÀÏ ³¡¿¡ ´º¶óÀÎÀÌ ÀÖ´Â µð·ºÅ丮
'

cd "`pwd`"  # ¿¡·¯ ¸Þ¼¼Áö:
# bash: cd: /tmp/file with trailing newline: No such file or directory

cd "$PWD"   # Àß µË´Ï´Ù.





old_tty_setting=$(stty -g)   # ÇöÀçÀÇ Å͹̳Π¼¼ÆÃÀ» ÀúÀå.
echo "۸¦ ´©¸£¼¼¿ä "
stty -icanon -echo           # Å͹̳ÎÀÇ "ij³ë´ÏÄÃ"(canonical) ¸ðµå¸¦ ²ô°í,
                             # "·ÎÄÃ" ¿¡ÄÚµµ ²û.
key=$(dd bs=1 count=1 2> /dev/null)   # Ű´©¸§À» ¾ò±â À§ÇØ 'dd'¸¦ ¾¸.
stty "$old_tty_setting"      # ÀúÀåÇØ ³õ¾Ò´ø ¼¼ÆÃÀ» º¹±¸.
echo "${#key} °³ÀÇ Å°¸¦ ´­·¶½À´Ï´Ù."  # ${#variable} = $variable ¿¡ µé¾î ÀÖ´Â ¹®ÀÚ¼ö
#
# RETURN ¸»°í ´Ù¸¥ ۸¦ ´­·¶À» ¶§ÀÇ Ãâ·ÂÀº "1 °³ÀÇ Å°¸¦ ´­·¶½À´Ï´Ù."
# RETURN À» ´­·¶À» ¶§ÀÇ Ãâ·ÂÀº "0 °³ÀÇ Ãâ·ÂÀ» ´­·¶½À´Ï´Ù."
# ¸í·É¾î ġȯÀÌ ´º¶óÀÎ ¹®ÀÚ¸¦ ¸Ô¾î ¹ö·È½À´Ï´Ù.

Thanks, S.C.

ÀÛÀº Á¤º¸: ¸í·É¾î ġȯÀº ÀçÁöÇâÀ» ½á¼­ ÆÄÀÏÀÇ ³»¿ëÀ» º¯¼ö·Î ¼¼ÆÃÇϰųª cat ¸í·É¾î¸¦ ½á¼­ ÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.
variable1=`<file1`      # "variable1" À» "file1"ÀÇ ³»¿ëÀ¸·Î ¼¼Æ®.
variable2=`cat file2`   # "variable2" ¸¦ "file2"ÀÇ ³»¿ëÀ¸·Î ¼¼Æ®.

#  º¯¼ö¿¡ °ø¹é¹®ÀÚ°¡ Æ÷ÇÔµÈ °ªÀÌ µé¾î°¥¼öµµ ÀÖ°í
#+ ½ÉÁö¾î´Â Á¦¾î ¹®ÀÚ°¡ µé¾î°¥¼öµµ Àֱ⠶§¹®¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù.

Âü°í: ÀÌÁ¦´Â ¿ªµû¿ÈÇ¥ ´ë½Å $(COMMAND) ÇüÅÂÀÇ ¸í·É¾î ġȯÀÌ ¾²ÀÔ´Ï´Ù.
output=$(sed -n /"$1"/p $file)
# "grp.sh" ¿¹Á¦¿¡¼­.

½© ½ºÅ©¸³Æ®¿¡¼­ ¸í·É¾î ġȯÀÌ ¾²ÀÌ´Â ¿¹Á¦µé:

  1. ¿¹ 10-7

  2. ¿¹ 10-24

  3. ¿¹ 9-21

  4. ¿¹ 12-2

  5. ¿¹ 12-15

  6. ¿¹ 12-12

  7. ¿¹ 12-31

  8. ¿¹ 10-12

  9. ¿¹ 10-9

  10. ¿¹ 12-24

  11. ¿¹ 16-5

  12. ¿¹ A-12

  13. ¿¹ 28-1

  14. ¿¹ 12-28

  15. ¿¹ 12-29

  16. ¿¹ 12-30