zoukankan      html  css  js  c++  java
  • shell字符串

    字符串可以由单引号' '包围,也可以由双引号" "包围,也可以不用引号。它们之间是有区别的。
    下面我们说一下三种形式的区别:
    1) 由单引号' '包围的字符串:
    任何字符都会原样输出,在其中使用变量是无效的。
    字符串中不能出现单引号,即使对单引号进行转义也不行。
    2) 由双引号" "包围的字符串:
    如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
    字符串中可以出现双引号,只要它被转义了就行。
    3) 不被引号包围的字符串
    不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。
    字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析
    获取字符串长度
    
    str="http://www.beylze.com/d/file/20190908/25x2iutcciy.html"
    echo ${#str}
    在 Shell 中获取字符串长度很简单,具体方法如下:
    ${#string_name}
    string_name 表示字符串名字。
    字符串拼接
    
    str1=$name$url  #中间不能有空格
    str2="$name $url"  #如果被双引号包围,那么中间可以有空格
    str3=$name": "$url  #中间可以出现别的字符串
    str4="$name: $url"  #这样写也可以
    str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号
    字符串截取
    
    ${string: start :length}    从string字符串的左边第start个字符开始,向右截取length个字符。
    ${string: start}        从string 字符串的左边第 start 个字符开始截取,直到最后。
    ${string: 0-start :length}    从string字符串的右边第start个字符开始,向右截length 个字符。
    ${string: 0-start}    从 string 字符串的右边第 start 个字符开始截取,直到最后。
    ${string#*chars}    从string字符串第一次出现*chars的位置开始,截取*chars右边所有字符。
    ${string##*chars} 从string字符串最后一次出现*chars的位置开始,截*chars右边所有字符。
    ${string%*chars}    从string字符串第一次出现*chars的位置开始,截取*chars左边所有字符。
    ${string%%*chars}    从string字符串最后一次出现*chars的位置开始,截*chars左边所有字符。
    
    [root@snow zc]# url="c.biancheng.net"
    [root@snow zc]# echo ${url: 2: 9}
    biancheng
    [root@snow zc]# url="c.biancheng.net"
    [root@snow zc]# echo ${url: 2}  #省略 length,截取到字符串末尾
    biancheng.net
    [root@snow zc]# url="c.biancheng.net"
    [root@snow zc]# echo ${url: 0-13: 9}
    biancheng
    [root@snow zc]# url="c.biancheng.net"
    [root@snow zc]# echo ${url: 0-13}  #省略 length,直接截取到字符串末尾
    biancheng.net
    [root@snow zc]# url="http://www.beylze.com/d/file/20190908/di4r5hss02g.html"
    [root@snow zc]# echo ${url#*:}
    //www.beylze.com/d/file/20190908/di4r5hss02g.html
    [root@snow zc]# echo ${url#*p:}
    //www.beylze.com/d/file/20190908/di4r5hss02g.html
    [root@snow zc]# echo ${url#*ttp:}
    //www.beylze.com/d/file/20190908/di4r5hss02g.html
    [root@snow zc]# echo ${url#http://}
    www.beylze.com/d/file/20190908/di4r5hss02g.html
    [root@snow zc]# echo ${url#*/}
    /www.beylze.com/d/file/20190908/di4r5hss02g.html
    [root@snow zc]# echo ${url##*/}
    di4r5hss02g.html
    [root@snow zc]# echo ${url%/*}
    http://www.beylze.com/d/file/20190908
    [root@snow zc]# echo ${url%%/*}
    http:
    [root@snow zc]#

    最后,我们对以上 8 种格式做一个汇总,请看下表:

    格式

    说明

    ${string: start :length}

    从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。

    ${string: start}

    从 string 字符串的左边第 start 个字符开始截取,直到最后。

    ${string: 0-start :length}

    从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。

    ${string: 0-start}

    从 string 字符串的右边第 start 个字符开始截取,直到最后。

    ${string#*chars}

    从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。

    ${string##*chars}

    从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。

    ${string%*chars}

    从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

    ${string%%*chars}

    从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

    从左边开始计数时,起始数字是 0(这符合程序员思维);从右边开始计数时,起始数字是 1(这符合常人思维)。计数方向不同,起始数字也不同。不管从哪边开始计数,截取方向都是从左到右。

  • 相关阅读:
    js篇之对象数据属性与存取器属性
    使用ts-loader与webpack编译typescripts出现Module build failed: TypeError: Cannot read property 'afterCompile' of undefined
    js对象深拷贝
    前端工程化之webpack中配置babel-loader(四)
    前端工程化-webpack篇之babel-polyfill与babel-runtime(三)
    process.cwd()与__dirname的区别
    jade(pug)学习和使用
    [bzoj4033][HAOI2015]树上染色_树形dp
    [bzoj2657][Zjoi2012]旅游 journey_ 对偶图_树形dp
    [bzoj2097][Usaco2010 Dec]Exercise 奶牛健美操_贪心_树形dp_二分
  • 原文地址:https://www.cnblogs.com/ggzhangxiaochao/p/13155809.html
Copyright © 2011-2022 走看看