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

    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似,输出语句echo和PHP也挺像。

    单引号

    str='this is a string'
    

    单引号字符串的限制:

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

    双引号

    your_name='qinjx'
    str="Hello, I know your are "$your_name"! 
    "
    

    双引号的优点:

    • 双引号里可以有变量
    • 双引号里可以出现转

    反引号

     反引号用于将系统命令的输出到变量

    字符串的值

    表达式 含义
    ${var} 变量var的值, 与$var相同
    ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 *
    ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
    ${var=DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 *
    ${var:=DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
    ${var+OTHER} 如果var声明了, 那么其值就是$OTHER, 否则就为null字符串
    ${var:+OTHER} 如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串
    ${var?ERR_MSG} 如果var没被声明, 那么就打印$ERR_MSG *
    ${var:?ERR_MSG} 如果var没被设置, 那么就打印$ERR_MSG *
    ${!varprefix*} 匹配之前所有以varprefix开头进行声明的变量
    ${!varprefix@} 匹配之前所有以varprefix开头进行声明的变量

    拼接字符串

    your_name="abc"
    greeting="hello, "$your_name" !"
    greeting_1="hello, ${your_name} !"
    echo $greeting $greeting_1
    

    获取字符串长度

    string="abcd"
    echo ${#string} #输出 4
    

    查找子字符串

    查找字符 "is" 的位置:

    string="runoob is a great company"
    echo `expr index "$string" is`  # 输出 8    "`" 是反引号,而不是单引号 "'"
    

    字符串截取

    假设有变量 var=http://blog.csdn.net/Liveor_Die

    1. # 号截取,删除左边字符,保留右边字符。

    echo ${var#*//}
    

    其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符

    即删除 http://

    结果是 :blog.csdn.net/Liveor_Die

    2. ## 号截取,删除左边字符,保留右边字符。

    echo ${var##*/}  #  #、## 表示从左边开始删除。一个 # 表示从左边删除到第一个指定的字符;两个 # 表示从左边删除到从右边第一个/及左边的所有字符。
    

    ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符

    即删除http://blog.csdn.net/

    结果是Liveor_Die

    3. %号截取,删除右边字符,保留左边字符

    echo ${var%/*}
    

    %/* 表示从右边开始,删除第一个 / 号及右边的字符

    结果是:http://blog.csdn.net

    4. %% 号截取,删除右边字符,保留左边字符

    echo ${var%%/*}
    

    %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符

    结果是:http:

    5. 从左边第几个字符开始,及字符的个数

    echo ${var:0:5}
    

    其中的 0 表示左边第一个字符开始,5 表示字符的总个数。

    结果是:http:

    6. 从左边第几个字符开始,一直到结束。

    echo ${var:7}
    

    其中的 7 表示左边第8个字符开始,一直到结束。

    结果是 :blog.csdn.net/Liveor_Die

    7. 从右边第几个字符开始,及字符的个数

    echo ${var:0-7:3}
    

    其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。

    结果是:ero

    8. 从右边第几个字符开始,一直到结束。

    echo ${var:0-7}
    

    表示从右边第七个字符开始,一直到结束。

    结果是:eor_Die

    注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)

    字符串替换

    用replace替换字符串中的子串substring

    格式:${str/substring/replace}或者${str//substring/replace}

    替换字符串中第一个abc

    echo ${str/abc/TEST}  echo ${str/abc/TEST}  
    

    替换字符串中所有的abc

    echo ${str//abc/TEST}  
    

    从str开头匹配,用TEST替换最长的a*c

    echo ${str/#a*c/TEST}
    

    从str结尾匹配,用TEST替换最长的b*l

    echo ${str/%b*l/TEST}
    

    expr操作字符串

    对于上面的一些操作,如果改用expr执行,能简化一些。

    str='hello world!'  
    #求字符串长度  
    length=`expr length $str`  
    echo $length  
    
    #截取字符串  
    substr=`expr substr $str 1 4`  
    echo $substr  
    
    
    #求字符串中元素的下标索引,如果元素不存在输出0(因为此时索引从1开始)  
    index=`expr index $str "l"`  
    echo $index  
    
  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/yangliguo/p/8001247.html
Copyright © 2011-2022 走看看