终于知道 Shell 中单引号双引号的区别了

终于知道 Shell 中单引号双引号的区别了

在编写 shell 脚本或输入命令时,你可能已经注意到大多数命令都可以使用单引号 或双引号, 这不仅适用于 shell 脚本,而且适用于所有 Bash 命令, 但是两种类型的引号以及 Bash shell 解释它的方式之间存在一定的差异,下面将介绍它们之间的不同

单引号

用单引号 ‘ ‘ 括起来的字符会保留引号内每个字符的字面值

简而言之,shell 将逐字解释单引号内的封闭文本,并且不会插入任何内容,包括变量、反引号、某些 ** 转义符等

单引号中的任何字符都没有特殊含义, 当你不想使用转义字符来更改 shell 脚本解释输入字符串参数方式时,就会很方便

双引号

双引号类似于单引号,只是它允许 shell 解释美元符号 ( $ )、反引号 ( </strong> )、反斜杠 ( \ ) 和感叹号 ( ! ), 这些字符与双引号一起使用时具有特殊含义,并且在显示之前对其进行评估</p> <p>双引号可以通过在双引号前加上反斜杠来使用其自身</p> <h3>实例</h3> <p>下面通过几个实例来说明 单引号 和 双引号之间的一些区别</p> <ul> <li>实例1</li> </ul> <p>新建 shell 脚本 <code>t1.sh</code> ,内容如下</p> <pre><code>#!/bin/bash a=98 echo "$a" echo '$a' </code></pre> <p>执行 <code>./t1.sh</code> 命令,结果如下</p> <pre><code>[root@localhost quotes_test]# ./t1.sh 98 $a </code></pre> <p>从结果可以看出,双引号中的 <strong>$a</strong> 被解释为变量 <strong>a</strong> 的值</p> <p>但是单引号中的 <strong>$a</strong> 只是原样输出,单引号不会解释其中的 <strong>$</strong> 以及 <strong>a</strong> 字符</p> <ul> <li>实例2</li> </ul> <p><img alt="" src="https://pic.imgdb.cn/item/61653d932ab3f51d91e118a8.png" /></p> <p>双引号中的 <strong>\n</strong> 会被转义成换行符 <strong>\n</strong>,但在单引号内, <strong>\n</strong> 被当成普通字符与同一行的其他字符一起显示</p> <ul> <li>实例3</li> </ul> <p>新建 shell 脚本 <code>t2.sh</code>, 内容如下</p> <pre><code>#!/bin/bash ary[0]=8 echo "${ary[0]}" echo '${ary[0]}' </code></pre> <p>执行脚本,结果如下</p> <pre><code>[root@localhost quotes_test]# ./t2.sh 8 ${ary[0]} </code></pre> <p>从结果可以看出,当 ${ary[0]} 用双引号括起来时,表示数组的第一个元素,所以输出 <code>8</code></p> <p>但是,被单引号括起来时,被当做单纯的字符输出,并不会解释为数组的第一个元素</p> <ul> <li>实例4</li> </ul> <p>新建 shell 脚本 <code>t3.sh</code>, 内容如下</p> <pre><code>#!/bin/bash a=45 echo "'$a'" echo '"$a"' </code></pre> <p>执行脚本,结果如下</p> <pre><code>[root@localhost quotes_test]# ./t3.sh '45' "$a" </code></pre> <p>由上面的结果可知,单引号在双引号内没有特殊的含义,因此,即使 <strong>$a</strong> 在单引号内,也还是会解释成 <code>45</code></p> <p>但是,当双引号在单引号内时,即使 <strong>$a</strong> 位于双引号内,也不会对变量 <strong>a</strong> 求值, 还是按照普通字符输出</p> <ul> <li>实例5</li> </ul> <p>新建 shell 脚本 <code>t4.sh</code>, 内容如下</p> <pre><code>#!/bin/bash a=" $(printf hello) " # 相当于 " hello " b=' $(printf hello) ' # 相当于 ' hello` ‘
echo $a
echo $b

执行脚本,结果如下

[root@localhost quotes_test]# ./t4.sh
hello
$(printf hello)

从结果可以知道,双引号中的 $(printf hello) 会被解释成 printf hello 命令,执行 echo $a 命令相当于执行了 printf hello , 结果输出 hello

单引号中的 $(printf hello) ,只是表示普通字符而已,所以 echo $b 命令的结果是 $(printf hello) 字符的原样输出

小结

本文介绍了 shell 中单引号和双引号的区别,主要是通过实例的方式来展示他们之间的不同点,熟悉了它们的不同点后,在编写 shell 脚本过程中,就不会在单双引号上出错了

