bash »õ ¹öÁ¯ºÎÅÍ´Â 1Â÷¿ø ¹è¿À» Áö¿øÇÕ´Ï´Ù. variable[xx]ó·³ ¼±¾ðÇÒ ¼öµµ ÀÖ°í declare -a variableó·³ Á÷Á¢ÀûÀ¸·Î ÁöÁ¤ÇØ ÁÙ ¼öµµ ÀÖ½À´Ï´Ù. ¹è¿ º¯¼ö¸¦ ¿ªÂüÁ¶ÇÏ·Á¸é(³»¿ëÀ» ¾Ë¾Æ³»·Á¸é) ${variable[xx]}ó·³ Áß°ýÈ£ Ç¥±â¹ýÀ» ¾²¸é µË´Ï´Ù.
¿¹ 26-1. °£´ÜÇÑ ¹è¿ »ç¿ë¹ý
#!/bin/bash area[11]=23 area[13]=37 area[51]=UFOs # ¹è¿ ¸â¹öµéÀº ÀÎÁ¢ÇØ Àְųª ¿¬¼ÓÀûÀÌÁö ¾Ê¾Æµµ µË´Ï´Ù. # ¸î¸î ¸â¹ö¸¦ ÃʱâÈ µÇÁö ¾ÊÀº ä ³öµÖµµ µË´Ï´Ù. # ¹è¿ Áß°£ÀÌ ºñ¾î À־ ±¦Âú½À´Ï´Ù. echo -n "area[11] = " echo ${area[11]} # {Áß°ýÈ£}°¡ ÇÊ¿ä echo -n "area[13] = " echo ${area[13]} echo "area[51]ÀÇ °ªÀº ${area[51]} ÀÔ´Ï´Ù." # ÃʱâÈ ¾È µÈ ¹è¿ º¯¼ö´Â ºó ÄÀ¸·Î ÂïÈü´Ï´Ù. echo -n "area[43] = " echo ${area[43]} echo "(area[43]Àº ÇÒ´çµÇÁö ¾Ê¾Ò½À´Ï´Ù)" echo # µÎ ¹è¿ º¯¼öÀÇ ÇÕÀ» ¼¼ ¹ø° ¹è¿ º¯¼ö¿¡ ÇÒ´çÇÕ´Ï´Ù. area[5]=`expr ${area[11]} + ${area[13]}` echo "area[5] = area[11] + area[13]" echo -n "area[5] = " echo ${area[5]} area[6]=`expr ${area[11]} + ${area[51]}` echo "area[6] = area[11] + area[51]" echo -n "area[6] = " echo ${area[6]} # ¹®ÀÚ¿¿¡ Á¤¼ö¸¦ ´õÇÏ´Â °ÍÀÌ Çã¿ëµÇÁö ¾Ê±â ¶§¹®¿¡ µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. echo; echo; echo # ----------------------------------------------------------------- # ´Ù¸¥ ¹è¿ÀÎ "area2"¸¦ º¾½Ã´Ù. # ¹è¿ º¯¼ö¿¡ °ªÀ» ÇÒ´çÇÏ´Â ´Ù¸¥ ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù... # array_name=( XXX YYY ZZZ ... ) area2=( zero one two three four ) echo -n "area2[0] = " echo ${area2[0]} # ¾ÆÇÏ, ¹è¿ À妽º°¡ 0ºÎÅÍ ½ÃÀÛÇϴ±º¿ä(¹è¿ÀÇ Ã¹¹ø° ¿ä¼Ò´Â [0]ÀÌÁö [1]ÀÌ ¾Æ´Õ´Ï´Ù). echo -n "area2[1] = " echo ${area2[1]} # [1]Àº ¹è¿ÀÇ µÎ¹ø° ¿ä¼ÒÀÔ´Ï´Ù. # ----------------------------------------------------------------- echo; echo; echo # ----------------------------------------------- # ¶Ç ´Ù¸¥ ¹è¿ "area3". # ¹è¿ º¯¼ö¿¡ °ªÀ» ÇÒ´çÇÏ´Â ¶Ç ´Ù¸¥ ¹æ¹ý... # array_name=([xx]=XXX [yy]=YYY ...) area3=([17]=seventeen [24]=twenty-four) echo -n "area3[17] = " echo ${area3[17]} echo -n "area3[24] = " echo ${area3[24]} # ----------------------------------------------- exit 0 |
¹è¿ º¯¼ö´Â µ¶Æ¯ÇÑ ¹®¹ýÀ» °®°í ÀÖ°í Ç¥ÁØ Bash ¿¬»êÀڵ鵵 ¹è¿¿¡ ¾µ ¼ö Àִ Ưº°ÇÑ ¿É¼ÇÀ» °®°í ÀÖ½À´Ï´Ù.
array=( zero one two three four five ) echo ${array[0]} # zero echo ${array:0} # zero # ù¹ø° ¿ä¼ÒÀÇ ¸Å°³º¯¼ö È®Àå. echo ${array:1} # ero # ù¹ø° ¿ä¼ÒÀÇ µÎ ¹ø° ¹®ÀÚ¿¡¼ºÎÅÍ ¸Å°³º¯¼ö È®Àå. echo ${#array} # 4 # ¹è¿ ù¹ø° ¿ä¼ÒÀÇ ±æÀÌ. |
¸î¸î Bash ³»Àå ¸í·ÉµéÀº ¹è¿ ¹®¸Æ¿¡¼ ±× Àǹ̰¡ ¾à°£ ¹Ù²ò´Ï´Ù. ¿¹¸¦ µé¾î, unset Àº ¹è¿ÀÇ ÇÑ ¿ä¼Ò¸¦ Áö¿öÁְųª ¹è¿ Àüü¸¦ Áö¿öÁÝ´Ï´Ù.
¿¹ 26-2. ¹è¿ÀÇ Æ¯º°ÇÑ Æ¯¼º ¸î °¡Áö
#!/bin/bash declare -a colors # Å©±â ÁöÁ¤¾øÀÌ ¹è¿À» ¼±¾ðÇÏ°Ô ÇØÁÝ´Ï´Ù. echo "ÁÁ¾ÆÇÏ´Â »ö±òÀ» ³ÖÀ¸¼¼¿ä(ºó ÄÀ¸·Î ±¸ºÐÇØ ÁÖ¼¼¿ä)." read -a colors # ¾Æ·¡¼ ¼³¸íÇÒ Æ¯Â¡µé ¶§¹®¿¡, ÃÖ¼ÒÇÑ 3°³ÀÇ »ö±òÀ» ³ÖÀ¸¼¼¿ä. # 'read'ÀÇ Æ¯º°ÇÑ ¿É¼ÇÀ¸·Î ¹è¿¿¡ ÀÐÀº °ªÀ» ³Ö¾î ÁÝ´Ï´Ù. echo element_count=${#colors[@]} # ¹è¿ ¿ä¼ÒÀÇ ÃÑ °¹¼ö¸¦ ¾Ë¾Æ³»±â À§ÇÑ Æ¯º°ÇÑ ¹®¹ý. # element_count=${#colors[*]} ¶ó°í Çصµ µË´Ï´Ù. # # "@" º¯¼ö´Â Äõ¿ìÆ® ¾È¿¡¼ÀÇ ³¹¸» Á¶°¢³²(word splitting)À» Çã¿ëÇØ ÁÝ´Ï´Ù. #+ (°ø¹é¹®ÀÚ¿¡ ÀÇÇØ ³ª´²Á® ÀÖ´Â º¯¼öµéÀ» ÃßÃâÇØ ³¿). index=0 while [ "$index" -lt "$element_count" ] do # ¹è¿ÀÇ ¸ðµç ¿ä¼Ò¸¦ ³ª¿ÇØ ÁÝ´Ï´Ù. echo ${colors[$index]} let "index = $index + 1" done # °¢ ¹è¿ ¿ä¼Ò´Â ÇÑ ÁÙ¿¡ Çϳª¾¿ ÂïÈ÷´Âµ¥, # ÀÌ°Ô ½È´Ù¸é echo -n "${colors[$index]} " ¶ó°í ÇÏ¸é µË´Ï´Ù. # # ´ë½Å "for" ·çÆ®¸¦ ¾²¸é: # for i in "${colors[@]}" # do # echo "$i" # done # (Thanks, S.C.) echo # Á» ´õ ¿ì¾ÆÇÑ ¹æ¹ýÀ¸·Î ¸ðµç ¹è¿ ¿ä¼Ò¸¦ ´Ù½Ã ³ª¿. echo ${colors[@]} # echo ${colors[*]} ¶ó°í Çصµ µË´Ï´Ù. echo # "unset" ¸í·É¾î´Â ¹è¿ ¿ä¼Ò¸¦ Áö¿ì°Å³ª ¹è¿ Àüü¸¦ Áö¿öÁÝ´Ï´Ù. unset colors[1] # ¹è¿ÀÇ µÎ¹ø° ¿ä¼Ò¸¦ »èÁ¦. # colors[1]= ¶ó°í Çصµ µË´Ï´Ù. echo ${colors[@]} # ¹è¿À» ´Ù½Ã ³ª¿Çϴµ¥ À̹ø¿¡´Â µÎ ¹ø° ¿ä¼Ò°¡ ºüÁ®ÀÖ½À´Ï´Ù. unset colors # ¹è¿ Àüü¸¦ »èÁ¦. # unset colors[*] ³ª #+ unset colors[@] ¶ó°í Çصµ µË´Ï´Ù. echo; echo -n "»ö±òÀÌ ¾ø¾îÁ³¾î¿ä." echo ${colors[@]} # ¹è¿À» ´Ù½Ã ³ª¿ÇØ º¸Áö¸¸ ºñ¾îÀÖÁÒ. exit 0 |
À§ÀÇ ¿¹Á¦¿¡¼ »ìÆ캻 °Íó·³ ${array_name[@]}³ª ${array_name[*]}´Â ¹è¿ÀÇ ¸ðµç ¿ø¼Ò¸¦ ³ªÅ¸³À´Ï´Ù. ¹è¿ÀÇ ¿ø¼Ò °¹¼ö¸¦ ³ªÅ¸³»·Á¸é ¾ÕÀÇ Ç¥Çö°ú ºñ½ÁÇÏ°Ô ${#array_name[@]}³ª ${#array_name[*]}¶ó°í ÇÏ¸é µË´Ï´Ù. ${#array_name}´Â ¹è¿ÀÇ Ã¹¹ø° ¿ø¼ÒÀÎ ${array_name[0]}ÀÇ ±æÀÌ(¹®ÀÚ °¹¼ö)¸¦ ³ªÅ¸³À´Ï´Ù.
¿¹ 26-3. ºó ¹è¿°ú ºó ¿ø¼Ò
#!/bin/bash # empty-array.sh # ºó ¹è¿°ú ºó ¿ä¼Ò¸¦ °®´Â ¹è¿Àº ´Ù¸¨´Ï´Ù. array0=( first second third ) array1=( '' ) # "array1" Àº ÇÑ °³ÀÇ ¿ä¼Ò¸¦ °®°í ÀÖ½À´Ï´Ù. array2=( ) # ¿ä¼Ò°¡ ¾øÁÒ... "array2"´Â ºñ¾î ÀÖ½À´Ï´Ù. echo echo "array0 ÀÇ ¿ä¼Òµé: ${array0[@]}" echo "array1 ÀÇ ¿ä¼Òµé: ${array1[@]}" echo "array2 ÀÇ ¿ä¼Òµé: ${array2[@]}" echo echo "array0 ÀÇ Ã¹¹ø° ¿ä¼Ò ±æÀÌ = ${#array0}" echo "array1 ÀÇ Ã¹¹ø° ¿ä¼Ò ±æÀÌ = ${#array1}" echo "array2 ÀÇ Ã¹¹ø° ¿ä¼Ò ±æÀÌ = ${#array2}" echo echo "array0 ÀÇ ¿ä¼Ò °¹¼ö = ${#array0[*]}" # 3 echo "array1 ÀÇ ¿ä¼Ò °¹¼ö = ${#array1[*]}" # 1 (³î¶øÁÒ!) echo "array2 ÀÇ ¿ä¼Ò °¹¼ö = ${#array2[*]}" # 0 echo exit 0 # Thanks, S.C. |
${array_name[@]}¿Í ${array_name[*]}ÀÇ °ü°è´Â $@ ¿Í $*ÀÇ °ü°è¿Í ºñ½ÁÇÕ´Ï´Ù. ÀÌ °·ÂÇÑ ¹è¿ Ç¥±â¹ýÀº ¾µ¸ð°¡ ¾ÆÁÖ ¸¹½À´Ï´Ù.
# ¹è¿ º¹»ç. array2=( "${array1[@]}" ) # ¹è¿¿¡ ¿ø¼Ò Ãß°¡. array=( "${array[@]}" "»õ ¿ø¼Ò" ) # ȤÀº array[${#array[*]}]="»õ ¿ø¼Ò" # Thanks, S.C. |
--
¹è¿À» ¾²¸é ½© ½ºÅ©¸³Æ®¿¡¼µµ ¾ÆÁÖ ¿À·¡µÇ°í Àͼ÷ÇÑ ¾Ë°í¸®ÁòÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀÌ ¹Ýµå½Ã ÁÁÀº »ý°¢ÀÎÁö ¾Æ´ÑÁö´Â µ¶ÀÚ ¿©·¯ºÐÀÌ °áÁ¤ÇÒ ÀÏÀÔ´Ï´Ù.
¿¹ 26-4. ¾ÆÁÖ ¿À·¡µÈ Ä£±¸: ¹öºí Á¤·Ä(Bubble Sort)
#!/bin/bash # ºÒ¿ÏÀüÇÑ ¹öºí Á¤·Ä # ¹öºí Á¤·Ä ¾Ë°í¸®ÁòÀ» ¸Ó¸®¼Ó¿¡ ¶°¿Ã·Á º¸¼¼¿ä. ÀÌ ½ºÅ©¸³Æ®¿¡¼´Â... # Á¤·ÄÇÒ ¹è¿À» ¸Å¹ø Ž»öÇÒ ¶§ ¸¶´Ù ÀÎÁ¢ÇÑ µÎ ¿ø¼Ò¸¦ ºñ±³Çؼ # ¼ø¼°¡ ´Ù¸£¸é µÎ °³¸¦ ¹Ù²ß´Ï´Ù. # ù¹ø° Ž»ö¿¡¼´Â "°¡Àå Å«" ¿ø¼Ò°¡ Á¦ÀÏ ³¡À¸·Î °©´Ï´Ù. # µÎ¹ø° Ž»ö¿¡¼´Â µÎ¹ø°·Î "°¡Àå Å«" ¿ø¼Ò°¡ ³¡¿¡¼ µÎ ¹ø°·Î °©´Ï´Ù. # ÀÌ·¸°Ô ÇÏ¸é °¢ Ž»ö ´Ü°è´Â ¹è¿º¸´Ù ÀÛÀº ¼ö ¸¸ÅÀ» °Ë»öÇÏ°Ô µÇ°í, # µÚ·Î °¥¼ö·Ï Ž»ö ¼Óµµ°¡ »¡¶óÁö´Â °ÍÀ» ´À³¥ ¼ö ÀÖÀ» °Ì´Ï´Ù. exchange() { # ¹è¿ÀÇ µÎ ¸â¹ö¸¦ ¹Ù²ãÄ¡±â ÇÕ´Ï´Ù. local temp=${Countries[$1]} # ¹Ù²ãÄ¡±âÇÒ µÎ º¯¼ö¸¦ À§ÇÑ Àӽà ÀúÀå¼Ò Countries[$1]=${Countries[$2]} Countries[$2]=$temp return } declare -a Countries # º¯¼ö Á¤ÀÇ, ¹Ø¿¡¼ ÃʱâÈ µÇ±â ¶§¹®¿¡ ¿©±â¼´Â ¾È ½áµµ µË´Ï´Ù. Countries=(Netherlands Ukraine Zair Turkey Russia Yemen Syria Brazil Argentina Nicaragua Japan Mexico Venezuela Greece England Israel Peru Canada Oman Denmark Wales France Kashmir Qatar Liechtenstein Hungary) # X·Î ½ÃÀÛÇÏ´Â ³ª¶ó À̸§Àº »ý°¢ÀÌ ¾È ³ª³×¿ä, ÂÁ... clear # ½ÃÀÛÇϱâ Àü¿¡ ȸéÀ» ±ú²ýÀÌ Áö¿ì°í... echo "0: ${Countries[*]}" # 0¹ø° Ž»öÀÇ ¹è¿ Àüü¸¦ º¸¿©ÁÜ. number_of_elements=${#Countries[@]} let "comparisons = $number_of_elements - 1" count=1 # Ž»ö Ƚ¼ö. while [ $comparisons -gt 0 ] # ¹Ù±ùÂÊ ·çÇÁÀÇ ½ÃÀÛ do index=0 # °¢ Ž»ö ´Ü°è¸¶´Ù ¹è¿ÀÇ ½ÃÀÛ À妽º¸¦ 0À¸·Î ÀâÀ½ while [ $index -lt $comparisons ] # ¾ÈÂÊ ·çÇÁÀÇ ½ÃÀÛ do if [ ${Countries[$index]} \> ${Countries[`expr $index + 1`]} ] # ¼ø¼°¡ Ʋ¸®¸é... # \> °¡ ¾Æ½ºÅ° ºñ±³ ¿¬»êÀÚ¿´´ø°Å ±â¾ï³ª½ÃÁÒ? then exchange $index `expr $index + 1` # ¹Ù²ß½Ã´Ù. fi let "index += 1" done # ¾ÈÂÊ ·çÇÁÀÇ ³¡ let "comparisons -= 1" # "°¡Àå Å«" ¿ø¼Ò°¡ Á¦ÀÏ ³¡À¸·Î °¬±â ¶§¹®¿¡ ºñ±³È½¼ö¸¦ Çϳª ÁÙÀÏ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. echo echo "$count: ${Countries[@]}" # °¢ Ž»ö ´Ü°è°¡ ³¡³ª¸é °á°ú¸¦ º¸¿©ÁÝ´Ï´Ù. echo let "count += 1" # Ž»ö Ƚ¼ö¸¦ ´Ã¸³´Ï´Ù. done # ¹Ù±ùÂÊ ·çÇÁÀÇ ³¡ # ³¡! exit 0 |
--
¹è¿À» ¾²¸é ¿¡¶óÅ佺Å׳׽ºÀÇ Ã¼(Sieve of Erastosthenes)ÀÇ ½© ½ºÅ©¸³Æ® ¹öÀüÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð, ÀÌ·¸°Ô öÀúÈ÷ ¸®¼Ò½º¿¡ ÀÇÁ¸ÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀº C °°Àº ÄÄÆÄÀÏ ¾ð¾î·Î ¾²¿©Á®¾ß ÇÕ´Ï´Ù. ÀÌ ½© ½ºÅ©¸³Æ® ¹öÀüÀº ±²ÀåÈ÷ ´À¸®°Ô µ¿ÀÛÇÕ´Ï´Ù.
¿¹ 26-5. º¹ÀâÇÑ ¹è¿ ¾îÇø®ÄÉÀ̼Ç: ¿¡¶óÅ佺Å׳׽ºÀÇ Ã¼(Sieve of Erastosthenes)
#!/bin/bash # sieve.sh # ¿¡¶óÅ佺Å׳׽ºÀÇ Ã¼(Sieve of Erastosthenes) # ¼Ò¼ö¸¦ ã¾ÆÁÖ´Â °í´ëÀÇ ¾Ë°í¸®Áò. # ÀÌ ½ºÅ©¸³Æ®´Â ¶È°°Àº C ÇÁ·Î±×·¥º¸´Ù µÎ ¼¼¹è´Â ´õ ´À¸®°Ô µ¿ÀÛÇÕ´Ï´Ù. LOWER_LIMIT=1 # 1 ºÎÅÍ. UPPER_LIMIT=1000 # 1000 ±îÁö. # (½Ã°£ÀÌ ÁÖü¸øÇÒ Á¤µµ·Î ³²¾Æ µ·´Ù¸é ÀÌ °ªÀ» ´õ ³ô°Ô Àâ¾Æµµ µË´Ï´Ù.) PRIME=1 NON_PRIME=0 let SPLIT=UPPER_LIMIT/2 # ÃÖÀûÈ: # ¿ÀÁ÷ »óÇÑ°ªÀÇ ¹Ý¸¸ È®ÀÎÇØ º¸·Á°í ÇÒ °æ¿ì ÇÊ¿ä. declare -a Primes # Primes[] ´Â ¹è¿. initialize () { # ¹è¿ ÃʱâÈ. i=$LOWER_LIMIT until [ "$i" -gt "$UPPER_LIMIT" ] do Primes[i]=$PRIME let "i += 1" done # ¹«ÁË°¡ ¹àÇôÁö±â Àü±îÁö´Â ¹è¿ÀÇ ¸ðµç °ªÀ» À¯ÁË(¼Ò¼ö)¶ó°í °¡Á¤. } print_primes () { # Primes[] ¸â¹öÁß ¼Ò¼ö¶ó°í ¹àÇôÁø °ÍµéÀ» º¸¿©ÁÝ´Ï´Ù. i=$LOWER_LIMIT until [ "$i" -gt "$UPPER_LIMIT" ] do if [ "${Primes[i]}" -eq "$PRIME" ] then printf "%8d" $i # ¼ýÀÚ´ç 8 ÄÀ» Á༠¿¹»Ú°Ô º¸¿©ÁÝ´Ï´Ù. fi let "i += 1" done } sift () # ¼Ò¼ö°¡ ¾Æ´Ñ ¼ö¸¦ °É·¯³À´Ï´Ù. { let i=$LOWER_LIMIT+1 # 1 ÀÌ ¼Ò¼öÀÎ °ÍÀº ¾Ë°í ÀÖÀ¸´Ï, 2 ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù. until [ "$i" -gt "$UPPER_LIMIT" ] do if [ "${Primes[i]}" -eq "$PRIME" ] # ÀÌ¹Ì °É·¯Áø ¼ýÀÚ(¼Ò¼ö°¡ ¾Æ´Ñ ¼ö)´Â °Ç³Ê¶Ý´Ï´Ù. then t=$i while [ "$t" -le "$UPPER_LIMIT" ] do let "t += $i " Primes[t]=$NON_PRIME # ¸ðµç ¹è¼ö´Â ¼Ò¼ö°¡ ¾Æ´Ï¶ó°í Ç¥½ÃÇÕ´Ï´Ù. done fi let "i += 1" done } # ÇÔ¼öµéÀ» ¼ø¼´ë·Î ºÎ¸¨´Ï´Ù. initialize sift print_primes # ÀÌ·±°ÍÀ» ¹Ù·Î ±¸Á¶Àû ÇÁ·Î±×·¡¹ÖÀ̶ó°í ÇÑ´ä´Ï´Ù. echo exit 0 # ----------------------------------------------- # # ´ÙÀ½ ÄÚµå´Â ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. # ÀÌ°ÍÀº Stephane Chazelas ÀÇ Çâ»óµÈ ¹öÀüÀ¸·Î ½ÇÇà ¼Óµµ°¡ Á» ´õ ºü¸¨´Ï´Ù. # ¼Ò¼öÀÇ ÃÖ´ë ÇѰ踦 ¸í·É¾îÁÙ¿¡¼ ÁöÁ¤ÇØ ÁÖ¾î¾ß µË´Ï´Ù. UPPER_LIMIT=$1 # ¸í·É¾îÁÙ¿¡¼ÀÇ ÀÔ·Â. let SPLIT=UPPER_LIMIT/2 # ÃÖ´ë¼öÀÇ Áß°£. Primes=( '' $(seq $UPPER_LIMIT) ) i=1 until (( ( i += 1 ) > SPLIT )) # Áß°£±îÁö¸¸ È®ÀÎ ÇÊ¿ä. do if [[ -n $Primes[i] ]] then t=$i until (( ( t += i ) > UPPER_LIMIT )) do Primes[t]= done fi done echo ${Primes[*]} exit 0 |
ÀÌ ¹è¿ ±â¹ÝÀÇ ¼Ò¼ö »ý¼º±â¿Í ¹è¿À» ¾²Áö ¾Ê´Â ¿¹ A-11¸¦ ºñ±³ÇØ º¸¼¼¿ä.
--
¹è¿ÀÇ "÷ÀÚ"(subscript)¸¦ ´É¼÷ÇÏ°Ô Á¶ÀÛÇÏ·Á¸é Àӽ÷Π¾µ º¯¼ö°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ´Ù½Ã ¸»ÇÏÁö¸¸, ÀÌ·± ÀÏÀÌ ÇÊ¿äÇÑ ÇÁ·ÎÁ§Æ®µéÀº ÆÞÀ̳ª C ó·³ ´õ °·ÂÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ »ç¿ëÀ» °í·ÁÇØ º¸±â ¹Ù¶ø´Ï´Ù.
¿¹ 26-6. º¹ÀâÇÑ ¹è¿ ¾îÇø®ÄÉÀ̼Ç: ±â¹¦ÇÑ ¼öÇÐ ±Þ¼ö Ž»ö(Exploring a weird mathematical series)
#!/bin/bash # Douglas Hofstadter ÀÇ À¯¸íÇÑ "Q-±Þ¼ö"(Q-series): # Q(1) = Q(2) = 1 # Q(n) = Q(n - Q(n-1)) + Q(n - Q(n-2)), for n>2 # "¹«Áú¼ÇÑ" Q-±Þ¼ö´Â ÀÌ»óÇÏ°í ¿¹ÃøÇÒ ¼ö ¾ø´Â ÇൿÀ» º¸ÀÔ´Ï´Ù. # ÀÌ ±Þ¼öÀÇ Ã³À½ 20°³ Ç×Àº ´ÙÀ½°ú °°½À´Ï´Ù: # 1 1 2 3 3 4 5 5 6 6 6 8 8 8 10 9 10 11 11 12 # Hofstadter ÀÇ Ã¥, "Goedel, Escher, Bach: An Eternal Golden Braid", # p. 137, ff. ¸¦ Âü°íÇϼ¼¿ä. LIMIT=100 # °è»êÇÒ Ç× ¼ö LINEWIDTH=20 # ÇÑ ÁÙ¿¡ Ãâ·ÂÇÒ Ç× ¼ö Q[1]=1 # óÀ½ µÎ Ç×Àº 1. Q[2]=1 echo echo "Q-±Þ¼ö [$LIMIT Ç×]:" echo -n "${Q[1]} " # óÀ½ µÎ Ç×À» Ãâ·Â echo -n "${Q[2]} " for ((n=3; n <= $LIMIT; n++)) # C ÇüÅÂÀÇ ·çÇÁ Á¶°Ç. do # Q[n] = Q[n - Q[n-1]] + Q[n - Q[n-2]] for n>2 # Bash ´Â º¹ÀâÇÑ ¹è¿ ¿¬»êÀ» Àß Ã³¸®ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ # À§ÀÇ ½ÄÀ» Çѹø¿¡ °è»êÇÏÁö ¾Ê°í Áß°£¿¡ ´Ù¸¥ Ç×À» µÎ¾î °è»êÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. let "n1 = $n - 1" # n-1 let "n2 = $n - 2" # n-2 t0=`expr $n - ${Q[n1]}` # n - Q[n-1] t1=`expr $n - ${Q[n2]}` # n - Q[n-2] T0=${Q[t0]} # Q[n - Q[n-1]] T1=${Q[t1]} # Q[n - Q[n-2]] Q[n]=`expr $T0 + $T1` # Q[n - Q[n-1]] + Q[n - ![n-2]] echo -n "${Q[n]} " if [ `expr $n % $LINEWIDTH` -eq 0 ] # ¿¹»Û Ãâ·Â then # ³ª¸ÓÁö echo # °¢ ÁÙÀÌ ±¸ºÐµÇµµ·Ï ÇØ ÁÜ. fi done echo exit 0 # ¿©±â¼´Â Q-±Þ¼ö¸¦ ¹Ýº¹ÀûÀ¸·Î ±¸ÇöÇß½À´Ï´Ù. # Á» ´õ Á÷°üÀûÀÎ Àç±ÍÀû ±¸ÇöÀº µ¶ÀÚµéÀ» À§ÇØ ³²°Ü ³õ°Ú½À´Ï´Ù. # °æ°í: ÀÌ ±Þ¼ö¸¦ Àç±ÍÀûÀ¸·Î °è»êÇϸé "¾ÆÁÖ" ±ä ½Ã°£ÀÌ °É¸³´Ï´Ù. |
--
bash´Â 1Â÷¿ø ¹è¿¸¸ Áö¿øÇÕ´Ï´Ù¸¸, ¾à°£ÀÇ ¼ÓÀÓ¼ö¸¦ ¾²¸é ´ÙÂ÷¿ø ¹è¿À» Èä³»³¾ ¼ö ÀÖ½À´Ï´Ù.
¿¹ 26-7. 2Â÷¿ø ¹è¿À» Èä³»³½ ´ÙÀ½, ±â¿ïÀ̱â(tilting it)
#!/bin/bash # 2Â÷¿ø ¹è¿À» ½Ã¹Ä·¹ÀÌÆ®. # 2Â÷¿ø ¹è¿Àº ¿(row)À» ¿¬¼ÓÀûÀ¸·Î ÀúÀåÇؼ ±¸ÇöÇÕ´Ï´Ù. Rows=5 Columns=5 declare -a alpha # C ¿¡¼ # char alpha[Rows][Columns]; # ÀÎ °Íó·³. ÇÏÁö¸¸ ºÒÇÊ¿äÇÑ ¼±¾ðÀÔ´Ï´Ù. load_alpha () { local rc=0 local index for i in A B C D E F G H I J K L M N O P Q R S T U V W X Y do local row=`expr $rc / $Columns` local column=`expr $rc % $Rows` let "index = $row * $Rows + $column" alpha[$index]=$i # alpha[$row][$column] let "rc += 1" done # declare -a alpha=( A B C D E F G H I J K L M N O P Q R S T U V W X Y ) # ¶ó°í ÇÏ´Â °Í°ú ºñ½ÁÇÏÁö¸¸ ÀÌ·¸°Ô Çϸé À¢Áö 2Â÷¿ø ¹è¿°°Àº ´À³¦ÀÌ µéÁö ¾Ê½À´Ï´Ù. } print_alpha () { local row=0 local index echo while [ "$row" -lt "$Rows" ] # "¿ ¿ì¼±"(row major) ¼ø¼·Î Ãâ·Â # ¿(¹Ù±ù ·çÇÁ)Àº ±×´ë·Î°í ÇàÀÌ º¯ÇÔ. do local column=0 while [ "$column" -lt "$Columns" ] do let "index = $row * $Rows + $column" echo -n "${alpha[index]} " # alpha[$row][$column] let "column += 1" done let "row += 1" echo done # °£´ÜÇÏ°Ô ´ÙÀ½Ã³·³ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. # echo ${alpha[*]} | xargs -n $Columns echo } filter () # ¹è¿ÀÇ À½¼ö À妽º¸¦ °É·¯³¿. { echo -n " " # ±â¿ïÀÓ(tilt) Á¦°ø. if [[ "$1" -ge 0 && "$1" -lt "$Rows" && "$2" -ge 0 && "$2" -lt "$Columns" ]] then let "index = $1 * $Rows + $2" # ÀÌÁ¦, ȸÀü(rotate)½ÃÄÑ Ãâ·Â. echo -n " ${alpha[index]}" # alpha[$row][$column] fi } rotate () # ¹è¿ ¿ÞÂÊ ¾Æ·¡¸¦ ±âÁØÀ¸·Î 45µµ ȸÀü. { local row local column for (( row = Rows; row > -Rows; row-- )) # ¹è¿À» µÚ¿¡¼ºÎÅÍ Çϳª¾¿ ó¸®. do for (( column = 0; column < Columns; column++ )) do if [ "$row" -ge 0 ] then let "t1 = $column - $row" let "t2 = $column" else let "t1 = $column" let "t2 = $column + $row" fi filter $t1 $t2 # ¹è¿ÀÇ À½¼ö À妽º¸¦ °É·¯³¿. done echo; echo done # ¹è¿ ȸÀü(array rotation)Àº Herbert Mayer °¡ ¾´ # "Advanced C Programming on the IBM PC"¿¡ ³ª¿Â ¿¹Á¦(143-146 ÂÊ)¿¡¼ # ¿µ°¨À» ¹Þ¾Æ ÀÛ¼ºÇß½À´Ï´Ù(¼Áö»çÇ× Âü°í). } #-----------------------------------------------------# load_alpha # ¹è¿À» Àаí, print_alpha # Ãâ·ÂÇÑ ´ÙÀ½, rotate # ¹Ý½Ã°è ¹æÇâÀ¸·Î 45µµ ȸÀü. #-----------------------------------------------------# # ÀÌ ½ºÅ©¸³Æ®´Â ¿¹Á¦¸¦ À§ÇÑ ¿¹Á¦À̱⠶§¹®¿¡ ¾à°£ ¾î»öÇÑ ¸éÀÌ ÀÖ½À´Ï´Ù. # # µ¶ÀÚ¸¦ À§ÇÑ ¿¬½À¹®Á¦ 1: # ¹è¿À» ÀÐ¾î µéÀÌ°í Ãâ·ÂÇÏ´Â ÇÔ¼ö¸¦ # Á» ´õ ±³À°ÀûÀÌ°í ¿ì¾ÆÇÏ°Ô ´Ù½Ã ÀÛ¼ºÇØ º¸¼¼¿ä. # # ¿¬½À¹®Á¦ 2: # ¹è¿ ȸÀü ÇÔ¼ö°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¾Ë¾Æ³» º¸¼¼¿ä. # ÈùÆ®: ¹è¿ÀÇ ¿ªÀ妽ÌÀÌ ÀǹÌÇÏ´Â ¹Ù°¡ ¹»±î¿ä? exit 0 |