⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.sh

📁 BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版
💻 SH
字号:
#!/bin/bash# string.bash --- bash emulation of string(3) library routines# Author: Noah Friedman &lt;friedman@prep.ai.mit.edu&gt;# ==>     Used with his kind permission in this document.# 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   ==> Autoloading of function commented out.function strcat (){    local s1_val s2_val    s1_val=${!1}                        # indirect variable expansion    s2_val=${!2}    eval "$1"=\'"${s1_val}${s2_val}"\'    # ==> eval $1='${s1_val}${s2_val}' avoids problems,    # ==> if one of the variables contains a single quote.}#: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:###;;;autoloadfunction 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}"\'    # ==> eval $1='${s1_val}${s2_val}' avoids problems,    # ==> if one of the variables contains a single quote.}#: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:###;;;autoloadfunction 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:###;;;autoloadfunction 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:###;;;autoloadfunction strlen (){    eval echo "\${#${1}}"    # ==> Returns the length of the value of the variable    # ==> whose name is passed as an argument.}#: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:###;;;autoloadfunction 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:###;;;autoloadfunction 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:###;;;autoloadfunction 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:###;;;autoloadfunction 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:###;;;autoloadfunction strtrunc (){    n=$1 ; shift    for z; do        echo "${z:0:$n}"    done}# provide string# string.bash ends here# ========================================================================== ## ==> Everything below here added by the document author.# ==> Suggested use of this script is to delete everything below here,# ==> and "source" this file into your own scripts.# strcatstring0=onestring1=twoechoecho "Testing \"strcat\" function:"echo "Original \"string0\" = $string0"echo "\"string1\" = $string1"strcat string0 string1echo "New \"string0\" = $string0"echo# strlenechoecho "Testing \"strlen\" function:"str=123456789echo "\"str\" = $str"echo -n "Length of \"str\" = "strlen strecho# Exercise:# --------# Add code to test all the other string functions above.exit 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -