shell中单引号、双引号的区别

2023-11-07

原文地址:http://blog.sina.com.cn/s/blog_5f5716580100l9k1.html

hard quote:单引号,关闭所有的meta(什么是meta,自己查吧)
soft quote:双引号,关闭大部分的meta,但是某些保留,例如$
这里也提一下escape:反斜杠,它只会关闭紧跟escape之后的字符。

参考cu上经典的十三问,hard quote关闭shell的meta,而soft quote关闭大部分的shell meta,但是$例外,对于bash的来说,命令的解释是从左到右的,首先遇到hard quote和soft quote,所作的解释是不一样,看这个例子:
$ a=1
$ echo "$a"
              #$被bash解释到
$ echo "'$a'"
'1'                #hard quote被关闭,但$依旧可用
$ echo '$a'
$a                #$被hard quote关闭
$ echo '"$a"'
"$a"            #所有都被关闭了

如果能够理解上面的了,那基本知道怎么用单引号和双引号了。

而对于awk、ed等等命令,需要区分shell meta和command meta
对于awk来说,它的{ }:是将其内的命令置于non-named function 中执行,awk用{ }来区分命令段,例如BEGIN,END等等。举个例子:
$ awk {print $1} b.txt
awk: line 2: missing } near end of file

看看报错,如果直接使用{ },那么我们知道{ }没有被shell关闭,也就是说它看成shell的meta了,当然报错了,所以要关闭,同时shell中的$也关闭,也就是$需要成为awk的meta了,很好理解吧?如下输出了内容。
awk '{print $1}' b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao
./0/115/qq/.ywt

既然要要关闭{ },那么也可以用soft quote,
awk "{print $0}" b.txt
0
0
0
可以看到,soft quote预期的关闭了{ },但是$还是被shell解释了,这次我们可以用escape,将$关闭了。
$ awk "{print \$0}" b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao
./0/115/qq/.ywt

说到这里,可以大家都一点明白了,并不是awk '{ }' urfile是awk的固定语法,而是为了让awk能够跳脱shell的偷取其命令和参数,看看这个例子就明白了。
$ awk \{print\ \$0\} b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao

所作的一切是为了让awk或者自己的meta,请切记注意print后的空格,也要关闭,要不又被shell解释了。

2. 双引号 ( " " )
双引号作用与单引号类似,区别在于它没有那么严格。单引号告诉shell忽略所有特殊字符,而双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串.

3、. 反斜杠 backslash-escaped( \ )
反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
echo -e "\n"
反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。

BTW

4、$()和``的区别
反引号和$()的功能是命令替换,将反引号或$()中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量
但反引号内不能再引用反引号,而$()中可以引用反引号

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell中单引号、双引号的区别 的相关文章

