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

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/51549314 1.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/51549314
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


目录
相关文章
|
6月前
|
人工智能 机器人 Shell
【shell】shell字符串操作(声明、长度、拼接、切片、转换、替换等操作)
【shell】shell字符串操作(声明、长度、拼接、切片、转换、替换等操作)
|
6月前
|
Shell Linux C语言
【Shell 命令集合 文档编辑 】Linux 递归搜索指定字符串 rgrep命令使用指南
【Shell 命令集合 文档编辑 】Linux 递归搜索指定字符串 rgrep命令使用指南
66 0
|
6月前
|
Shell Linux C语言
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
91 2
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
2月前
|
存储 Java Shell
shell学习笔记(详细整理)
这篇文章是一份详细的Shell学习笔记,涵盖了Shell的基础知识、脚本编写、变量、运算符、条件判断、流程控制、函数以及常用Shell工具的使用。
43 1
|
3月前
|
JavaScript 关系型数据库 Shell
Linux shell编写技巧之随机取字符串(一)
本文介绍了Linux Shell脚本的编写技巧,包括环境配置、变量命名规则和缩进语法,并提供了一个实例练习,展示如何使用`$RANDOM`变量和`md5sum`命令来生成随机的8位字符串。
54 4
|
5月前
|
监控 Shell 开发者
Shell 字符串操作:让你的脚本语言更加灵活
在Shell脚本中,字符串操作至关重要,包括计算长度、连接与截取。获取字符串长度使用`${#变量名}`,如`echo ${#name}`显示`4`。字符串连接可通过`$变量名`或`${变量名}`实现,例如`name=alex; str1=$name$age`。字符串截取有多种方式,如`${str:起始位置:长度}`从左边截取,`${str#*chars}`从左边去除匹配的字符,`${str%*chars}`则从右边去除。通过练习这些基本操作,能提升Shell脚本的编写效率。
32 0
|
5月前
|
Shell 数据安全/隐私保护 Perl
shell 截取某个字符串之后的内容
shell 截取某个字符串之后的内容
62 0
|
5月前
|
Shell Linux
linux shell脚本字符串 字段分隔符 存入数组 根据下标取值
linux shell脚本字符串 字段分隔符 存入数组 根据下标取值
78 0