shell-基础2-字符串文本处理${}
一、为什么使用${}引用变量
1、$a和${a}的效果与区别
因为个别特殊字符会影响正常引用,所以需要使用${}引用变量,加花括号是为了帮助解释器识别变量的边界
$a和${a}效果一样,当变量后面连接其他字符的时候必须给变量加上大括号${a}_bc
[root@master ~]# VAR=111 [root@master ~]# echo $VAR11 [root@master ~]# echo $VAR 111
[root@master ~]# echo ${VAR}222 111222 [root@master ~]#
2、变量小知识补充
1)定义变量的三种方式
[root@web1 ~]# a=111 [root@web1 ~]# b='111' [root@web1 ~]# c="111" [root@web1 ~]# a=111-$a [root@web1 ~]# b='111-$a' [root@web1 ~]# c="111-$a" [root@web1 ~]# echo "a=$a" a=111-111 [root@web1 ~]# echo "c=${c}" <---$变量名表示输出变量,可以用$c或者${c}两种用法
c=111-111-111
[root@web1 ~]# echo "b=$b"
b=111-$a
[root@web1 ~]#
不加引号,当内容为简单连续的数字、字符串、路径名时,可以使用,值里面有变量会被解释后再输出
加单引号,输出变量内容时,单引号里面是啥就输出啥即使是变量或命令(命令需要反引起来),这种比较适合显示纯字符串的请看
加双引号,输出变量内容时引号里的变量及命令会经过解析后再输出内容,这种就比较适合字符串中附带有变量及命令且向将其解析后再输出的变量定义
2)把一个命令结果作为变量的内容赋值的两种方法
变量名=`ls` <---反引号引起来,缺点容易和单引号弄混
变量名=$(ls) <---可以使用这种方法
示例1
[root@web1 ~]# hh=`ls` [root@web1 ~]# echo $hh anaconda-ks.cfg bash-test Desktop Downloads google-chrome-stable_current_x86_64.rpm initial-setup-ks.cfg original-ks.cfg [root@web1 ~]# hh1=$(ls) [root@web1 ~]# echo $hh1 anaconda-ks.cfg bash-test Desktop Downloads google-chrome-stable_current_x86_64.rpm initial-setup-ks.cfg original-ks.cfg [root@web1 ~]#
3)详细参考请参见
二、字符串文本实例
1、获取字符串长度
[root@node1 ~]# HLWD='hello world!' [root@node1 ~]# echo $HLWD hello world! [root@node1 ~]# echo ${#HLWD} 12 [root@node1 ~]#
2、字符串切片
${parameter:offset}
${parameter:offset:length}
获取从offset个字符开始,向后length个字符
获取hello字符串
[root@node1 ~]# echo ${HLWD:0:5} hello 获取从第二个字符后的一个字符
[root@node1 ~]# echo ${HLWD:2:1} l 获取从第六个字符后两个字符
[root@node1 ~]# echo ${HLWD:6:2} wo
获取第五字符后面的字符 [root@node1 ~]# echo ${HLWD:6} world!
获取第五字符后面的字符 [root@node1 ~]# echo ${HLWD:5} world!
获取-1字符之后的字符
[root@node1 ~]# echo ${HLWD:-1} hello world! 获取最后一个字符
[root@node1 ~]# echo ${HLWD:(-1)} ! 获取最后两个字符
[root@node1 ~]# echo ${HLWD:(-2)} d!
获取从倒数第三个字符后的2个字符
[root@node1 ~]# echo ${HLWD:(-3):3}
ld!
[root@node1 ~]#
3、替换字符串
格式:${parameter/pattern/string}
[root@master ~]# VAR='hello world world!' 将第一个world字符串替换为WORLD [root@master ~]# echo ${VAR/world/WORLD} hello WORLD world! 将全部的world替换为WORLD [root@master ~]# echo ${VAR//world/WORLD} hello WORLD WORLD! [root@master ~]# VAR=123abc 替换正则表达式为空 [root@master ~]# echo ${VAR//[^0-9]/} 123 [root@master ~]# echo ${VAR/[0-9]/} 23abc [root@master ~]# echo ${VAR/[0-9][0-9][0-9]/} abc
4、字符串截取
格式:${parameter#word} 删除匹配前缀
${parameter##word}
${parameter%word} 删除匹配后缀
${parameter%%word}
说明:#去掉左边,最短匹配模式,##最长匹配模式
#去掉右边,最短匹配模式,%%最长匹配模式
如果变量为空就返回hello world! [root@master ~]# VAR= [root@master ~]# echo ${VAR:-'hello world!'} hello world! 如果变量不为空就返回hello world! [root@master ~]# VAR="hello" [root@master ~]# echo ${VAR:+' world!'} world! [root@master ~]# echo ${VAR:+'hello world!'} hello world! 如果变量空就重新赋值 [root@master ~]# [root@master ~]# VAR= [root@master ~]# echo ${VAR:=hello} hello [root@master ~]# echo $VAR hello 如果变量为空就将信息输出stderr [root@master ~]# VAR= [root@master ~]# echo ${VAR:?value is null } -bash: VAR: value is null
5、字符串颜色
使用方法请见shell 学习笔记8-case条件语句里面的2-3小节
参考:《shell从入门到精通》---李振良
转载请注明出处: https://www.cnblogs.com/zhangxingeng/p/11794283.html
原文地址:https://www.cnblogs.com/zhangxingeng/p/11794283.html
- JavaWeb项目架构之Elasticsearch日志处理系统
- 分布式服务防雪崩熔断器,Hystrix理论+实战。
- JavaWeb项目架构之Kafka分布式日志队列
- 如何让Git记住用户名和密码
- 金融系统中正确的金额计算及存储方式
- 如何利用深度学习写诗歌(使用Python进行文本生成)
- 注意:字符串substring方法在jkd6,7,8中的差异。
- JavaWeb项目架构之NFS文件服务器
- 轻松几步搞定SSH连接Git配置
- 免费使用谷歌GPU资源训练自己的深度模型
- Git安装及配置5分钟快速教程
- 风格迁移原理及tensorflow实现-附代码
- 手把手教你搭建目标检测器-附代码
- JavaWeb项目架构之FastDFS分布式文件系统
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python 技术篇-日志模块自定义时间格式
- 恕我直言你可能真的不会java第12篇-如何使用Stream API对Map元素排序
- JavaScript错误处理完全指南
- 从头创建您自己的vue.js——第4部分(构建反应性)
- Oracle 数据库-服务器端字符集查看方法
- Pywinauto 应用后端类型选择错误:AttributeError: 'NoneType' object has no attribute 'backend'. 原因及解决办法
- 恕我直言你可能真的不会java第11篇-Stream API终端操作
- Python+selenium 自动化-滚动的使用方法,如何滚动到元素的位置
- 恕我直言你可能真的不会java第10篇-集合元素归约
- Python+selenium 自动化-模拟键盘输入、点击操作,如何查看所支持的全部键位名称
- Uber为什么放弃Postgres选择迁移到MySQL?
- BAT 批处理命令 - 文件批量复制、克隆功能实例演示
- 【35期】谈谈你对Java线程之间通信方式的理解
- mac 技术篇-修改hosts文件,hosts文件位置
- 一行能装逼的 JavaScript 代码