随机推荐

  • unity 调用 .dll 或 .so时遇到的问题

    1 32位的 dll 无法在64位的unity编辑器下运行 System DllNotFoundException xxx 64位的程序运行32位的dll是会报这种错 2 Failed to load Assets Plugins xxx
  • 个人网站实现微信扫码登录

    个人网站实现微信扫码登录 效果图 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img kzSrNgiv 1685034480658 https img ggball top picGo 动画 gif 开发背景 为什么
  • javascript canvas 模拟mac最小化

    文章是别人写的 不是我自己的 链接忘记了
  • 【用JS自制表格软件玩数据】4. 行列计数器的实现

    渲染单元格 列计数器 原理 步进器 字符的运算表 源码 当写完本系列后 我会把源代码分享出来给大家 本课程也会持续更新与矫正 欢迎留言指正 前面已经设计了一个底层渲染类 现在准备在这个底层类的基础上 构建一个渲染单元格的模块 列计数器 通常
  • 去中心化时代的创作者经济

    所谓创作者经济 具体是指利用各种互联网工具 由个人或团体进行内容创作 分发及一系列与创作者相关服务下产生的经济收益 这一概念也主要在当前的 web2互联网时代 并且有很多鲜明的案例凸显出了创作者经济的强大潜力 像我们熟知的抖音 哔哩哔哩等都
  • android后台获取当前屏幕截图(screencap.cpp修改)

    本文基于android6 0 首先找到screencap在Android源码中的位置 若不清楚 可以通过在android目录下通过命令find namescreencap cpp 本文直接给出路径 android frameworks ba
  • 开源的C++静态分析工具

    开源的C 静态分析工具 Java有一些非常好的 开源的静态分析工具 如FindBugs Checkstyle和PMD 这些工具易于使用 有益于开发 能运行于多种操作系统而且还免费 商业级的C 静态分析工具产品有Klocwork Gimpel
  • Anaconda命令总结

    Anaconda搭建python学习环境 由于最近打算入坑机器学习 发现很多项目都会用到一些相同的包 每次都要到导入太麻烦了 而Anconda中的conda包管理工具可以提供一套通用的环境 可以极大地提高开发效率 本文主要介绍Anacond
  • idea使用sonarqube对项目代码检测

    idea使用sonarqube对项目代码检测 1 sonarqube的安装 参考网上教程安装即可 2 在本地maven配置文件中配置上安装好的sonarqube相关信息
  • linux学习文档

    汇总 链接 http pan baidu com s 1pLk8SSr 密码 p6b6 如有帮助 还请不吝 推荐 1 1 2序和硬件基础 pdf 链接 http pan baidu com s 1kVFjoTh 密码 powh 2 3中断机
  • Ubuntu安装NVIDIA 显卡驱动

    文章目录 前言 一 基本概念 二 操作步骤 1 显卡硬件型号 2 安装驱动 总结 前言 NVIDIA Nvidia Corporation n v di 港称乎为NVIDIA 台湾与香港译为辉达 中国大陆译为英伟达 创立于1993年1月 是
  • 使用JavaScript在水效果中创建动画粒子

    Water simulation with javascript Today we continue JavaScript lessons and our article will about using js in modeling of
  • ES6module

    开发规范 声明式函数应设置为常量 对象尽量静态化 一旦设置不得随意添加新的属性 或者使用Object assign 默认导出一个对象用大驼峰 函数的默认值 function test a b bool false console log b
  • Python 和 Raspberry Pi 基于 Ubuntu Core 实践 ROS 系统

    我们将使用 Ubuntu Core 并在 Raspberry Pi 上安装 Ubuntu Core 使用Python 创建基于 ROS 的工作包和启动文件 Ubutun Core 介绍和安装 Ubuntu Core 是 Ubuntu 的专门
  • JavaSE基础语法之 String 类

    目录 前言 一 常用方法 一 字符串构造 二 String 对象的比较 1 比较是否引用同一个对象 2 boolean equals Object anObject 方法 按照字典序比较 3 int compareTo String str
  • 图的深度优先遍历

    一 图遍历介绍 所谓图的遍历 即是对结点的访问 一个图有那么多个结点 如何遍历这些结点 需要特定策略 一般有两种访问策略 1 深度优先遍历 2 广度优先遍历 二 深度优先遍历基本思想 图的深度优先搜索 Depth First Search
  • hive-sql入门-实践摘记-持续更新

    Hive SQL记录 DQL Data QueryLanguage 只读权限 select DML Data manipulation language 数据操作语句 insert delete update DDL Data Defini
  • 【idea】IDEA全局搜索Jar包中内容(转载)

    转载 https blog csdn net qq 26012495 article details 109694133
  • ChatGPT研究分享:插件模式的利与弊

    目录 1 插件的实现方式 1 1 Toolformer 1 2 OpenAI插件文档 1 3 个人感想 2 一些有意思的点 2 1 知识和价值观 2 2 算法的研究方向 OpenAI近期公开了GPT 4 除了各方面性能的大幅度提升 最大的惊
  • shell中单引号、双引号的区别

    原文地址 http blog sina com cn s blog 5f5716580100l9k1 html hard quote 单引号 关闭所有的meta 什么是meta 自己查吧 soft quote 双引号 关闭大部分的meta