美文网首页
「Linux基础」awk中单双引号的区别

「Linux基础」awk中单双引号的区别

作者: 卖萌哥 | 来源:发表于2021-02-19 20:30 被阅读0次

在服务器共享群里有个朋友贴了下面这张图并艾特了我问: 萌老师, 为啥awk在使用单双引号时结果会不一样呢?
在这张图里, 当awk的最外层使用双引号时, 命令没有任何的返回结果, 但当把双引号替换成单引号的时候, 就能正常返回结果了. 这是怎么回事呢?

单双引号为啥不一样呢

之前我在给生信技能树的生信入门12期学员讲课时没有给大家展开仔细讲这个单双引号的区别, 只在最后一节课讲自定义变量的时候提了一下:

当我定义一个$a为gene时, 用单引号和双引号扩起来分别echo出来, 会发现单引号里$a就是本体, 而双引号里的$a则会被解释(扩展)为对应的变量内容.

举个例子

当时给出的解释是:

单引号:变量不会被解释
双引号:变量被解释

在awk的部分没有具体讲是因为这事儿太细致了, 只要当作这是一种“固定用法”, 养成习惯最外层用单引号内层用双引号就完事儿了, 就能避免绝大多数情况下的错误.


那既然现在有人提问了, 那就再解释一下.
在中文世界里找了一圈, 不太有合适的解释帖子. 于是就到英文世界里去搜了一圈, 找到下面两个链接:

  1. Why does using double quotes to enclose awk's action statements produce different results than when using single quotes to enclose them?
  2. Shell Quoting Issues

第一个是个问询贴, 第二个是GNU官方的gawk的官方手册.

要说区别的话就是shell和awk对单双引号的处理是不一样的.
在第一个链接的问询贴里有这么一句:

If you use double quotes the $2 gets replaced by the shell before awk is called.

这句话意思就是, 如果你用双引号, shell会在awk处理之前就把$2给展开了, 那么awk识别的时候就出错了, 就得不到你要的结果了. 为了避免这种shell把awk活儿给提前抢了的问题, 最外层用单引号就好了.

回到最前面的截图, 在①中, 因为用了双引号, awk后面的$0先被shell解释了(一般专业词汇应该叫展开, extend). 这时候$0不再是awk里的“所有字段”(代表整个文本行)的含义, 而是一个叫做“$0”的变量(就跟前面举例的$a一样). 这就是为啥最后awk回没有结果的原因.

在②中, 因为使用的单引号, $0不会被shell展开, 其含义仍是awk内的含义.

如果大家对awk比较感兴趣的话, 有一些awk编程相关的书籍可以查询的.
例如介绍sed和awk的书: 《sed与awk》或者是《awk programming》

sed与awk
awk programming

相关文章

  • 「Linux基础」awk中单双引号的区别

    在服务器共享群里有个朋友贴了下面这张图并艾特了我问: 萌老师, 为啥awk在使用单双引号时结果会不一样呢?在这张图...

  • 05-字符串使用基础

    python中,单双引号没有区别,表示一样的含义

  • php中单双引号的区别

    关于单引号和双引号的区别和效率问题。了解的不是很清楚,一直以为PHP中单引号和双引号是互通的,直到有一天,发现单引...

  • Linux

    linux awk命令详解、linux awk命令Linux常用操作指令Linux netstat命令详解 awk...

  • 06-字符串基础

    前面我们已经提过,python对单双引号无区别,但单引号或双引号可以相互转义

  • 2019-03-18

    ①XML中字符的转义(解决单双引号、大于小于等问题)、XML与HTML的区别 https://blog.csdn....

  • Linux Shell:awk文本处理工具,Linux的SQL神

    摘要:Linux,Shell,awk awk简介 awk是一个强大的文本分析工具,尤其是对linux中的结构化二维...

  • linux三剑客awk教你如何裁剪结果集

    awk awk在Linux中我们称之为输出。在Linux的终端上所有的东西我们都可以用awk来输出赋值。 首先我们...

  • awk的用法

    一、awk命令用法 在Linux中,awk 即 gawk , awk的二进制文件为gawk的链接文件; ...

  • linux中awk的复习

    awk使用格式:awk [选项参数] '内容' '{条件} {动作} {条件} {动作}' 示例1:在linux中...

网友评论

      本文标题:「Linux基础」awk中单双引号的区别

      本文链接:https://www.haomeiwen.com/subject/qbtzxltx.html