shell处理字符串
概念
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号声明字符串
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号声明字符串
- 双引号里可以有变量
- 双引号里可以出现转义字符
示例:
#单引号和双引号使用变量的区别
root@master:~$ name='huangSir'
root@master:~$ echo '$name'
$name
root@master:~$ echo "$name"
huangSir
#单引号中嵌套单引号
root@master:~$ echo ''hello world''
hello world
#双引号中嵌套单引号
root@master:~$ echo "'hello world'"
'hello world'
#单引号和双引号使用转义字符的区别
root@master:~$ echo '\"hello world\"'
\"hello world\"
root@master:~$ echo "\"hello world\""
"hello world"
字符串的各种操作
在 Shell 脚本中,字符串是常见的数据类型,可以通过多种方式对字符串进行处理,包括拼接、截取、替换、比较等操作。
字符串拼接
字符串拼接可以直接拼接,中间无需任何特殊字符
root@master:~$ str1="hello"
root@master:~$ str2="world"
root@master:~$ str3="$str1 $str2"
root@master:~$ echo $str3
hello world
root@master:~$ str3="${str1} like ${str2}"
root@master:~$ echo $str3
hello like world
获取字符串长度 ${#str}
统计字符长度(变量中有多少个字符)
#空格也算字符
root@master:~$ str="I Like Shell"
root@master:~$ echo ${#str}
12
截取字符串 ${str:index:index}
root@master:~$ str="hello world"
# 从索引下标为5开始,向后截取,索引下标为5的舍弃
root@master:~$ echo ${str:5}
world
# 从索引下标为2开始,向后截取5个字符
root@master:~$ echo ${str:2:5}
llo w
# 从索引下标为2开始,截取到倒数第6个字符
root@master:~$ echo ${str:2:-6}
llo
从索引下标为2开始,截取到倒数第7个字符
root@master:~$ echo ${str:2:-7}
ll
字符串替换
${str/newStr/oldStr}
将newStr替换为oldStr,仅替换第一个遇到的oldStr
root@master:~$ str="hello world"
root@master:~$ echo ${str/l/o}
heolo world
${str//newStr/oldStr}
将newStr替换为oldStr,替换所有的oldStr
root@master:~$ str="hello world"
root@master:~$ echo ${str//l/o}
heooo worod
字符串大小写转换
需要bash4+的版本
大写转换:${str^^}
root@master:~$ str="hello world"
root@master:~$ echo ${str^^}
HELLO WORLD
小写转换:${str,,}
root@master:~$ str="HELLO WORLD"
root@master:~$ echo ${str,,}
hello world
字符串分割为数组
root@master:~$ str="apple:banana:orange"
#按照:分割
root@master:~$ IFS=':' read -ra arr <<< "$str"
root@master:~$ echo ${arr[0]}
apple
root@master:~$ echo ${arr[1]}
banana
删除前缀或后缀
${str#word}:从变量左边开始删除,按照最短匹配删除${str##word}:从变量左边开始删除,按照最长匹配删除${str%word}:从变量右边开始删除,按照最短匹配删除${str%%word}:从变量右边开始删除,按照最长匹配删除
示例:
root@master:~$ str="file.txt.tar.gz"
root@master:~$ echo ${str#*.}
txt.tar.gz
root@master:~$ echo ${str##*.}
gz
root@master:~$ echo ${str%.*}
file.txt.tar
root@master:~$ echo ${str%%.*}
file
判断是否包含子串
if [[ $str == *World* ]]; then
echo "包含World"
fi
# 或使用正则表达式
if [[ $str =~ .*World.* ]]; then
echo "匹配成功"
fi
判断字符串是否为空
[[ -z "$str" ]]:为空返回真
[[ -n "$str" ]]:非空返回真
root@master:~$ name=
root@master:~$ [[ -z "$name" ]] && echo true || echo false
true
root@master:~$ [[ -n "$name" ]] && echo true || echo false
false
判断两个字符串是否相等
[[ $str1 == $str2 ]]:相等判断
[[ $str1 != $str2 ]]: 不等判断
root@master:~$ [[ "hello" == "hello" ]] && echo true || echo false
true
root@master:~$ [[ "hello" != "hello" ]] && echo true || echo false
false
shell处理字符串的更多相关文章
- Linux Shell 截取字符串
Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...
- shell截取字符串的方法
参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...
- shell 判断字符串是否为数字
本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. #!/ ...
- shell基础——字符串处理(转载)
Shell的字符串处理 1 得到长度 %x="abcd" #方法一 %expr length $x 4 # 方法二 %echo ${#x} ...
- shell 分割字符串存至数组
shell 分割字符串存至数组 shell编程中,经常需要将由特定分割符分割的字符串分割成数组,多数情况下我们首先会想到使用awk但是实际上用shell自带的分割数组功能会更方便.假如a=”one,t ...
- Linux shell去除字符串中所有空格
Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'
- shell切分字符串到数组
shell切分字符串到数组 问题: 对于’aa,bb,cc,dd,ee’这样的字符串输出采用,分隔开的aa bb cc dd ee aa:bb is ok:/home/work按照":&qu ...
- 用Shell判断字符串包含关系的方法小结
这篇文章主要给大家介绍了关于用Shell判断字符串包含关系的几种方法,其中包括利用grep查找.利用字符串运算符.利用通配符.利用case in 语句以及利用替换等方法,每个方法都给出了详细的示例代 ...
- Linux shell 获得字符串所在行数及位置
shell 获得字符串所在行数及位置 01 获取字符串所在的行数 方式一:用grep -n [root@root]# cat test apple bit create delect exe flow ...
- 【shell比较字符串】
if [ 'AAA' = 'ABC' ]; then echo "the same" else echo "not the same" fi shell比较字符 ...
随机推荐
- CentOS7离线安装Nginx及配置
下载离线包: 用浏览器打开地址,选择您要下载的版本:http://nginx.org/packages/centos/7/x86_64/RPMS/ 如图,我下载的1.16.1版. 执行安装: 将下载的 ...
- React中的数据流管理
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:霜序 前言 为什么数据流管理重要? React 的核心思想 ...
- 取消浏览器中记住密码自动填充时弹出Windows安全中心的验证
1.问题描述 我们在使用谷歌浏览器的过程中,经常会将一些账号和密码记住在浏览器中,方便下次通过浏览器自动填充. 此方式虽然方便,但是有时候会遇到一种情况,那就是每次在浏览器中使用自动填充的时候,需会弹 ...
- 在 PyTorch 中理解词向量,将单词转换为有用的向量表示
你要是想构建一个大型语言模型,首先得掌握词向量的概念.幸运的是,这个概念很简单,也是本系列文章的一个完美起点. 那么,假设你有一堆单词,它可以只是一个简单的字符串数组. animals = [&quo ...
- Flink同步kafka到iceberg数据延迟,两个checkpoint后才可查询
一.问题描述 用户配置了高级参数很多,观察kafka增量数据不多,flink负载不高情况下两个checkpoint后才可查询到数据. 排查时hdfs有数据文件产生,但是mainfast文件中最新快 ...
- Spark异常总结
1.Spark读写同一张表报错问题Cannot overwrite a path that is also being read from 问题描述:Spark SQL在执行ORC和Parquet格式 ...
- 什么是A型或者B型剩余电流保护器?
我国的剩余电流保护装置(RCD)指导性标准GB/Z 6829-2008(IEC/TR 60755:2008,MOD)<剩余电流动作保护器的一般要求> 从产品的基本结构.剩余电流类型.脱扣方 ...
- android studio真机调试华为手机
背景 近来开发一个视频通话App,需要在华为手机上调试,按网上一顿操作,开启了USB调试之后,发现手机连上电脑后,android studio没反应,在此记录下解决方法.调试的手机型号是华为 nova ...
- 海康SDK报错Structure.getFieldOrder()
就是你调用的这个结构体以及其引用的其他结构体,可能没有getFieldOrder()的方法,你只要按照顺序把他填上去就好了.比如 public static class NET_DVR_TIME ex ...
- manim边学边做--相机Camera简介
在Manim中,Camera是实现动画效果的重要工具之一. 它就像我们观察动画的 眼睛,通过控制相机的位置.角度和视野,可以创造出丰富多样的视觉效果. Manim社区版本中提供了多种Camera类型, ...