• 字符串的操作


    字符串的操作

    一.判断读取字符串
    ${var} ;变量var的值与$var相同
    ${var-DEFAULT} ;如果var没有被声明,那么就以$DEFAULT作为其值*
    ${var=DEFAULT};如果var没有被声明,那么就以$DEFAULT作为其值*
    ${var+OTHER};如果var被声明了,那么其值就是$OTHER,否则为空。
    ${var.+OTHER} 如果var被声明了,那么其值就是$OTHER,否则为空。
    ${var?ERR};如果var没有被声明,那么就打印$ERR*
    ${var.?ERR};如果var没有被声明,那么就打印$ERR*
    ${!varprefix*};匹配之前所有以varprefix开头进行声明的变量
    ${!varprefix@}匹配所有以varprefix开头进行声明的变量

    例子;

    [root@foundation101 mnt]# echo ${abc-ok}
    ok
    [root@foundation101 mnt]# echo ${abc}
    
    [root@foundation101 mnt]# echo ${abc=ok}
    ok
    [root@foundation101 mnt]# echo ${abc="ok"}
    ok
    [root@foundation101 mnt]# echo ${abc}
    Ok
    
    [root@foundation101 mnt]# var1=11;var2=22;var3=33
    [root@foundation101 mnt]# echo ${!va@}
    var1 var2 var3
    [root@foundation101 mnt]# echo ${!va*}
    var1 var2 var3
    

    二.字符串的操作
    ${#string} 长度
    ${string:position} 在字符串中,从位置$position开始提取字符串
    ${string:position:length} 在字符串中从位置$position开始提取长度为length的字串
    ${string%substring} 从字符串的结尾开始,删除最短匹配substring的子串
    ${string%%substring}从字符串的结尾开始,删除最长匹配substring的子串
    ${string/substring/replace} 使用$replace来代替第一个$substring
    ${string//substring/replace} 使用$replace 来代替所有$substring
    ${string/#substring/replace};如果$string的前缀匹配$subsstring,那么就用$replace来代替匹配的到的$substring
    ${string/%substring/replace}如果$string的后缀匹配$subsstring,那么就用$replace来代替匹配的到的$substring

    例子:
    1,长度‘

    [root@foundation101 mnt]# test="best wish to you"
    [root@foundation101 mnt]# echo ${#test}
    16
    [root@foundation101 mnt]# echo ${test} | wc -m      ##多一个字符
    17
    [root@foundation101 mnt]# echo `expr length $mimi`
    15
    

    ${#变量名}得到字符串的长度
    2,截取字符串
    [root@foundation101 mnt]# echo ${test:5}
    wish to you
    [root@foundation101 mnt]# echo ${test:5:8}
    wish to

    ${变量名:起始:长度} 得到子字符串

    3,字符串的删除

    root@foundation101 mnt]# mimi="mmm/ccc/ml/boot"
    [root@foundation101 mnt]# echo ${mimi#*/}
    ccc/ml/boot
    [root@foundation101 mnt]# echo ${mimi#/}
    mmm/ccc/ml/boot
    [root@foundation101 mnt]# echo ${mimi##/}
    mmm/ccc/ml/boot
    [root@foundation101 mnt]# echo ${mimi##*/}
    boot
    [root@foundation101 mnt]# echo ${mimi%*/}
    mmm/ccc/ml/boot
    [root@foundation101 mnt]# echo ${mimi%/*}
    mmm/ccc/ml
    [root@foundation101 mnt]# echo ${mimi%%/*}
    mmm
    

    ${变量名%substring}从字符串的结尾开始配备substring
    ${变量名#substring} 从字符串的开头配备substring

    注意:
    ${test##/} ${test%/} 分别是得到文件名或者目录地址最简单的方法

    4,字符串的替换

    [root@foundation101 mnt]# echo ${mimi///\}
    mmmccc/ml/boot
    [root@foundation101 mnt]# echo ${mimi////\}
    mmmcccmloot
    

    ${变量/替换/替换值} 一个/表示替换第一个,//表示替换所有
    当查找中出现了“/” 请加转义字符”/表示

    三性能比较

    [root@foundation101 mnt]# time for i in $(seq 1000) ;do a=$(expr length $mimi);done
    
    real	0m0.829s
    user	0m0.181s
    sys	0m0.688s
    [root@foundation101 mnt]# time for i in $(seq 1000) ;do a=${#mimi};done
    real	0m0.005s
    user	0m0.005s
    sys	0m0.001s
    

    速度相差较大,调用外部命令,与内置操作符性能相差非常大,在shell编程中尽量使用内置操作符,或者函数完成,使用sed,awk会出现类似的结果。

  • 相关阅读:
    028 Android 旋转动画+病毒查杀效果+自定义样式的ProgressBar
    027 Android 可扩展的listview:ExpandableListView的使用案例
    026 Android 带不同类型条目的listview(纯文本类型的条目,图片+文字类型的条目)+读取内存空间、手机进程信息+常驻悬浮框
    025 Android 带进度条的对话框(ProgressDialog)
    024 Android 自定义样式对话框(AlertDialog)
    023 Android 自定义Toast控件
    Cordova-安装Cordova过程详细解
    Symfony3 查询搜索功能DQL语句like查询
    迭代式开发使用方法总结
    require.js vs browserify
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5708078.html
Copyright © 2020-2023  润新知