Imported from ../bash-2.0.tar.gz.
This commit is contained in:
		
					parent
					
						
							
								726f63884d
							
						
					
				
			
			
				commit
				
					
						ccc6cda312
					
				
			
		
					 502 changed files with 91988 additions and 69123 deletions
				
			
		
							
								
								
									
										226
									
								
								examples/scripts.noah/string.bash
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								examples/scripts.noah/string.bash
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,226 @@ | |||
| # string.bash --- bash emulation of string(3) library routines | ||||
| # Author: Noah Friedman <friedman@prep.ai.mit.edu> | ||||
| # Created: 1992-07-01 | ||||
| # Last modified: 1993-09-29 | ||||
| # Public domain | ||||
| 
 | ||||
| # Conversion to bash v2 syntax done by Chet Ramey | ||||
| 
 | ||||
| # Commentary: | ||||
| # Code: | ||||
| 
 | ||||
| #:docstring strcat: | ||||
| # Usage: strcat s1 s2 | ||||
| # | ||||
| # Strcat appends the value of variable s2 to variable s1.  | ||||
| # | ||||
| # Example: | ||||
| #    a="foo" | ||||
| #    b="bar" | ||||
| #    strcat a b | ||||
| #    echo $a | ||||
| #    => foobar | ||||
| # | ||||
| #:end docstring: | ||||
| 
 | ||||
| ###;;;autoload | ||||
| function strcat () | ||||
| { | ||||
|     local s1_val s2_val | ||||
| 
 | ||||
|     s1_val=${!1}			# indirect variable expansion | ||||
|     s2_val=${!2} | ||||
|     eval "$1"=\'"${s1_val}${s2_val}"\' | ||||
| } | ||||
| 
 | ||||
| #:docstring strncat: | ||||
| # Usage: strncat s1 s2 $n | ||||
| #  | ||||
| # Line strcat, but strncat appends a maximum of n characters from the value | ||||
| # of variable s2.  It copies fewer if the value of variabl s2 is shorter | ||||
| # than n characters.  Echoes result on stdout. | ||||
| # | ||||
| # Example: | ||||
| #    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}			# indirect variable expansion | ||||
|     s2_val=${!s2} | ||||
| 
 | ||||
