一文搞定Shell编程中的单引号、双引号、反引号和转义符的区别和使用

news2024/11/20 1:33:56

前言

Shell编程中,不仅会是使用变量,还经常会使用$\、单引号、双引号、反引号等符号。

这些符号在使用中,有时候难免混乱,所以整理此文,便于学习,希望对你有用

文章目录

  • 前言
  • 一. 符号的介绍与对比
  • 二. 单引号和双引号的区别
    • 2.1. 变量展开:
    • 2.2 命令替换
    • 2.3 转义字符的处理
    • 2.4 引号的嵌套
  • 三. 转义符
    • 3.1 转义符的概念
    • 3.2 常用的转义符
    • 3.3 使用案例
  • 总结

一. 符号的介绍与对比

如下为几种符号简单区别对比:

  • 美元符号 $,主要用于引用变量值,例如定义变量MXS=moxiaosheng,引用时,需要用 $MXS;
  • \反斜杠,主要是用于对特定的字符实现转义,保留原有意义,例如echo “\$MXS”结果会打印$MXS,而不会打印moxiaosheng
  • 单引号' ',单引号又称为强引,不具有变量置换的功能,所有的任意字符还原为字面意义,实现屏蔽Shell元字符的功能;
  • 双引号" ",双引号又称为弱引,具有变量置换的功能,保留$(使用变量前导符), \(转义符), `(反向引号)元字符的功能;
  • 反向引号``,反引号,位于键盘Tab键上面一行的键,用作命令替换(相当于$(…))。

二. 单引号和双引号的区别

在shell中,单引号(')和双引号(")在处理字符串时有以下区别:

2.1. 变量展开:

  • 单引号字符串中的变量不会被展开,将原样输出。例如,echo ‘Hello $name’ 输出结果为 “Hello $name”。
  • 双引号字符串中的变量会被展开为其对应的值。例如,echo “Hello $name”,如果变量 name 的值为 “Alice”,则输出结果为 “Hello Alice”。
#!/bin/bash

name="Alice"

# 单引号字符串中的变量不会展开
echo 'Hello $name'  # 输出结果为 "Hello $name"

# 双引号字符串中的变量会展开
echo "Hello $name"  # 输出结果为 "Hello Alice"

2.2 命令替换

  • 单引号字符串中的命令替换不会被执行,命令将原样输出。例如,echo ‘Today is $(date)’ 输出结果为 “Today is $(date)”。
  • 双引号字符串中的命令替换会被执行,并将命令的输出结果插入字符串中。例如,echo “Today is $(date)” 将执行命令 “date” 并将输出日期插入字符串中。

2.3 转义字符的处理

  • 在单引号字符串中,转义字符(例如 \n、\t)仅被视为普通字符,不会被特殊处理。
  • 在双引号字符串中,转义字符会被解释,并按照其含义进行替换。例如,echo “Hello\tWorld” 输出结果为 “Hello World”,其中 \t 被解释为制表符。

2.4 引号的嵌套

  • 单引号字符串中可以包含双引号,双引号字符串中可以包含单引号。例如,echo ‘He said, “Hello”’ 和 echo “It’s a nice day” 都是合法的。

只要记住一点就行了: 单引号一般会保留原样输出。

三. 转义符

3.1 转义符的概念

转义符在shell脚本中用于解决特殊字符的处理问题。当需要在字符串中插入具有特殊含义的字符时,可以使用转义符来取消其特殊含义,将其视为普通字符。

在shell脚本中,常见的转义符是反斜杠(\),其后跟着需要进行转义的字符。

3.2 常用的转义符

\n:换行符
\t:制表符
\":双引号
\':单引号
\\:反斜杠
\$:美元符号
```:反引号

3.3 使用案例

echo "This is a sentence with a newline.\nThis is on a new line."
echo "The price is \$10"  

这样可以输出$符号

使用脚本完成一个包含学生姓名和成绩的表格:

#!/bin/bash

# 表头
echo -e "姓名\t成绩"

# 学生数据
echo -e "Alice\t90"
echo -e "Bob\t85"
echo -e "Charlie\t92"
echo -e "David\t87"

输出结果:

姓名    成绩
Alice   90
Bob     85
Charlie 92
David   87