Original: https://www.cnblogs.com/wanng/p/shell-double-quotes.html
Author: Linux开发那些事儿
Title: 终于知道 Shell 中单引号双引号的区别了

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607471/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 实验一 密码引擎-3-电子钥匙功能测试

    任务详情 1 解压”龙脉密码钥匙驱动实例工具等”压缩包2 在Ubuntu中运行 “龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf…

    Linux 2023年6月8日
    0135
  • 模板层

    过滤器 语法结构 {{ 数据对象|过滤器名称:参数 }} 过滤器最多只能额外传输一个参数 常见过滤器 标签 注意事项 在django模板语法中写标签的时候,只需要写关键字然后tab…

    Linux 2023年6月7日
    0128
  • Python的偏函数(Partial Function Application)

    这个概念说实话以前听过,但没深究过,也没用到过…但是被人问到了,就查来记录一下。 查下资料,发现这个东西说白了就是:部分参数有默认值的函数,Orz。再回过头来看他的英文…

    Linux 2023年6月8日
    0133
  • 一文聊透 Netty 核心引擎 Reactor 的运转架构

    本系列Netty源码解析文章基于 4.1.56.Final版本 本文笔者来为大家介绍下Netty的核心引擎Reactor的运转架构,希望通过本文的介绍能够让大家对Reactor是如…

    Linux 2023年6月6日
    0118
  • 深入分析JVM执行引擎

    程序和机器沟通的桥梁 一、闲聊 相信很多朋友在出国旅游,或者与外国友人沟通的过程中,都会遇到语言不通的烦恼。这时候我们就需要掌握对应的外语或者拥有一部翻译机。而笔者只会中文,所以需…

    Linux 2023年6月14日
    0137
  • Mysql数据库语言学习的路线

    对于我们数据库的学习,不管是测试人员还是开发人员以及我们的DBA来说重点都是SQL;但是我们的SQL可以分多少类型,学习重点又是在哪里呢,本文仅仅针对测试人员来展开说明: SQL:…

    Linux 2023年6月14日
    0122
  • jmeter 安装与环境变量配置

    安装jmeter首先要安装与jmeter版本兼容的JDK,安装完成JDK后才能安装jmeter,JDK可以自行在官网下载或者通过360软件管家进行下载。 1、下载安装JDK 安装完…

    Linux 2023年6月8日
    0132
  • 操作系统实现-进入内核

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这一次我们正式进入内核,编写相关的内核代码,也就是kernel代码 数据类…

    Linux 2023年6月13日
    0142
  • ​Linux知识点总结(内附思维导图,建议收藏)

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0143
  • JuiceFS 在多云存储架构中的应用| 深势科技分享

    2020 年末,谷歌旗下 DeepMind 研发的 AI 程序 AlphaFold2 在国际蛋白质结构预测竞赛上取得惊人的准确度,使得” AI 预测蛋白质结构&#822…

    Linux 2023年6月14日
    0105
  • Linux防火墙——iptables简介

    一、防火墙相关概念 这里描述了一些相关的概念。 [En] Some related concepts are described here. 从逻辑上讲,防火墙可以分为主机防火墙和…

    Linux 2023年5月27日
    0167
  • Centos8.x yum 源配置 解决 yum 不可用

    [root@iZ2ze1e3u7m7oe426pyndaa ~]# cd /etc/yum.repos.d/ [root@iZ2ze1e3u7m7oe426pyndaa yum.r…

    Linux 2023年6月7日
    0160
  • Java 求解自幂数(水仙花数)

    什么是自幂数 如果在一个固定的进制中,一个 n 位自然数等于自身各个数位上数字的 n 次幂之和,则称此数为自幂数。 例如:在十进制中,153 是一个三位数,各个数位的3次幂之和为 …

    Linux 2023年6月6日
    0144
  • POJ1322Chocolate–概论DP

    每次从包装中取出一块巧克力并放在桌子上。如果桌子上有两个相同颜色的巧克力,则将这两个丢掉。如果包中有C种颜色的巧克力(颜色均匀分布),从包装中取出N个巧克力后,桌子上确实有M个巧克…

    Linux 2023年6月7日
    0167
  • Android系统中有哪些日志信息和工具

    Android系统日志和工具 我们经常需要查看设备里面的各种日志信息。所以有必要了解android系统里面有哪些日志,以及用什么方式可以提取这些日志。以我手头的红米note4xpl…

    Linux 2023年6月7日
    0130
  • 【转】windows下Redis的安装和使用

    2、在下载网页中,找到最后发行的版本(此处是3.2.100)。找到Redis-x64-3.2.100.msi和Redis-x64-3.2.100.zip,点击下载。这里说明一下,第…

    Linux 2023年5月28日
    0120
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球