awk中单双引号的区别
单双引号为啥不一样呢
之前我在给生信技能树的生信入门12期学员讲课时没有给大家展开仔细讲这个单双引号的区别, 只在最后一节课讲自定义变量的时候提了一下:
**当我定义一个$a为gene时, 用单引号和双引号扩起来分别echo出来, 会发现单引号里$a就是本体,
而双引号里的$a则会被解释(扩展)为对应的变量内容.**
举个例子
当时给出的解释是:
单引号:变量不会被解释undefined 双引号:变量被解释
在awk的部分没有具体讲是因为这事儿太细致了, 只要当作这是一种“固定用法”, 养成习惯 最外层用单引号 而 内层用双引号 就完事儿了,
就能避免绝大多数情况下的错误.
那既然现在有人提问了, 那就再解释一下.
在中文世界里找了一圈, 不太有合适的解释帖子. 于是就到英文世界里去搜了一圈, 找到下面两个链接:
- Why does using double quotes to enclose awk's action statements produce different results than when using single quotes to enclose them?
- 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
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十