实现一个进度条:

#!/bin/bash

echo "执行命令:yum install mariadb"
echo "开始安装..."

# 安装命令(取消输出)
yum install -y mariadb --quiet &

# 监控安装进度
while :
do
    sleep 1
    echo -n "#"
    if yum list installed mariadb >/dev/null 2>&1; then
        break
    fi
done

echo ""
echo "安装完成"

使用yum install -y mariadb --quiet命令来安装mariadb软件包,并通过&运行它以启动后台安装过程。然后,使用while循环检查是否已经安装了mariadb软件包,如果安装完成则终止循环,并输出安装完成的消息。

安装时间仍然取决于多个因素。但使用实际的安装命令来监控进度会更接近实际情况,并且在安装完成后才会终止进度条。

总结

以上就是各类符号的使用方法,希望对你有用,我是沐风晓月, 我在csdn等你。

在这里插入图片描述

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

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

相关文章

复习html的第二章

什么是 HTML? HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言 (Hyper Text Markup Language)HTML 不是一种编程语言,而是一种标记语言 (markup language)标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页 HTML 标签 HT…

ECC加密算法详解+python实现

一.前言 目前比较受欢迎的加密算法一共存在两种,一种是基于大整数因子分解问题(IFP)的RSA算法和基于椭圆曲线上离散对数计算问题(ECDLP)的ECC算法。之前对RSA算法进行过很详细的讲解,但是ECC加密算法还没有…

科普文章:会议论文VS期刊论文,两者有何区别?学界的认可度两者一致吗?

文章目录 一、会议论文和期刊论文的概念1.1 会议论文1.2 期刊论文1.3 总结 二、不同之处2.1 内容的不同2.2 审稿周期的不同2.3 认可度的区别 三、投稿的一些建议四、自己的一点小想法 计算机深度学习方向研一学生一枚,论文才有想法,下一步打算开始写了&a…

业务流程绕过测试-业务安全测试实操(18)

业务流程绕过测试,业务上限测试 业务流程绕过测试 测试原理和方法 该项测试主要针对业务流程的处理流程是否正常,确保攻击者无法通过技术手段绕过某些重要流程步骤,检验办理业务过程中是否有控制机制来保证其遵循正常流程。例如业务流程分为三步:第一步,注册并发送验证码:…

JS 循环链表

文章目录 导文循环链表的概念循环链表具有以下几个特点:实现一个循环列表 导文 循环链表是一种特殊的链表数据结构,其中最后一个节点指向链表的头节点,形成一个循环的环状结构。与普通链表不同,循环链表没有明确的结束点&#xff…

【后端面经-java】java线程池满的处理策略

【后端面经-java】java线程池满的处理策略 1. 线程池介绍1.1 基本作用1.2 处理流程1.3 线程池大小设置1.4 线程池参数 2. 线程池满的处理策略2.1 默认--拒绝策略handler 3. 参考资料 1. 线程池介绍 1.1 基本作用 对多个线程使用的资源进行集中管理。 降低资源消耗&#xff1…

【数据挖掘实战】——科大讯飞:跨境广告ROI预测(Baseline)

🤵‍♂️ 个人主页:Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 &#x1f4a…

前端Vue自定义列表表格信息展示可用于商品规格参数展示

前端Vue自定义列表表格信息展示可用于商品规格参数展示 &#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13131 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- table-list:表格数组 数组里对象可自定义字段 …

Kubernetes 和 Prometheus

资源监控系统是容器编排系统必不可少的组件&#xff0c;也是服务治理的核心之一。而 Prometheus 本质上是一个开源的服务监控系统和时序数据库&#xff0c;是 CNCF 起家的第二个项目&#xff0c;目前已经成为 Kubernetes 生态圈中的监控系统的核心。 Prometheus 的核心组件 Pro…

Run in PaddleX 2.0,一站式搞定飞桨精选模型开发全流程!

2020年4月&#xff0c;飞桨推出了 PaddleX 全流程开发工具&#xff08;以下简称 PaddleX 1.0 系列&#xff09;&#xff0c;其在社区收获了广泛的影响力。PaddleX 1.0 系列采用本地单机版的方式&#xff0c;将深度学习开发全流程从数据准备、模型训练与优化到多端部署端到端打通…

