diff options
Diffstat (limited to 'examples/scripts.noah/string.bash')
-rw-r--r-- | examples/scripts.noah/string.bash | 226 |
1 files changed, 0 insertions, 226 deletions
diff --git a/examples/scripts.noah/string.bash b/examples/scripts.noah/string.bash deleted file mode 100644 index d80ebe80..00000000 --- a/examples/scripts.noah/string.bash +++ /dev/null @@ -1,226 +0,0 @@ -# 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}" ] || [ "${3}" -le "0" ]; then - return 0 - fi - - if [ ${3} -ge ${#1} ] && [ ${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 |