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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@SmartSi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值