shell-基础2-字符串文本处理${}
一、为什么使用${}引用变量
1、$a和${a}的效果与区别
因为个别特殊字符会影响正常引用,所以需要使用${}引用变量,加花括号是为了帮助解释器识别变量的边界
$a和${a}效果一样,当变量后面连接其他字符的时候必须给变量加上大括号${a}_bc
[root@master ~]# VAR=
[root@master ~]# echo $VAR11 [root@master ~]# echo $VAR
[root@master ~]# echo ${VAR} [root@master ~]#
2、变量小知识补充
1)定义变量的三种方式
[root@web1 ~]# a=
[root@web1 ~]# b=''
[root@web1 ~]# c=""
[root@web1 ~]# a=-$a
[root@web1 ~]# b='111-$a'
[root@web1 ~]# c="111-$a"
[root@web1 ~]# echo "a=$a"
a=-
[root@web1 ~]# echo "c=${c}" <---$变量名表示输出变量,可以用$c或者${c}两种用法
c=--
[root@web1 ~]# echo "b=$b"
b=-$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} [root@node1 ~]#
2、字符串切片
${parameter:offset}
${parameter:offset:length}
获取从offset个字符开始,向后length个字符
获取hello字符串
[root@node1 ~]# echo ${HLWD::}
hello
获取从第二个字符后的一个字符
[root@node1 ~]# echo ${HLWD::}
l
获取从第六个字符后两个字符
[root@node1 ~]# echo ${HLWD::}
wo
获取第五字符后面的字符
[root@node1 ~]# echo ${HLWD:}
world!
获取第五字符后面的字符
[root@node1 ~]# echo ${HLWD:}
world!
获取-1字符之后的字符
[root@node1 ~]# echo ${HLWD:-}
hello world!
获取最后一个字符
[root@node1 ~]# echo ${HLWD:(-)}
!
获取最后两个字符
[root@node1 ~]# echo ${HLWD:(-)}
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]/} [root@master ~]# echo ${VAR/[-]/}
23abc
[root@master ~]# echo ${VAR/[-][-][-]/}
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
shell-基础2-字符串文本处理${}的更多相关文章
- 【Shell基础】字符串删除
案例:将金额18.中的点去掉,结果为18 #!/bin/shold_value=. new_value=`echo ${old_value%%.*}` echo $new_value ${filena ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- linux shell 基础 使用日志与心得
linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...
- shell编程01—shell基础
01.学习shell编程需要的知识储备 1.vi.vim编辑器的命令,vimrc设置 2.命令基础,100多个命令 3.基础.高端的网络服务,nfs,rsync,inotify,lanmp,sersy ...
- Linux Shell 基础知识(一)
1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...
- shell基础教程
shell基础教程 一.shell基础知识 1.shell是什么? Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言. Shell ...
- 运维02 Shell基础命令(一)
Shell基础命令(一) Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应 ...
- 【Linux基础总结】Shell 基础编程
Shell 基础编程 重启虚拟机遇到磁盘损坏如何解决 Shell编程中变量的声明.引用及作用域 Shell程序 概述 以文件形式存放批量的Linux命令集合,该文件能够被Shell解释执行,这种文件就 ...
- Shell基础学习小结
0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...
- Shell基础-环境变量配置文件
Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...
随机推荐
- Hdu 5093 Battle Ship
每个海面要么放要么不放,因此可以用二分图匹配, 考虑把同一行内的能互相看到的点放到一个行块里,同一列内能看到的点放到一个列块里,然后每一个行块都可以和该行块里所有海面的列块连边,选了这个行块,就必须选 ...
- hadoop jps不显示信息
使用kvm做了一个hadoop组件的镜像,使用该镜像启动,在使用jps的时候,没有任何信息显示. 解决: 删除/tmp下的hsper开头文件,哪个用户没有权限就删除对应的hsper**_usernam ...
- [总结] MSF攻击数据库服务
0x01 攻击Mysql服务 1.1 目标探测 auxiliary/scanner/mysql/mysql_version 常用于内网中的批量mysql主机发现: 1.2 爆破登录 auxiliary ...
- 京津冀大学生竞赛:babyphp
京津冀大学生竞赛:babyphp 比赛的时候没做出来,回来以后一会就做出来了,难受...还是基本功不扎实,都不记得__invoke怎么触发的了 放上源码 <?php error_reportin ...
- Service Fabric独立集群搭建
开篇声明:巨坑,慎入.若实则无奈,建议直接上azure... 1. 开启服务器自动更新,安装最新的补丁. 2. 下载用于 Windows Server 的 Service Fabric 包(htt ...
- SQL server 表结构转Oracle SQL脚本
SQL server 表结构转Oracle SQL脚本 /****** Object: StoredProcedure [dbo].[getOracle] Script Date: 2019/7/25 ...
- 取消本地文件夹与SVN服务器的关联
我们在开发项目中用SVN作为版本管理工具时,从服务器下载到本地的项目是有.svn文件夹的,这个代表是与svn服务器代码相关联的,如果我们想取消本地文件夹与svn服务器的关联,那么有多种方法,这里介绍导 ...
- android -------- LiveDataBus的使用
LiveData是17年GoogleIO大会上提出来的一个新技术.相对于通信总线类型的框架EventBus和RxBus来说,它更简单,更简洁.更解耦. LiveEventBus是一款Android消息 ...
- Activiti task claim concurrent
Activiti task claim cocurrent - 国内版 Binghttps://cn.bing.com/search?q=Activiti+task+claim+cocurrent&a ...
- AnnotatedElementUtils.findMergedAnnotation作用
// 在element上查询annotationType类型注解 // 将查询出的多个annotationType类型注解属性合并到查询的第一个注解中 // # 多个相同注解合并 org.spring ...