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 ...
随机推荐
- shell 查看目前机器listen的所有端口
netstat -lnp 这条命令的意思是列出系统里面监听网络连接的端口号和相应的进程PID.参数说明:-t:表示列出TCP连接(也可以加上-u参数表示同时列出UDP网络连接)-l:表示列出正在网络监 ...
- kms windows激活
Microsoft KMS Activation Usage Start a Command Prompt as an Administrator. Windows slmgr.vbs -upk sl ...
- rust数据类型
fn main() { //char支持4个字节,支持emoji let jp = "ゆ"; let emoji = "✨"; let ch = "囧 ...
- golang 文件传输小demo(转载)
转载地址:https://www.cnblogs.com/qq702368956/p/10195497.html 获取文件信息需要用到os. Stat接口,发送文件前开启接收者(服务端),启动客户端先 ...
- Ubuntu 16.04与Win10双系统双硬盘安装图解
一.先做准备工作.建议:在当前系统所在的硬盘上,留一片空的主分区安装Ubuntu系统. 2.划分多大的空间够?安装的过程中需要涉及到分区,为了以免日后重装,我的建议是如下分区:1).5G,主分区,空间 ...
- Learning Context Graph for Person Search
Learning Context Graph for Person Search 2019-06-24 09:14:03 Paper:http://openaccess.thecvf.com/cont ...
- JVM常用命令和性能调优建议
一.查看jvm常用命令jinfo:可以输出并修改运行时的java 进程的opts. jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程 ...
- C++11新特性— auto 和 decltype 区别和联系
一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准 ...
- matlab学习笔记10_4MATLAB中的字符串表示
一起来学matlab-字符串操作 10_4 MATLAB中的字符串表示 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感 ...
- CenterOS7 安装Mysql8 及安装会遇到的问题
1.下载 MySQL 所需要的安装包 网址:https://dev.mysql.com/downloads/mysql/ 2.Select Operating System: 选择 Red Hat , ...