【shell】—双引号引用变量

文章目录

  • 一、举例—单、双引号引用变量的结果差异
  • 二、使用双引号引用变量的场景
    • 1、使用双引号—可以防止字符串被分割
    • 2、使用双引号—特殊字符变为普通字符
    • 3、使用双引号—保存原始命令的输出格式
    • 4、使用双引号—具有强约束的单引号变为普通单引号字符
    • 5、注意


一、举例—单、双引号引用变量的结果差异

1、运行下面代码:

time_tag="2022050912"  
outFileName='newnbr_raoming_model.${time_tag}.txt'
echo $time_tag,$outFileName

运行结果:

2022050912,newnbr_raoming_model.${time_tag}.txt

观察运行结果,可以发现outFileName变量中引用的time_tag变量名没有赋值2022050912,而是直接输出了,这不是我们想要的。

time_tag="2022050912"  
outFileName="newnbr_raoming_model.${time_tag}.txt"
echo $time_tag,$outFileName

2、解决方法:引用outFileName变量时,将单引号变成双引号,发现outFileName变量中引用的time_tag变量名成功赋值为2022050912。

time_tag="2022050912"  
outFileName="newnbr_raoming_model.${time_tag}.txt"
echo $time_tag,$outFileName

运行结果:

2022050912,newnbr_raoming_model.2022050912.txt

