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

大家都在看

  • 关于.NET CORE 编译时错误:Microsoft.AspNetCore.Razor.Design.CodeGeneration.targets(79, 5): The project XXXXX must provide a value for Configuration.

    此笔记记载了本人在编译.Net Core项目时遇到的 Microsoft.AspNetCore.Razor.Design.CodeGeneration.targets(79, 5)…

    Linux 2023年6月14日
    0111
  • Ubuntu18.04 显卡驱动安装(解决各种疑难杂症)

    步骤 下载驱动 准备工作 进行安装 检查安装 下载驱动 首先,我们需要从官网下载显卡驱动。 [En] First of all, we need to download the v…

    Linux 2023年5月27日
    0101
  • redis好书推荐

    redis好书推荐原创amy_xing01 最后发布于2018-07-16 18:29:54 阅读数 10427 收藏展开Redis从入门到深入学习,推荐几本好书: 《Redis入…

    Linux 2023年5月28日
    095
  • CTF竞赛权威指南(PWN篇)下载地址

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这里给大家提供《CTF竞赛权威指南(PWN篇)》的下载地址(不是网上的64…

    Linux 2023年6月13日
    096
  • Linux的文件结构和基本分类

    (注:此笔记默认操作系统为centOS7) Windows下的文件都是以盘符开头的,Linux中没有盘符,所有文件都在根目录下。 cd /进入根目录 ls /显示根目录下的文件查看…

    Linux 2023年6月7日
    095
  • 离线版centos8环境部署迁移监控操作笔记

    嗨咯,前两天总结记录了离线版centos8下docker的部署笔记,今天正好是2021年的最后一天,今天正好坐在本次出差回家的列车上,车上没有上面事做,索性不如把本次离线版cent…

    Linux 2023年6月14日
    0106
  • Haproxy

    Haproxy Haproxy haproxy简介 负载均衡 Haproxy搭建http负载均衡 lvnanhai、RS1、RS2都关闭防火墙和selinux RS1和RS2部署h…

    Linux 2023年6月6日
    0100
  • flask的使用

    python网站开发框架: django:大而全 flask:小而精 flask的web服务器:werkzeug 模板语法: jinjia2,兼容dtl 登录案例: from fl…

    Linux 2023年6月14日
    0102
  • centos快速搭建nfs共享

    一、nfs服务器端 01.安装nfs服务 yum -y install nfs-utils 02.创建存储目录 mkdir -p /data/2haohr_backup 03.设置…

    Linux 2023年6月6日
    0111
  • .NET 20 周年

    更多请移步:https://dotnet.microsoft.com/zh-cn/ 作者:猫叔Vincent 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,…

    Linux 2023年6月13日
    0144
  • PWN学习总结

    一、栈溢出原理 什么是栈溢出?栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分…

    Linux 2023年6月8日
    097
  • OSI模型 TCP/IP协议

    系统中每打开一个程序,系统会自动分配一个端口号(0~65535) 端口号:来区分应用程序 网络层:传给哪台主机 加入ip地址(源发出去的地址 目:目的地址)选路 数据链路层:mac…

    Linux 2023年6月6日
    097
  • Hystrix 源码解读

    转载请注明出处: 1.引入依赖: 2. 查看自动配置类HystrixCircuitBreakerConfiguration 查看 org.springframework.cloud…

    Linux 2023年6月14日
    0101
  • LVS 负载均衡集群

    1.1 LVS介绍 LVS 是 Linux Virtual Server 的简写,即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。此项目在 1998 年 5 月由章文嵩博士…

    Linux 2023年6月6日
    094
  • Linux常用命令总结

    Linux常用命令总结 关机 & 重启&注销 常用命令 作用 shutdown -h now 即刻关机 shutdown -h 5 5分钟后关机 shutdown …

    Linux 2023年6月7日
    0101
  • pod(二):创建包含多个容器的pod(sidecar)

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

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