一、为什么使用${}引用变量

  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)详细参考请参见

       shell 学习笔记1-什么是shell,shell变量

二、字符串文本实例

  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-字符串文本处理${}的更多相关文章

  1. 【Shell基础】字符串删除

    案例:将金额18.中的点去掉,结果为18 #!/bin/shold_value=. new_value=`echo ${old_value%%.*}` echo $new_value ${filena ...

  2. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  3. linux shell 基础 使用日志与心得

    linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...

  4. shell编程01—shell基础

    01.学习shell编程需要的知识储备 1.vi.vim编辑器的命令,vimrc设置 2.命令基础,100多个命令 3.基础.高端的网络服务,nfs,rsync,inotify,lanmp,sersy ...

  5. Linux Shell 基础知识(一)

    1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 ​ GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...

  6. shell基础教程

    shell基础教程 一.shell基础知识 1.shell是什么? Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言. Shell ...

  7. 运维02 Shell基础命令(一)

    Shell基础命令(一)   Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应 ...

  8. 【Linux基础总结】Shell 基础编程

    Shell 基础编程 重启虚拟机遇到磁盘损坏如何解决 Shell编程中变量的声明.引用及作用域 Shell程序 概述 以文件形式存放批量的Linux命令集合,该文件能够被Shell解释执行,这种文件就 ...

  9. Shell基础学习小结

    0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...

  10. Shell基础-环境变量配置文件

    Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...

随机推荐

  1. Android Studio3.0的下载及其安装详解加eclipse下载安装配置jdk9

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号  欢迎大家关注我的微信公众号:「醉翁猫咪」 今天我们来讲解如何下载android studio 3.0及其 ...

  2. Centos 7配置nginx反向代理负载均衡集群

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

  3. [C++] namespace命名空间和using用法

    命名空间namespace:指标识符的各种可见范围. C++标准程序库中的所有标识符都被定义在一个std的namespace,这就是程序开始添加 using namespace std; 的原因. 很 ...

  4. session与cookie之间的关系

    一.客户端与服务端请求响应的关系 USER(客户端) 请求 tomcat(服务器), 属于HTTP请求.http请求是无状态的,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户 ...

  5. Jmeter5.11安装

    jmeter5.11要对应jdk1.8以上版本 1.选择zip后缀进行下载 2.配置环境变量 (1)电脑桌面---->"计算机"图标---->鼠标右键选择"属 ...

  6. 第12组 Beta冲刺(5/5)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...

  7. 一次解决idea maven settings.xml文件不生效

    一直使用eclipse,在eclipse中可以手动指定global和user settings,并且settings的文件名称可以不是settings.xml,只要内容符合maven规范就行.如下: ...

  8. .net core facebook 容易进的一个坑

    Microsoft.AspNetCore.Authentication.Facebook 库 services.AddAuthentication(CookieAuthenticationDefaul ...

  9. Redis系列 | Redis5.0 新特性

  10. nodejs爬虫如何设置动态ip以及userAgent

    nodejs爬虫如何设置动态ip以及userAgent 转https://blog.csdn.net/u014374031/article/details/78833765 前言 在写nodejs爬虫 ...