【支付系统】如何生成订单号

通常我们都会用数据库中的主键作为订单号,而id的生成方式又以自增,uuid,雪花id最为常见.但是这些并不适合作为订单号.订单号一般要体现出年月日等信息.方便快速定位是哪个时间的订单.如果我们直接使用时间作为id,会有重复的可能.这里就给大家介绍一种最为简单的一种方式. 时间自…

企业进销存管理系统的设计与实现_kaic

摘 要 企业的进销存管理系统在日常经营过程中起着至关重要的作用&#xff0c;直接影响产品生产 的成本、进度、质量和企业效益。本论文项目以某化工企业对进销存管理系统的需求为 背景&#xff0c;针对企业存在的部门运作独立、信息资源共享度低等造成的进销存管理低率低下、 有…

【console】console用法大全:

文章目录 一、console.log普通信息/console.info提示性信息/console.error错误信息/console.warn警示信息二、console.time()和console.timeEnd()>查看执行所用时间三、console.group()和console.groupEnd()>让控制台输出的语句产生不同的层级嵌套关系四、console.profil…

什么是HTTP 500内部服务器错误,要怎么修复

HTTP 500是一种原始的错误代码&#xff0c;它指示网站服务器在处理请求时发生了内部错误&#xff0c;不过具体错误原因是不确定的。一般情况下&#xff0c;这种错误通常是由服务器程序上的bug或者配置问题造成的。当服务器收到请求时&#xff0c;尝试执行它时&#xff0c;但是发…

使用径向基函数(RBF)神经网络对我们自己的excel数据进行分类---包括详细的python代码,RBFRegressor

文章目录 一、 径向基神经网络&#xff08;Radial Basis Function Neural Network&#xff09;是什么&#xff1f;二、径向基函数(RBF)神经网络对我们自己的excel数据进行分类---包括详细的python代码总结 一、 径向基神经网络&#xff08;Radial Basis Function Neural Networ…

Go 将引入标准库 v2 版本,首个动手的是:math/rand/v2!

大家好&#xff0c;我是煎鱼。 最近 Go 核心团队负责人 Russ Cox&#xff08;下称&#xff1a;rsc&#xff09;发起了一项 “讨论”。希望正式开启 Go 标准库的 v2 版本&#xff0c;相当于老树发新芽了。 Go 标准库升级 v2 原因 这次会发起这个提案的最直接原因是&#xff1a;我…

编译原理笔记8:语法分析(2)上下文无关文法 CFG

目录 CFG 概述及其四元组表示产生式集合表示 CFGCFG&#xff0c;用推导&#xff0c;产生语言直接推导由 CFG 产生语言在&#xff1f;为啥从右往左叫规范&#xff1f;凭什么歧视左&#xff1f; 总结一下这些奇奇怪怪的东西 前几篇博客中说到的词法分析&#xff0c;做的是从 【xy…

驱动开发:内核注册表增删改查

注册表是Windows中的一个重要的数据库&#xff0c;用于存储系统和应用程序的设置信息&#xff0c;注册表是一个巨大的树形结构&#xff0c;无论在应用层还是内核层操作注册表都有独立的API函数可以使用&#xff0c;而在内核中读写注册表则需要使用内核装用API函数&#xff0c;如…

Spring Cloud灰度部署

1、背景(灰度部署) 在我们系统发布生产环境时&#xff0c;有时为了确保新的服务逻辑没有问题&#xff0c;会让一小部分特定的用户来使用新的版本&#xff08;比如客户端的内测版本&#xff09;&#xff0c;而其余的用户使用旧的版本&#xff0c;那么这个在Spring Cloud中该如何…

第五届双态IT北京用户大会回顾 | 基于运维数据治理的数智化转型

专题演讲人&#xff1a;擎创科技CTO 葛晓波 文末附有本场专题演讲视频 ●前言 各行业的云原生发展程度各有不同&#xff0c;并不是所有业务应用都适合云原生的形态&#xff0c;如若过度追求云原生化反而会使得企业运维压力骤增&#xff0c;运维成本激增。 从数字化转型的角度…