zoukankan      html  css  js  c++  java
  • (五)shell字符串深入解析

    (1)基本用法

    1) 由单引号' '包围的字符串:

    • 任何字符都会原样输出,在其中使用变量是无效的。
    • 字符串中不能出现单引号,即使对单引号进行转义也不行


    2) 由双引号" "包围的字符串:

    • 如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
    • 字符串中可以出现双引号,只要它被转义了就行。


    3) 不被引号包围的字符串

      • 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。
      • 字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。
    #!/bin/bash
    #单引号有问题
    n=56
    a1=num=$n
    a2='num=$n'
    a3="num=$n"
    echo $a1
    echo $a2
    echo $a3
    
    #无引号有问题
    #b1=china is nice
    b2='china is nice'
    b3="china is nice"
    echo $b1
    echo $b2
    echo $b3
    
    #获取字符串长度
    c1="super star is reba"
    echo ${#c1}

    结果:

    (2)字符串截取

    #!/bin/bash
    
    #字符串拼接 两个str放在一起
    a1="迪丽热巴"
    a2="欧阳图图"
    
    b1=$a1$a2
    b2='$a1 and $a2'
    b3="$a1 and $a2"
    b4=a1':'a2
    
    echo $b1
    echo $b2
    echo $b3
    echo ----------------------
    
    #通过位置截取
    #与python的切片类似
    # ${截取的字符串:起始位置从0开始:截取的长度}
    #左边往后: ${string:start:length}
    #右边往后: ${string:0-start:length}
    c1="the star in my heart is reba"
    c2="迪丽热巴"
    echo ${c2:2:2}
    echo ${c1:3:10}
    echo ${c2:0-2:4}
    echo ${c1:0-3:10}
    #并没有正在截取到原字符串
    echo $c2
    echo $c1
    echo ----------------------
    
    #通过指定字符截取
    # ${截取的字符串#*指定字符}
    # #:表示可以截取指定字符右边所有的字符
    # *:通配符,表示任意长度的字符串
    echo ${c1#star}
    echo ${c1#*star}
    
    echo ${c2#热}
    echo ${c2#*热}
    
    echo ----------------------
    url="https://www.cnblogs.com/oytt/p/13398266.html"
    url2="rr=aa==tt===aa++99"
    echo ${url#*/} #遇到第一个匹配结束
    echo ${url##*/} #遇到最后一个匹配结束
    
    echo ${url2#*aa}
    echo ${url2##*aa}
    echo ----------------------
    
    #通过%截取左边字符
    # ${string%chars*}
    echo ${url%/*} #遇到第一个匹配结束
    echo ${url%%/*} #遇到最后一个匹配结束
    echo ${url2%aa*}

     

    来自shell的随笔均参考自 http://c.biancheng.net/view/1114.html

    做一个优秀的程序媛
  • 相关阅读:
    移动端web app开发备忘
    HDU 5391-Zball in Tina Town(数论)
    LeetCode:Invert Binary Tree
    Mongo集群之主从复制
    Cocos2d-x--iOS平台lua加密成luac资源方法和Jsc文件<MAC平台开发试用--windows平台暂未研究>
    优秀程序猿因何而优秀?
    Java Exception和Error的差别
    【Android开发】之Fragment与Acitvity通信
    Draw the RGB data from kinect C++ via opengl
    使用Opencv2遇到error C2061: 语法错误: 标识符dest
  • 原文地址:https://www.cnblogs.com/oytt/p/13398266.html
Copyright © 2011-2022 走看看