|     if [ ${#s2_val} -gt ${n} ]; then | ||||
|        s2_val=${s2_val:0:$n}		# substring extraction | ||||
|     fi | ||||
| 
 | ||||
|     eval "$s1"=\'"${s1_val}${s2_val}"\' | ||||
| } | ||||
| 
 | ||||
| #:docstring strcmp: | ||||
| # Usage: strcmp $s1 $s2 | ||||
| # | ||||
| # Strcmp compares its arguments and returns an integer less than, equal to, | ||||
| # or greater than zero, depending on whether string s1 is lexicographically | ||||
| # less than, equal to, or greater than string s2. | ||||
| #:end docstring: | ||||
| 
 | ||||
| ###;;;autoload | ||||
| function strcmp () | ||||
| { | ||||
|     [ "$1" = "$2" ] && return 0 | ||||
| 
 | ||||
|     [ "${1}" '<' "${2}" ] > /dev/null && return -1 | ||||
| 
 | ||||
|     return 1 | ||||
| } | ||||
| 
 | ||||
| #:docstring strncmp: | ||||
| # Usage: strncmp $s1 $s2 $n | ||||
| #  | ||||
| # Like strcmp, but makes the comparison by examining a maximum of n | ||||
| # characters (n less than or equal to zero yields equality). | ||||
| #: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: | ||||
| # Usage: strlen s | ||||
| # | ||||
| # Strlen returns the number of characters in string literal s. | ||||
| #:end docstring: | ||||
| 
 | ||||
| ###;;;autoload | ||||
| function strlen () | ||||
| { | ||||
|     eval echo "\${#${1}}" | ||||
| } | ||||
| 
 | ||||
| #:docstring strspn: | ||||
| # Usage: strspn $s1 $s2 | ||||
| #  | ||||
| # Strspn returns the length of the maximum initial segment of string s1, | ||||
| # which consists entirely of characters from string s2. | ||||
| #:end docstring: | ||||
| 
 | ||||
| ###;;;autoload | ||||
| function strspn () | ||||
| { | ||||
|     # Unsetting IFS allows whitespace to be handled as normal chars.  | ||||
|     local IFS= | ||||
|     local result="${1%%[!${2}]*}" | ||||
|   | ||||
|     echo ${#result} | ||||
| } | ||||
| 
 | ||||
| #:docstring strcspn: | ||||
| # Usage: strcspn $s1 $s2 | ||||
| # | ||||
| # Strcspn returns the length of the maximum initial segment of string s1, | ||||
| # which consists entirely of characters not from string s2. | ||||
| #:end docstring: | ||||
| 
 | ||||
| ###;;;autoload | ||||
| function strcspn () | ||||
| { | ||||
|     # Unsetting IFS allows whitspace to be handled as normal chars.  | ||||
|     local IFS= | ||||
|     local result="${1%%[${2}]*}" | ||||
|   | ||||
|     echo ${#result} | ||||
| } | ||||
| 
 | ||||
| #:docstring strstr: | ||||
| # Usage: strstr s1 s2 | ||||
| #  | ||||
| # Strstr echoes a substring starting at the first occurrence of string s2 in | ||||
| # string s1, or nothing if s2 does not occur in the string.  If s2 points to | ||||
| # a string of zero length, strstr echoes s1. | ||||
| #:end docstring: | ||||
| 
 | ||||
| ###;;;autoload | ||||
| function strstr () | ||||
| { | ||||
|     # if s2 points to a string of zero length, strstr echoes s1 | ||||
|     [ ${#2} -eq 0 ] && { echo "$1" ; return 0; } | ||||
| 
 | ||||
|     # strstr echoes nothing if s2 does not occur in s1 | ||||
|     case "$1" in | ||||
|     *$2*) ;; | ||||
|     *) return 1;; | ||||
|     esac | ||||
| 
 | ||||
|     # use the pattern matching code to strip off the match and everything | ||||
|     # following it | ||||
|     first=${1/$2*/} | ||||
| 
 | ||||
|     # then strip off the first unmatched portion of the string | ||||
|     echo "${1##$first}" | ||||
| } | ||||
| 
 | ||||
| #:docstring strtok: | ||||
| # Usage: strtok s1 s2 | ||||
| # | ||||
| # Strtok considers the string s1 to consist of a sequence of zero or more | ||||
| # text tokens separated by spans of one or more characters from the | ||||
| # separator string s2.  The first call (with a non-empty string s1 | ||||
| # specified) echoes a string consisting of the first token on stdout. The | ||||
| # function keeps track of its position in the string s1 between separate | ||||
| # calls, so that subsequent calls made with the first argument an empty | ||||
| # string will work through the string immediately following that token.  In | ||||
| # this way subsequent calls will work through the string s1 until no tokens | ||||
| # remain.  The separator string s2 may be different from call to call. | ||||
| # When no token remains in s1, an empty value is echoed on stdout. | ||||
| #:end docstring: | ||||
| 
 | ||||
| ###;;;autoload | ||||
| function strtok () | ||||
| { | ||||
|  : | ||||
| } | ||||
| 
 | ||||
| #:docstring strtrunc: | ||||
| # Usage: strtrunc $n $s1 {$s2} {$...} | ||||
| # | ||||
| # Used by many functions like strncmp to truncate arguments for comparison. | ||||
| # Echoes the first n characters of each string s1 s2 ... on stdout.  | ||||
| #:end docstring: | ||||
| 
 | ||||
| ###;;;autoload | ||||
| function strtrunc () | ||||
| { | ||||
|     n=$1 ; shift | ||||
|     for z; do | ||||
| 	echo "${z:0:$n}" | ||||
|     done | ||||
| } | ||||
| 
 | ||||
| provide string | ||||
| 
 | ||||
| # string.bash ends here | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jari Aalto
				Jari Aalto