#!/bin/bash # string.bash --- string(3) ¶óÀ̺귯¸®ÀÇ bash ¿¡¹Ä·¹ÀÌ¼Ç ¹öÀü # ÀúÀÚ: Noah Friedman <friedman@prep.ai.mit.edu> # ==> ÀúÀÚÀÇ Çã¶ôÇÏ¿¡ ÀÌ ¹®¼¿¡ °ÔÀçÇÔ. # Created: 1992-07-01 # Last modified: 1993-09-29 # Public domain # Chet Ramey °¡ bash ¹öÀü 2 ¹®¹ýÀ» ¾²µµ·Ï º¯È¯ # Commentary: # Code: #:docstring strcat: # Usage: strcat s1 s2 # # Strcat Àº s2 ¸¦ s1 À¸·Î µ¡ºÙÀÓ. # # ¿¹Á¦: # a="foo" # b="bar" # strcat a b # echo $a # => foobar # #:end docstring: ###;;;autoload ==> Autoloading of function commented out. function strcat () { local s1_val s2_val s1_val=${!1} # º¯¼ö °£Á¢ÂüÁ¶ È®Àå s2_val=${!2} eval "$1"=\'"${s1_val}${s2_val}"\' # ==> µÎ º¯¼öÁß Çϳª¶óµµ ÀÛÀº µû¿ÈÇ¥°¡ µé¾î ÀÖÀ» °æ¿ì¿¡´Â, # ==> eval $1='${s1_val}${s2_val}' À̶ó°í ÇÏ¸é µË´Ï´Ù. } #:docstring strncat: # »ç¿ë¹ý: strncat s1 s2 $n # # strcat °ú ºñ½ÁÇÏÁö¸¸ s2 ¿¡¼ ÃÖ´ë n ¹®ÀÚ¸¸Å¸¸ µ¡ºÙÀÔ´Ï´Ù. s2 °¡ n º¸´Ù # ª´Ù¸é ±×³É s2 ¸¸ º¹»çÇÕ´Ï´Ù. Echoes result on stdout. # # ¿¹Á¦: # a=foo # b=barbaz # strncat a b 3 # echo $a # => foobar # #:end docstring: ###;;;autoload function strncat () { local s1="$1" local s2="$2" local -i n="$3" local s1_val s2_val s1_val=${!s1} # ==> º¯¼ö °£Á¢ ÂüÁ¶ È®Àå s2_val=${!s2} if [ ${#s2_val} -gt ${n} ]; then s2_val=${s2_val:0:$n} # ==> ¹®ÀÚ¿Á¶°¢(substring) ÃßÃâ fi eval "$s1"=\'"${s1_val}${s2_val}"\' # ==> µÎ º¯¼öÁß Çϳª¶óµµ ÀÛÀº µû¿ÈÇ¥°¡ µé¾î ÀÖÀ» °æ¿ì¿¡´Â, # ==> eval $1='${s1_val}${s2_val}' À̶ó°í ÇÏ¸é µË´Ï´Ù. } #:docstring strcmp: # »ç¿ë¹ý: strcmp $s1 $s2 # # Strcmp ´Â µÎ ÀÎÀÚ¸¦ »çÀü»óÀÇ ¼ø¼´ë·Î ºñ±³Çؼ s1 ÀÌ s2 º¸´Ù ÀÛÀ¸¸é À½¼ö, # °°À¸¸é 0, Å©¸é ¾ç¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù. #:end docstring: ###;;;autoload function strcmp () { [ "$1" = "$2" ] && return 0 [ "${1}" '<' "${2}" ] > /dev/null && return -1 return 1 } #:docstring strncmp: # »ç¿ë¹ý: strncmp $s1 $s2 $n # # strcmp ¿Í ºñ½ÁÇϳª ÃÖ´ë n ¹®ÀÚ¸¸Å¸¸ ºñ±³ÇÕ´Ï´Ù( n ÀÌ 0 ÀÌÇϸé 0 À» ¸®ÅÏ). #:end docstring: ###;;;autoload function strncmp () { if [ -z "${3}" -o "${3}" -le "0" ]; then return 0 fi if [ ${3} -ge ${#1} -a ${3} -ge ${#2} ]; then strcmp "$1" "$2" return $? else s1=${1:0:$3} s2=${2:0:$3} strcmp $s1 $s2 return $? fi } #:docstring strlen: # »ç¿ë¹ý: strlen s # # Strlen Àº s ÀÇ ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù. #:end docstring: ###;;;autoload function strlen () { eval echo "\${#${1}}" # ==> ÀÎÀÚ·Î ³Ñ¾î¿Â º¯¼ö°ªÀÇ ±æÀ̸¦ ¸®ÅÏ } #:docstring strspn: # »ç¿ë¹ý: strspn $s1 $s2 # # Strspn Àº s2 Àüü¸¦ Æ÷ÇÔÇÏ´Â s1 ÀÇ ÃÖ´ë Ãʱ⠼¼±×¸ÕÆ® ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù. #:end docstring: ###;;;autoload function strspn () { # IFS ¸¦ ¾ð¼ÂÇØ ³õÀ¸¸é °ø¹é¹®ÀÚµµ ÀÏ¹Ý ¹®ÀÚó·³ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. local IFS= local result="${1%%[!${2}]*}" echo ${#result} } #:docstring strcspn: # »ç¿ë¹ý: strcspn $s1 $s2 # # Strcspn Àº s2 Àüü°¡ Æ÷ÇÔµÇÁö ¾Ê´Â s1 ÀÇ ÃÖ´ë Ãʱ⠼¼±×¸ÕÆ® ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù. #:end docstring: ###;;;autoload function strcspn () { # IFS ¸¦ ¾ð¼ÂÇØ ³õÀ¸¸é °ø¹é¹®ÀÚµµ ÀÏ¹Ý ¹®ÀÚó·³ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. local IFS= local result="${1%%[${2}]*}" echo ${#result} } #:docstring strstr: # »ç¿ë¹ý: strstr s1 s2 # # Strstr Àº s1 ¿¡¼ s2 °¡ óÀ½ ¹ß°ßµÇ´Â ¹®ÀÚ¿Á¶°¢(substring)À» ¿¡ÄÚÇØ ÁÖ°í, # s1 ¿¡¼ s2 °¡ ¹ß°ßµÇÁö ¾Ê´Â´Ù¸é ±×³É ¹«½ÃÇÕ´Ï´Ù. # ¸¸¾à¿¡ s2 °¡ ±æÀÌ°¡ 0 ÀÎ ¹®ÀÚ¿À» °¡¸£Å²´Ù¸é s1 À» ¸®ÅÏÇÕ´Ï´Ù. #:end docstring: ###;;;autoload function strstr () { # s2 °¡ °¡¸£Å°´Â ¹®ÀÚ¿ÀÇ ±æÀÌ°¡ 0 À̶ó¸é s1 À» ¿¡ÄÚ [ ${#2} -eq 0 ] && { echo "$1" ; return 0; } # s1 ¿¡¼ s2 °¡ ¹ß°ßµÇÁö ¾ÊÀ¸¸é ±×³É ¸®ÅÏ case "$1" in *$2*) ;; *) return 1;; esac # ÀÏÄ¡ÇÏ´Â ºÎºÐºÎÅÍ ³¡±îÁö¸¦ ¶¼¾î ³»±â À§ÇØ ÆÐÅÏ ¸ÅĪ »ç¿ë first=${1/$2*/} # ±× ´ÙÀ½¿¡´Â ÀÏÄ¡ÇÏÁö ù¹ø° ºÎºÐÀ» ¶¼¾î³¿ echo "${1##$first}" } #:docstring strtok: # »ç¿ë¹ý: strtok s1 s2 # # Strtok Àº s1 ÀÌ ±¸ºÐÀÚÀÎ s2 ¿¡ µé¾î ÀÖ´Â Çϳª ÀÌ»óÀÇ ¹®ÀÚ¿¿¡ ÀÇÇØ # 0 °³ ÀÌ»óÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù°í °¡Á¤ÇÕ´Ï´Ù. # strtok ÀÌ Ã³À½ ºÒ¸®¸é(ºñ¾î ÀÖÁö ¾ÊÀº s1 À» ÁöÁ¤Çؼ) ù¹ø° ÅäÅ«À» Æ÷ÇÔÇÑ # ¹®ÀÚ¿À» Ç¥ÁØÃâ·ÂÀ¸·Î ¿¡ÄÚÇØ ÁÝ´Ï´Ù. ÀÌ ÇÔ¼ö´Â ù¹ø° ÀÎÀÚ°¡ ºó ¹®ÀÚ¿·Î # °è¼Ó È£ÃâµÇµµ·Ï Çؼ ¹Ù·Î ´ÙÀ½¿¡ µû¶ó³ª¿À´Â ÅäÅ«À» ó¸®Çϵµ·Ï Çϱâ À§Çؼ # È£Ãâ½Ã¸¶´Ù s1 ¿¡¼ÀÇ ÀÚ½ÅÀÇ À§Ä¡¸¦ °è¼Ó ÃßÀûÇÕ´Ï´Ù. # ÀÌ·± ½ÄÀ¸·Î Çؼ ±× ´ÙÀ½ È£ÃâÀº ´õ ÀÌ»óÀÇ ÅäÅ«ÀÌ ¾øÀ» ¶§±îÁö s1 À» ó¸®ÇÕ´Ï´Ù. # ±¸ºÐ ¹®ÀÚ¿ÀÎ s2 ´Â È£Ãâ½Ã¸¶´Ù ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù. s1 ¿¡ ó¸®ÇÒ ÅäÅ«ÀÌ # ³²¾Æ ÀÖÁö ¾Ê´Ù¸é, ºó °ªÀÌ Ç¥ÁØÃâ·ÂÀ¸·Î ¿¡Äڵ˴ϴÙ. ###;;;autoload function strtok () { : } #:docstring strtrunc: # »ç¿ë¹ý: strtrunc $n $s1 {$s2} {$...} # strncmp ó·³ ¿©·¯ ÇÔ¼ö¿¡¼ ¾²À̴µ¥, ºñ±³¸¦ À§Çؼ ÀÎÀÚ¸¦ À߶ó³À´Ï´Ù. # °¢°¢ÀÇ s1, s2 ... ¿¡¼ óÀ½ n °³ÀÇ ¹®ÀÚ¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î ¿¡ÄÚÇØ ÁÝ´Ï´Ù. #:end docstring: ###;;;autoload function strtrunc () { n=$1 ; shift for z; do echo "${z:0:$n}" done } # provide string # string.bash ´Â ¿©±â±îÁö # ========================================================================== # # ==> ¿©±âºÎÅÍ´Â º» ¹®¼ÀÇ ÀúÀÚ°¡ Ãß°¡ÇÑ ºÎºÐÀÔ´Ï´Ù. # ==> ÀÌ ½ºÅ©¸³Æ®¸¦ ¿©·¯ºÐ ½ºÅ©¸³Æ®¿¡¼ ¾²·Á¸é ¿©±âºÎÅÍ ³¡±îÁö Áö¿î´ÙÀ½ # ==> ¿©·¯ºÐ ½ºÅ©¸³Æ®¿¡¼ ÀÌ ½ºÅ©¸³Æ®¸¦ "source" ÇϸéµË´Ï´Ù. # strcat string0=one string1=two echo echo "\"strcat\" ÇÔ¼ö Å×½ºÆ®:" echo "¿ø·¡ÀÇ \"string0\" = $string0" echo "\"string1\" = $string1" strcat string0 string1 echo "»õ \"string0\" = $string0" echo # strlen echo echo "\"strlen\" ÇÔ¼ö Å×½ºÆ®:" str=123456789 echo "\"str\" = $str" echo -n "\"str\" ÀÇ ±æÀÌ = " strlen str echo # µ¶ÀÚµéÀ» À§ÇÑ ¿¬½À¹®Á¦: # ¿©±â¼ ¼Ò°³ÇÑ ¹®ÀÚ¿ ÇÔ¼ö¸¦ ¸ðµÎ Å×½ºÆ®ÇÏ´Â Äڵ带 ÀÛ¼ºÇØ º¸¼¼¿ä. exit 0