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

  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. Ajax 的一些概念 解析

    什么是Ajax Ajax基本概念 Ajax(Asynchronous JavaScript and XML):翻译成中文就是异步的JavaScript和XML. 从功能上来看是一种在无需重新加载整个网 ...

  2. c++中关于堆和堆栈的区别

    在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.       栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量 的存储区.里面的变量通常是局部 ...

  3. 深度clone和浅clone

    首先等你有空的时候可以看这篇,要用可以看我这篇 https://www.cnblogs.com/echolun/p/7889848.html 1.有一点需要明确的是 深拷贝只是针对引用数据类型来说的, ...

  4. PL/SQL Developer插入数据到数据库出现数据中文乱码

    问题描述: 使用PL/SQL Developer往Oracle数据库插入数据,出现中文乱码! 解决办法: 1.执行脚本 select userenv('language') from dual; 结果 ...

  5. MYSQL事务的开启与提交

    MYSQL 事务处理主要有两种方法: 1.用 BEGIN, ROLLBACK, COMMIT来实现 BEGIN 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认 2.直接用 SET 来 ...

  6. Mxnet:以全连接层为例子自定义新的操作(层)

    https://blog.csdn.net/a350203223/article/details/77449630 在使用深度学习平台时,光会使用其中已定义好的操作有时候是满足不了实际使用的,一般需要 ...

  7. python笔记之按文件名搜索指定路径下的文件

    1.搜索文件名中以指定的字符串开头(如搜索dll,结果中含有dll a,dll abc等) 我的目录下有dll a.txt和dll.txt文件 其中a文件夹下还有这两个文件 我希望通过python选择 ...

  8. 时间工具类DateUtil

    import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

  9. 持久化机器学习模型(joblib方式)

    import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression ...

  10. [LeetCode] 40. Combination Sum II 组合之和 II

    Given a collection of candidate numbers (candidates) and a target number (target), find all unique c ...