zoukankan      html  css  js  c++  java
  • Shell 字符串操作符实例

    字符串操作符

    表达式 含义
    ${parameter-word} parameter 变量未声明,取默认值 word
    ${parameter:-word} parameter 变量未声明或值为空时,取默认值 word
    ${parameter=word} parameter 变量未声明,则取默认值 word
    ${parameter:=word} parameter 变量未声明或值为空时,取默认值 word
    ${parameter+word} parameter 变量未声明, 取值为空,否则取值为 word
    ${parameter:+word} parameter 变量声明, 取值为 word,否则取值为空
    ${parameter?word} parameter 变量未声明, 标准错误输出 word 且退出 shell
    ${parameter:?word} parameter 取值为空, 标准错误输出 word 且退出 shell
    ${!prefix*} 匹配所有以 prefix 开头且声明的变量
    ${!prefix@} 匹配所有以 prefix 开头且声明的变量
    ${#parameter} $parameter 的长度
    ${parameter:offset} 从左边指定位置 offset 开始,截取后面所有字符串
    ${parameter:offset:length} 从左边指定位置offset开始,截取指定长度length字符串
    ${parameter#pattern} 从右边开始,删除最短匹配pattern的子字符串
    ${parameter##pattern} 从右边开始,删除最长匹配pattern的子字符串
    ${parameter%pattern} 从左边开始,删除最短匹配pattern的子字符串
    ${parameter%%pattern} 从左边开始,删除最长匹配pattern的子字符串
    ${parameter/pattern/string} 从右边开始,替换第一次出现匹配项 patternstring
    ${parameter//pattern/string} 替换所有匹配项 patternstring
    ${parameter/#pattern/string} 替换开头匹配pattern字符串为 string
    ${parameter/%pattern/string} 替换结尾匹配pattern字符串为 string
    ${parameter^pattern} 开头第一个小写字母转换为大写
    ${parameter^^pattern} 所有小写字母转换为大写
    ${parameter,pattern} 开头第一个大写字母转换为小写
    ${parameter,,pattern} 所有大写字母转换为小写

    实例脚本

    可以使用 sh -v testString.sh 命令来执行如下脚本,查看原始命令及输出内容,为了方便区分命令和内容,其中输出内容以深蓝色显示。

    # 实例脚本
    $ cat testString.sh
    #!/bin/bash
    # 字符串操作符实例
    
    # 判断操作系统,解决 mac下 echo 不支持“-e”参数问题
    if [[ "$(uname)" != "Darwin" ]];then
        ee="-e"
    fi
    
    # var 变量未声明
    echo ${ee} "33[36mvar 变量未声明,输出为空: ${var}33[0m"
    
    # 变量未声明,取默认值
    echo ${ee} "33[36mvar 变量未声明,则取默认值:${var-daodaotest}33[0m"
    echo ${ee} "33[36mvar 变量未声明,则取默认值:${var=daodaotest}33[0m"
    
    # 变量未声明或取值为空时,取默认值
    # 变量未声明,取默认值
    echo ${ee} "33[36mvar2 变量未声明,则取默认值:${var2:-daodaotest2}33[0m"
    echo ${ee} "33[36mvar2 变量未声明,则取默认值:${var2:=daodaotest2}33[0m"
    
    # 取值为空时
    var3=
    echo ${ee} "33[36mvar3 变量声明,但值为空时,取默认值:${var3:-daodaotest3}33[0m"
    echo ${ee} "33[36mvar3 变量声明,但值为空时,取默认值:${var3:=daodaotest3}33[0m"
    
    # 变量未声明,值为空;声明了为设置值
    echo ${ee} "33[36mvar4 变量未声明,值为空:${var4+daodaotest4}33[0m"
    var5=daodaotest5
    echo ${ee} "33[36mvar5 变量声明,取设置值:${var5+daodaotest}33[0m"
    
    # 变量未声明或取值为空时,打印设置信息且程序退出
    var6=daodaotest6
    echo ${ee} "33[36mvar6 变量声明且取值,不打印设置信息:${var6?变量未声明或取值为空}33[0m"
    
    # 变量未声明或取值为空时,打印设置信息且程序退出
    # 为了脚本继续运行注释掉
    #echo ${ee} "33[36mvar7 变量未声明,打印设置信息:${var7:?变量未声明}33[0m"
    #var8=
    #echo ${ee} "33[36mvar8 取值为空,打印设置信息:${var7:?变量取值为空}33[0m"
    
    # 通过前缀字符匹配声明过的变量名
    x1=1
    x2=2
    x3=3
    echo ${ee} "33[36m通过前缀字符匹配声明过的变量名:${!x*}33[0m"
    echo ${ee} "33[36m通过前缀字符匹配声明过的变量名:${!x@}33[0m"
    
    url="https://www.toutiao.com/i6820392125645980174"
    ## 字符串长度
    echo ${ee} "33[36m字符串内容:${url}33[0m"
    echo ${ee} "33[36m字符串长度:${#url}33[0m"
    
    ## 字符串截取
    # 字符串位置截取
    echo ${ee} "33[36m从左边指定位置开始,截取后面所有字符串:${url:8}33[0m"
    echo ${ee} "33[36m从左边指定位置开始,截取指定长度字符串:${url:8:15}33[0m"
    echo ${ee} "33[36m从右边指定位置长度开始,截取后面所有字符串(注意“:”右边有空格):${url: -20}33[0m"
    echo ${ee} "33[36m从右边指定位置长度开始,截取后面所有字符串(同上,推荐):${url:0-20}33[0m"
    echo ${ee} "33[36m从右边指定位置长度开始,截取后面所有字符串(同上,推荐):${url:(-20)}33[0m"
    echo ${ee} "33[36m从右边指定位置开始,截取指定长度字符串(注意“:”右边有空格):${url:0-36:15}33[0m"
    echo ${ee} "33[36m从右边指定位置开始,截取指定长度字符串(同上,推荐):${url:0-36:15}33[0m"
    echo ${ee} "33[36m从右边指定位置开始,截取指定长度字符串(同上,推荐):${url:(-36):15}33[0m"
    
    ## 截取不匹配的字符串,即删除匹配的字符串
    echo ${ee} "33[36m从右边开始,删除最短匹配字符串:${url#*/}33[0m"
    echo ${ee} "33[36m从右边开始,删除最长匹配字符串:${url##*/}33[0m"
    
    echo ${ee} "33[36m从左边开始,删除最短匹配字符串:${url%/*}33[0m"
    echo ${ee} "33[36m从左边开始,删除最长匹配字符串:${url%%/*}33[0m"
    
    ## 匹配项替换
    echo ${ee} "33[36m从右边开始,替换第一次出现匹配项:${url///#}33[0m"
    echo ${ee} "33[36m替换所有匹配项:${url////#}33[0m"
    
    echo ${ee} "33[36m替换开头匹配字符串:${url/#https/http}33[0m"
    echo ${ee} "33[36m替换结尾匹配字符串:${url/%i6820392125645980174/daodaotest}33[0m"
    
    param=daodaotest
    # macOS zsh 不支持
    echo ${ee} "33[36m开头第一个小写字母转换为大写:${param^}33[0m"
    echo ${ee} "33[36m所有小写字母转换为大写:${param^^}33[0m"
    
    param=DAODAOTEST
    # macOS zsh 不支持
    echo ${ee} "33[36m开头第一个大写字母转换为小写:${param,}33[0m"
    echo ${ee} "33[36m所有大写字母转换为小写:${param,,}33[0m"
    

    微信公众号:daodaotest

  • 相关阅读:
    浅谈JavaScript中forEach与each
    Angular.js中使用$watch监听模型变化
    整理:Javascript获取数组中的最大值和最小值的方法汇总
    自定义指令的参数
    ng-disabled 不起作用的解决办法
    理解Angular中的$apply()以及$digest()
    $q -- AngularJS中的服务(理解)
    正则表达式30分钟入门教程(转)
    angular.extend用法实例
    使用angular.bootstrap() 完成模块的手动加载
  • 原文地址:https://www.cnblogs.com/daodaotest/p/12812986.html
Copyright © 2011-2022 走看看