3.16. ¼­ºê½©(Subshells)

½© ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃŰ¸é ´Ù¸¥ ¸í·É¾î ÇÁ·Î¼¼½º¸¦ ¶ç¿ó´Ï´Ù. À̰ÍÀº ¸¶Ä¡ ÇÑ ÆÄÀϾÈÀÇ ¸í·É¾î ¸ñ·ÏµéÀÌ ÇÑ ¹ø¿¡ ½ÇÇàµÇµµ·Ï ÇÏ´Â °Í°ú ºñ½ÁÇÏ°Ô ¿©·¯ºÐÀÌ ½ÇÇà½ÃŲ ¸í·É¾î°¡ ¸í·É¾î ÁÙ ÇÁ·ÒÇÁÆ® »ó¿¡¼­ ÇØ¼®µË´Ï´Ù. ½ÇÇàµÇ´Â °¢°¢ÀÇ ½© ½ºÅ©¸³Æ®´Â »ç½Ç, ÄܼÖÀ̳ª ÇÑÅÒ¿¡¼­ ¿©·¯ºÐ¿¡°Ô ÇÁ·ÒÇÁÆ®¸¦ º¸¿©ÁÖ´ø ºÎ¸ð ½©ÀÇ ¼­ºêÇÁ·Î¼¼½ºÀÔ´Ï´Ù.

½© ½ºÅ©¸³Æ®´Â Àڽŵµ ¿ª½Ã ¼­ºêÇÁ·Î¼¼½º¸¦ ¶ç¿ï ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¼­ºê½©µéÀº º´·Ä·Î µ¹°Ô µÇ´Âµ¥, µ¿½Ã¿¡ ´ÙÁß ÀÛ¾÷À» ÇÏ´Â °Í°ú µ¿ÀÏÇÑ È¿°ú¸¦ °¡Á®¿É´Ï´Ù.

참고: ¼­ºê½©ÀÇ º¯¼öµéÀº ¼­ºê½©ÀÌ ÀÖ´Â ÄÚµå ºí·° ¹ÛÀ¸·Î º¸ÀÌÁö ¾Ê½À´Ï´Ù. Áï, ½ÇÁ¦·Î´Â Áö¿ª º¯¼ö°¡ µË´Ï´Ù.

예 3-77. ¼­ºê½©¿¡¼­ º¯¼öÀÇ Åë¿ë ¹üÀ§

#!/bin/bash

echo

outer_variable=Outer

(
inner_variable=Inner
echo "¼­ºê½©ÀÇ \"inner_variable\" = $inner_variable"
echo "¼­ºê½©ÀÇ \"outer\" = $outer_variable"
)

echo

if [ -z $inner_variable ]
then
  echo "inner_variable Àº ½©ÀÇ ¸ÞÀο¡¼­ Á¤ÀÇ µÇÁö ¾Ê¾Ò½À´Ï´Ù."
else
  echo "inner_variable Àº ½©ÀÇ ¸ÞÀο¡¼­ Á¤ÀÇ µÇ¾ú½À´Ï´Ù."
fi

echo "½© ¸ÞÀÎÀÇ \"inner_variable\" = $inner_variable"
# $inner_variable Àº ÃʱâÈ­ µÇÁö ¾ÊÀº »óÅ·Πº¸ÀÌ°Ô µÇ´Âµ¥
# ¼­ºê½©¿¡¼­ Á¤ÀÇµÈ º¯¼ö´Â "Áö¿ª º¯¼ö"À̱⠶§¹®ÀÔ´Ï´Ù.

echo

exit 0

예 3-78. ¼­ºê½©¿¡¼­ º´·Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇà½Ã۱â

	(cat list1 list2 list3 | sort | uniq > list123)
	(cat list4 list5 list6 | sort | uniq > list456)
	# °¢ ¸í·É¾îµéÀ» µ¿½Ã¿¡ ½ÇÇà½Ã۰í ÇÕÄ£ ´ÙÀ½¿¡ Á¤·Ä½ÃÅ´ 
	
	wait # ¼­ºê½©ÀÌ ³¡³ª±â Àü¿¡ ´ÙÀ½ ¸í·É¾î¸¦ ½ÇÇà½ÃŰÁö ¾ÊÀ½ 
	
	diff list123 list456
	

참고: Áß°ýÈ£¼ÓÀÇ ¸í·É¾î ºí·°Àº ¼­ºê½©À» ¶ç¿ìÁö ¾Ê½À´Ï´Ù.

{ command1; command2; command3; ... }