shell变量的引用非常重要,运用技巧灵活多变

变量的引用主要包含四类:双引号引用、单引号引用、反引号引用、反斜线引用

" " 双引号              屏蔽除美元符号$、反引号( ` )和反斜线( \ )之外的所有字符

' ' 单引号               屏蔽所有的字符

`` 反引号               shell将反引号中的内容解释为系统命令

\ 反斜线                 转义符,屏蔽下一个字符的特殊含义

shell变量的引用指的是 用引用符号将字符串引起来,从而屏蔽特殊字符被shell解释为其他含义。比如通配符星号(*)表示匹配任意字符串,如果引号引起来则只表示星号

双引号屏蔽星号*特殊含义,解释为名称为a*的文件

一、双引号

1、双引号内,除美元符号$、反引号( ` )和反斜线( \ )字符有特殊含义外,其他的所有字符都解释为表面字符含义

2、双引号的第二个作用是 双引号引用变量能够防止字符串分割,保留变量中的空格

上图中的字符we are等等以及空格都解释为表面含义,只有$符号解释为引用符号,将variable的值引用出来了,只有反引号将命令uname -r标准输出赋给了变量,回显到标准输出了

(单词拼错了,将错就错吧)echo $varibale2,因为没有使用双引号将引用变量引用起来,即"$varibale2",所以shell将“this is tree”之间的空格进行了分割,而echo "$variable2"则保留了空格

二、单引号

单引号引用所有的字符,即单引号中字符除单引号之外都解释为字面意义。这样的话,在单引号内引用变量,就不具备引用的作用了

环境变量PWD在双引号中$PWD表示当前目录,而在单引号中仅仅解释为$PWD

如果字符串中有单引号,怎么办?如上图,第一使用双引号将单引号的含义屏蔽掉;第二种将字符串分成三段来解释,三段中的两个单引号,在使用双引号将其屏蔽

三、命令替换

命令替换是指将命令的标准输出作为值赋给某个变量,shell使用命令替换有两种方式:

一、使用反引号;而使用$()符号

语法格式:

·Linux命令·

$(Linux命令)

实质上上图命令进行了两步操作:

第一步:先进行反引号`uname -r`或者$(uname -r),得到到内核版本号(反引号会首先被执行,执行结果作为外部的输入,然后其次是执行cd命令)

第二步,执行cd命令,即cd /lib/modules/3.10.0-1127.el7.x86_64/kernel

注意反引号也存在字符串分割特性

反引号··与$()的效果一样,区别是$()可以实现嵌套

END

SHELL 变量引用的更多相关文章

  1. 2.8 补充:shell变量引用方式

    一 变量   变量:本质上是程序中保存用户数据的一块内存空间,变量名就是内存空间地址.   Shell中:变量可由字母数字和下划线组成,以字母或下划线开头.   命名:PATH=/sbin       ...

  2. Shell 变量引用实例

    初学 Shell 编程时,对变量各种引用使用不太熟悉,走了很多弯路,本文记录变量引用的一些用法,希望对大家有所帮助. 引用 引用指将字符串用引用符号引起来,以防止特殊字符被 shell 脚本解释为其他 ...

  3. shell变量引用

    var="www.sina.com.cn" echo ${var#*.} #sina.com.cn 从前向后删 echo ${var##*.} #.cn 贪婪模式从前向后删 ech ...

  4. 小鸟初学Shell编程(七)变量引用及作用范围

    变量引用 那么定义好变量,如何打印变量的值呢?举例下变量引用的方式. ${变量名}称作为对变量的引用 echo ${变量名}查看变量的值 ${变量名}在部分情况下可以省略成 $变量名 [root@li ...

  5. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

  6. awk中引用shell变量的方法

    1.通过命令行参数定义变量时引用: awk -v awk变量名= shell变量名 #!/bin/bash var4bash=test awk -v var4awk="$var4bash&q ...

  7. shell变量详解

    1 shell变量基础 shell变量是一种很"弱"的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义.所以若要进行数学运算,必须使用一些命令例如let.de ...

  8. 三、Shell变量类型和运算符

    一.Shell变量的应用 1.Shell变量的种类     ·用户自定义变量:由用户自己定义.修改和使用     ·预定义变量:Bash预定义的特殊变量,不能直接修改     ·位置变量:通过命令行给 ...

  9. Shell入门教程:Shell变量

    变量 是一种很“弱”的变量,默认情况下,一个变量保存一个串,Shell不关心这个串是什么含义.所以若要进行数学运算,必须使用一些命令例如 let.declare.expr.双括号等. Shell变量可 ...

随机推荐

  1. RabbitMaClientPoll

    import pika import threading import random import uuid import json # 框架模块 from django.conf import se ...

  2. (最全)No dashboards are active for the current data set. 解决tensorboard无法启动和显示问题

    按照网上的教程,我无法正常启动tensorboard,全过程没有报错,但是打开tensorboard显示No dashboards are active for the current data se ...

  3. TensorRT Analysis Report分析报告

    TensorRT Analysis Report 一.介绍 TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟.高吞吐率的部署推理.TensorRT可 ...

  4. jmeter链接mysql数据库

    一.下载与MySQL对应的jar包 1.1.查询MySQL的版本, 命令语句 :SELECT VERSION(); 1.2.MySQL官网下载jar包 ,https://downloads.mysql ...

  5. Spring——Bean的作用域

    Spring中Bean的作用域有五种,分别是singleton.prototype.request.session.globalSession.其中request.session.globalSess ...

  6. Java线程池底层源码分享和相关面试题(持续更新)

    线程池各个参数讲解 public ThreadPoolExecutor(int corePoolSize, //线程池核心工作线程数量,比如newFixedThreadPool中可以自定义的线程数量就 ...

  7. Java必学MySQL数据库应用场景

    Java教程分享Java必学之MySQL数据库应用场景,在当前的后台开发中,MySQL应用非常普遍,企业在选拔Java人才时也会考察求职者诸如性能优化.高可用性.备份.集群.负载均衡.读写分离等问题. ...

  8. Centos7搭建内网DNS服务器

      一.配置阿里云yum源 执行脚本配置阿里云的yum源,已配置yum源的可以忽略 #!/bin/bash # ******************************************** ...

  9. Ubuntu安装部署Kafka

    Ubuntu安装部署Kafka 环境: Ubuntu 18.04.4 LTS ,JDK1.8,kafka_2.12-2.3.1 确保已经安装了JDK,JDK安装过程不再赘述.可参考文章xxxx 一.下 ...

  10. 『心善渊』Selenium3.0基础 — 13、Selenium操作下拉菜单

    目录 1.使用Selenium中的Select类来处理下拉菜单(推荐) 2.下拉菜单对象的其他操作(了解) 3.通过元素二次定位方式操作下拉菜单(重点) (1)了解元素二次定位 (2)示例: 页面中的 ...