3、原因:单引号(’ ')与双引号类似,但是单引号中不能引用变量,因为$不再具有特殊含义。在单引号中,除 '(单引号)之外的所有特殊字符都将会被直接按照字面意思解释。可以认为单引号(全引用)是双引号(部分引用)的一种更严格的形式。


二、使用双引号引用变量的场景

引用变量时,通常建议将变量包含在双引号中,这样可以防止除 $,`(反引号),\ (转义符)之外的其他特殊字符被重新解释。(在双引号之中, $代表引用变量的值,而 ` (反引号)代表引用命令,\ (转义符)可以保留字符字面输出,主要针对$、`、\ 这三个在双引号有特殊含义的字符。)

1、使用双引号—可以防止字符串被分割

举例1:

运行下面代码:

List="one two three"for a in $List #空白符将变量分成几个部分
do echo $a
done

运行结果:

one
two
three

空白符将变量分成几个部分。

变量加上双引号,运行下面代码:

List="one two three"for a in "$List" #在单一变量中保留所有空格
do echo $a
done

运行结果:

one two three

2、使用双引号—特殊字符变为普通字符

举例1:

运行下面代码:

#!/bin/bash
# test.sh: 输出一些奇怪的变量var="'(]\\{}\$\""
echo $var      
echo "$var"    

运行结果:

'(]\{}$"
'(]\{}$"

echo $var 与echo “$var” 的运行结果没有区别。

举例2:

运行下面代码:

IFS='\' #定义分隔符
var="'(]\\{}\$\""
echo $var      
echo "$var" 

运行结果:

'(] {}$"
'(]\{}$"

echo $var 的运行结果中 \ 直接被转换成空格了,echo “$var” 的运行结果没有任何区别。

举例3:

运行下面代码:

var1="Have I Told You Lately That I Love You"
echo "\$var1 = "$var1""    

运行结果:

$var1 = Have I Told You Lately That I Love You

双引号中,单独的$表示引用变量,如果$想要单纯按照字面意思输出,加上转义符号(\)。

3、使用双引号—保存原始命令的输出格式

举例1:

运行下面代码:

echo "$(echo '"')"

运行结果:

"

举例2:

运行下面代码:

echo $(cal)
echo "$(cal)"

运行结果:

July 2024 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31July 2024     
Su Mo Tu We Th Fr Sa1  2  3  4  5  67  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

如果$(cal)不放在双引号之中,echo就会将所有结果以单行输出,丢弃了所有原始的格式。

4、使用双引号—具有强约束的单引号变为普通单引号字符

两个单引号之间不能使用单引号,在单引号中转义符(\)都已经按照字面意思解释。所以要想打印单引号,要用双引号。

举例:

运行下面代码:

echo "Why can't I write 's between single quotes"

运行结果:

Why can't I write 's between single quotes

举例: 单引号具有强约束力,在单引号中转义符(\)都已经按照字面意思解释。

运行下面的代码:

var3='\\\\'
echo $var3 
echo "$var3"

运行结果:

\\\\
\\\\

5、注意

1、双引号中转义符会被解释,并按照其含义进行替换。
如果在$、`、\ 这三个字符前面,就是转义符的意思,如果在其他字符前面,则不需要解释,直接输出\与其他字符。

举例1:

运行下面代码:

echo \
echo "\"

执行上面两个语句,都会出现>的符号,意思是等待继续的输入。

举例2:

运行下面代码:

echo \a
echo "\a" 

运行结果:

a
\a

举例3:

运行下面代码:

echo x\ty
echo "x\ty"

运行结果:

xty
x\ty

举例3: 注意 echo -e 会将 “\t” 解释成制表符。

运行下面代码:

echo -e  x\ty
echo -e "x\ty"

运行结果:

xty
x       y

2、双引号包含了 “!” 将会产生错误,这是因为shell将其解释为查看历史命令。
而在脚本中,因为历史机制已经被关闭,所以不会产生这个问题。

举例:

运行下面代码:

echo "hello!"

运行结果:
-bash: !": event not found

运行下面代码:

echo "hello\!"

运行结果:

hello\!

参考文章:
引用变量
shell中的引号和转义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/43407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挑战杯 opencv python 深度学习垃圾图像分类系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 opencv python 深度学习垃圾分类系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 这是一个较为新颖的竞…

昇思25天学习打卡营第13天|应用实践之ResNet50迁移学习

基本介绍 今日的应用实践的模型是计算机实践领域中十分出名的模型----ResNet模型。ResNet是一种残差网络结构,它通过引入“残差学习”的概念来解决随着网络深度增加时训练困难的问题,从而能够训练更深的网络结构。现很多网络极深的模型或多或少都受此影响…

数据链路层(超详细)

引言 数据链路层是计算机网络协议栈中的第二层,位于物理层之上,负责在相邻节点之间的可靠数据传输。数据链路层使用的信道主要有两种类型:点对点信道和广播信道。点对点信道是指一对一的通信方式,而广播信道则是一对多的通信方式…

算法工程师第五天(● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和 )

参考文献 代码随想录 一、有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", …

风险评估:Tomcat的安全配置,Tomcat安全基线检查加固

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 这一章节我们需…

grafana数据展示

目录 一、安装步骤 二、如何添加喜欢的界面 三、自动添加注册客户端主机 一、安装步骤 启动成功后 可以查看端口3000是否启动 如果启动了就在浏览器输入IP地址:3000 账号密码默认是admin 然后点击 log in 第一次会让你修改密码 根据自定义密码然后就能登录到界面…

高职物联网实训室

一、高职物联网实训室建设背景 随着《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》的发布,中国正式步入加速数字化转型的新时代。在数字化浪潮中,物联网技术作为连接物理世界与数字世界的桥梁,其重要性日益凸显…

Golang | Leetcode Golang题解之第224题基本计算器

题目&#xff1a; 题解&#xff1a; func calculate(s string) (ans int) {ops : []int{1}sign : 1n : len(s)for i : 0; i < n; {switch s[i] {case :icase :sign ops[len(ops)-1]icase -:sign -ops[len(ops)-1]icase (:ops append(ops, sign)icase ):ops ops[:len(o…

Knife4j的原理及应用详解(三)

本系列文章简介&#xff1a; 在当今快速发展的软件开发领域&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;作为不同软件应用之间通信的桥梁&#xff0c;其重要性日益凸显。随着微服务架构的兴起&#xff0c;API的数量…

价值投资者什么时候卖出股票?

经常有人说&#xff0c;会买的只是徒弟&#xff0c;会卖的才是师傅。 在阅读《战胜华尔街》的过程中&#xff0c;也多次感受到林奇先生的卖出逻辑&#xff0c;当股票的价格充分体现了公司的价值的时候&#xff0c;就是该卖出股票的时候。但这只是理论上的&#xff0c;从林奇先…

数据中台指标管理系统

您所描述的是一个数据中台指标管理系统&#xff0c;它基于Spring Cloud技术栈构建。数据中台是企业数据管理和应用的中心平台&#xff0c;它整合了企业内外部的数据资源&#xff0c;提供数据服务和数据管理能力。以下是您提到的各个模块的简要概述&#xff1a; 1. **首页**&am…

JSP WEB开发(四) MVC模式

MVC模式介绍 MVC&#xff08;Model-View-Controller&#xff09;是一种软件设计模式&#xff0c;最早出现在Smalltalk语言中&#xff0c;后来在Java中得到广泛应用&#xff0c;并被Sun公司推荐为Java EE平台的设计模式。它把应用程序分成了三个核心模块&#xff1a;模型层、视…

2024年有多少程序员转行了?

疫情后大环境下行&#xff0c;各行各业的就业情况都是一言难尽。互联网行业更是极不稳定&#xff0c;频频爆出裁员的消息。大家都说2024年程序员的就业很难&#xff0c;都很焦虑。 在许多人眼里&#xff0c;程序员可能是一群背着电脑、进入高大上写字楼的职业&#xff0c;他们…

SVN 80道面试题及参考答案(2万字长文)

目录 解释SVN的全称和主要功能。 SVN与CVS相比,有哪些主要改进? 描述SVN的工作流程。 什么是版本库(repository)?它存储了什么? 解释工作副本(working copy)的概念。 SVN如何处理文件的版本控制? SVN中的“commit”是什么意思? 解释“update”操作的作用。 如何…

Datawhale AI 夏令营 机器学习挑战赛

一、赛事背景 在当今科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的深度和广度渗透到科研领域&#xff0c;特别是在化学及药物研发中展现出了巨大潜力。精准预测分子性质有助于高效筛选出具有优异性能的候选药物。以PROTACs为例&#x…

Hi3861 OpenHarmony嵌入式应用入门--MQTT

MQTT 是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输 协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用&#xff0c;是专为受限设备和低带宽、 高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器…

AutoMQ 生态集成 Kafdrop-ui

Kafdrop [1] 是一个为 Kafka 设计的简洁、直观且功能强大的Web UI 工具。它允许开发者和管理员轻松地查看和管理 Kafka 集群的关键元数据&#xff0c;包括主题、分区、消费者组以及他们的偏移量等。通过提供一个用户友好的界面&#xff0c;Kafdrop 大大简化了 Kafka 集群的监控…

量产工具一一UI系统(四)

目录 前言 一、按钮数据结构抽象 1.ui.h 二、按键处理 1.button.c 2.disp_manager.c 3.disp_manager.h 三、单元测试 1.ui_test.c 2.上机测试 前言 前面我们实现了显示系统框架&#xff0c;输入系统框架和文字系统框架&#xff0c;链接&#xff1a; 量产工具一一显…

Redis 底层数据结构

• 简单动态字符串 • 链表 • 字典 • 跳跃表 • 整数集合 • 压缩列表 • 对象 SDS 增加了len和free属性&#xff0c;记录buf数组的使用空间和剩余空间。好处:strken函数直接读取len值&#xff0c;时间复杂度是O(1)&#xff1b;预分配buf长度&#xf…