终于知道 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)

大家都在看

  • centos7 设置开机启动任务

    环境:centos7 需求:前两天调通的DNS server(bind/named)设置开机自启动 操作: 修改 /etc/rc.local 注意这个 rc.local 文件默认是…

    Linux 2023年6月6日
    073
  • mac如何安装FinalShell

    1、Mac一键安装脚本: curl -o finalshell_install.sh www.hostbuf.com/downloads/finalshell_install.sh…

    Linux 2023年5月28日
    063
  • Kafka部署安装及简单使用

    一、环境准备 1、jdk 8+ 2、zookeeper 3、kafka 说明:在kafka较新版本中已经集成了zookeeper,所以不用单独安装zookeeper,只需要在kaf…

    Linux 2023年6月13日
    073
  • MySQL——索引结构

    索引:用于快速查找数据。 索引是将数据的一些关键信息通过特定的数据结构存储到一片新的空间中,这样在文件查找的时候能快速找到。 mysql索引类型: B+TREE、HASH、R-TR…

    Linux 2023年6月7日
    076
  • linux下svn定时更新项目

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月20日
    0208
  • Linux查看文件夹大小

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月20日
    0206
  • Jedis和redisTemplate 共用问题–序列化不一致(生产事故->解决->两个redisTemplate)

    Jedis和redisTemplate 共用问题老项目用Jedis,放入redis中,用的是比较老的框架,还进行序列化. 用redisTemplate试了下拿不到.因为序列化的方式…

    Linux 2023年5月28日
    056
  • Linux中添加新硬盘后对硬盘的分区以及挂载

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月20日
    0181
  • linux设备模型及实例

    1.linux设备模型基本概念 BUS(总线):用于关联设备和驱动,代表一个实际的物理总线(如USB、PCI bus)或虚拟总线(如platform bus),总线会提供与总线相关…

    Linux 2023年6月6日
    072
  • 魔域来了H5游戏详细图文架设教程

    前言 想体验热血传奇的战场吗?想体验满级VIP的尊贵吗?想体验榜一大佬的无敌寂寞吗?各种极品炫酷时装、坐骑、翅膀、宠物通通给你,就在魔域来了H5! 本文讲解魔域来了架设教程,想研究…

    Linux 2023年6月7日
    080
  • 大厂们的 redis 集群方案

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年9月14日
    0179
  • js笔记之while循环

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月7日
    0197
  • Windows下 RabbitMQ的安装和配置

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月7日
    0268
  • 多个USB转串口设备区分方法

    当计算机或者其他USB主机上使用多个USB转串口设备时,会遇到多个串口无法与具体的串口设备对应起来的问题,包括更换不同USB端口串口序号发生改变,多个设备USB插拔顺序不同导致串口…

    Linux 2023年6月7日
    044
  • 梳理Linux中断处理子系统

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月13日
    0259
  • linux远程复制/linux远程拷贝/远程上传文件夹 举例

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

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