[Shell学习笔记]字符串操作

标签: shell字符串
386人阅读 评论(0) 收藏 举报
分类:
1. 判断读取字符串值


表达式 含义
${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开头进行声明的变量

举例:

(1)

  1. #! /bin/bash
  2. echo ${a-3}
  3. a=2
  4. echo ${a-3}
  5. a=
  6. echo ${a-3}

输出(如果var没有声明,则以$DEFAULT作为其值):

  1. 3
  2. 2
  3. (空)

(2)

  1. #! /bin/bash
  2. echo ${b:-4}
  3. b=
  4. echo ${b:-4}
  5. b=5
  6. echo ${b:-4}
输出(如果var没有声明或者为空值,则以$DEFAULT作为其值):
  1. 4
  2. 4
  3. 5
(3)
  1. #! /bin/bash
  2. echo ${c=6}
  3. c=
  4. echo ${c=6}
  5. c=7
  6. echo ${c=6}
输出(如果var没有声明,则以$DEFAULT作为其值):
  1. 6
  2. 7

(4)

  1. #! /bin/bash
  2. echo ${d:=8}
  3. d=
  4. echo ${d:=8}
  5. d=9
  6. echo ${d:=8}
输出(如果var没有声明或者为空值,则以$DEFAULT作为其值):
  1. 8
  2. 8
  3. 9

(5)

  1. #! /bin/bash
  2. echo ${e+9}
  3. e=
  4. echo ${e+9}
  5. e=10
  6. echo ${e+9}
输出(如果var声明,则其值为$OTHER,否则为null字符串):
  1. 9
  2. 9

(6)

  1. #! /bin/bash
  2. echo ${f:+11}
  3. f=
  4. echo ${f:+11}
  5. f=12
  6. echo ${f:+11}
输出(如果var被设置值,则其值为$OTHER, 否则为null字符串):

  1. 11
2. 字符串操作

(1)${#string}:变量string的长度

(2)${string:position}:从变量string获取由下标position开始的子串

(3)${string:position:length}:从变量string中获取由position下标开始长度为length的子串

  1. xiaosi@Qunar:~/company/sh$ str=yoona
  2. xiaosi@Qunar:~/company/sh$ echo ${#str}
  3. 5
  4. xiaosi@Qunar:~/company/sh$ echo ${str:3}
  5. na
  6. xiaosi@Qunar:~/company/sh$ echo ${str:1:3}
  7. oon

(4)${string/substring/replacement}使用$replacement, 来代替第一个匹配的$substring

(5)${string//substring/replacement}:使用$replacement, 代替所有匹配的$substring    

  1. xiaosi@Qunar:~$ str=jifeng.si
  2. xiaosi@Qunar:~$ echo ${str/./+}
  3. jifeng+si
  4. xiaosi@Qunar:~$ str=jifeng.si.si
  5. xiaosi@Qunar:~$ echo ${str/./+}
  6. jifeng+si.si
  7. xiaosi@Qunar:~$ echo ${str//./+}
  8. jifeng+si+si

(6)${string/#substring/replacement}:如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring    

  1. xiaosi@Qunar:~/company/sh$ str=yoona
  2. xiaosi@Qunar:~/company/sh$ echo ${str/#oo/xx}
  3. yoona
  4. xiaosi@Qunar:~/company/sh$ echo ${str/#yo/oy}
  5. oyona
(7)${string/%substring/replacement}:如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring    
  1. xiaosi@Qunar:~/company/sh$ str=yoona
  2. xiaosi@Qunar:~/company/sh$ echo ${str/%oo/xx}
  3. yoona
  4. xiaosi@Qunar:~/company/sh$ echo ${str/%na/an}
  5. yooan
  6. xiaosi@Qunar:~/company/sh$ echo ${str/oo/xx}
  7. yxxna
(8)${string#substring}:从变量$string的开头(从开头匹配),删除最短匹配$substring的子串    

(9)${string##substring}:从变量$string的开头(从开头匹配),删除最长匹配$substring的子串    

  1. xiaosi@Qunar:~/company/sh$ str=yoona.sunny.ok
  2. xiaosi@Qunar:~/company/sh$ echo ${str#*.}
  3. sunny.ok
  4. xiaosi@Qunar:~/company/sh$ echo ${str##*.}
  5. ok
  6. xiaosi@Qunar:~/company/sh$ echo ${str#yoo}
  7. na.sunny.ok
  8. xiaosi@Qunar:~/company/sh$ echo ${str#y}
  9. oona.sunny.ok
  10. xiaosi@Qunar:~/company/sh$ echo ${str#sunny}
  11. yoona.sunny.ok
(10)${string%substring}:从变量$string的结尾(从末尾匹配),删除最短匹配$substring的子串    

(11)${string%%substring}:从变量$string的结尾(从末尾匹配),删除最长匹配$substring的子串

  1. xiaosi@Qunar:~/company/sh$ str=yoona.sunny.ok
  2. xiaosi@Qunar:~/company/sh$ echo ${str%.*}
  3. yoona.sunny
  4. xiaosi@Qunar:~/company/sh$ echo ${str%%.*}
  5. yoona
  6. xiaosi@Qunar:~/company/sh$ echo ${str%ok}
  7. yoona.sunny.
  8. xiaosi@Qunar:~/company/sh$ echo ${str%k}
  9. yoona.sunny.o
  10. xiaosi@Qunar:~/company/sh$ echo ${str%sunny}
  11. yoona.sunny.ok


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1131286次
    • 积分:18740
    • 等级:
    • 排名:第481名
    • 原创:620篇
    • 转载:132篇
    • 译文:49篇
    • 评论:164条
    博客专栏
    文章分类
    最新评论