Shell脚本之反引号【``】和 $()
一、奇怪的返回
今天在搞监控的时候,修改一个老脚本,主要是通过对操作系统进行判断来获取不同的监控参数。(获取top参数在不同操作系统上也有个坑,会在另外一篇里面写)
脚本如下,非常简单:
#处理Centos7采集磁盘使用率问题 os_version=`cat /etc/issue|grep -w "\\\S"|wc -l` if [ $os_version -eq 1 ];thenecho $os_version elseecho 'aaa' fi
本来逻辑和语法都非常简单,没想到结果却出人意料。
我只是希望通过issue判断系统是否为centos7,如果是,则输入\S;如果不是,则输出‘aaa’.
但是发现不管是在centos7还是centos6上,结果都是输出aaa。
Centos7上:
Centos6上:
那到底是什么原因呢?
二、真相--反引号``惹的祸
经过-x输出查看,发现结果都是出乎意料的2。因为结果是全部匹配,所以沉思许久还是不得其解。而且我也考虑到了特殊符号的转义问题,那又是还有其他什么问题呢?
因为在shell中执行命令并赋值给变量有两种方式,另外一种方式是用$(),例如a=$(cat /etc/issue).那就用第二种方式测试一下吧。
1、将脚本修改:
os_version=$(cat /etc/issue|grep -w "\\\S"|wc -l) #修改成$()方式 if [ $os_version -eq 1 ];thenecho $os_version elseecho 'aaa' fi
2、在不同环境测试,发现结果正确了!
看来问题就出在反引号上!
三、解决
既然知道了是反引号的问题,解决办法就有了。我们先测试一下:
已经毫无疑问了,正是反引号的问题。那么反引号和$()有什么区别呢?
发现使用反引号时,需要将转义符再次进行转义!!
四、总结
从上面整个过程我们可以看出:
在shell脚本中使用反引号时,他本身就对\做了一层转义,如果你有需要匹配的\的情况的话,需要再次进行转义。所以在反引号中,两个转义符才是进行转义!
$()中则不需要考虑\的问题,与我们平常使用的一样:\ = \。且自己转义后,他还是识别转义符。
- 反引号是老的用法,$()是新的用法,我们推荐使用$()。
转载于:https://www.cnblogs.com/skyflask/p/7742208.html
Shell脚本之反引号【``】和 $()相关推荐
- Linux--Linux Shell 中的反引号,单引号,双引号
反引号位 (`) 位于键盘的Tab键的上方.1键的左方.注意与单引号(')位于Enter键的左方的区别. 在Linux中起着命令替换的作用.命令替换是指shell能够将一个命令的标准输出插在一个命令行 ...
- Shel脚本学习—反引号、单引号、双引号区别与联系
反引号 反引号位 (`) 位于键盘的Tab键的上方.1键的左方.注意与单引号(')位于Enter键的左方的区别. 在Linux中起着命令替换的作用.命令替换是指shell能够将一个命令的标准输出插在一 ...
- shell 脚本中双引号、单引号、反引号的区别,其他命令
如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果; Android中会定义某个变量等于@,例如 hide:= @ 通常make执行的命令如果出错(该命令的退出状态非0)就立刻终止 ...
- Shell脚本中 双引号(“”)单引号(‘’)反引号(``)的区别
1.由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释. 2.由双引号括起来的字符,除$(美元符号).\(反斜杠).'(单引号).和" ...
- Bash 脚本:`(反引号)运算符和 $()的使用方式
` 反引号操作符可以在 shell 脚本中使用,因为它很容易与其他命令结合使用.但是,还有一种更"推荐"的方式来做同样的事情,使用$()运算符.本文将介绍在 shell 脚本中使用 ...
- shell脚本--三种引号的区别
shell脚本中,三种引号分别为:单引号(''),双引号(""),反引号(``),反引号就是键盘esc下面的那个键. (1) 单引号:在单引号之间的内容,是不会被解析的,会原样输出 ...
- Linux shell脚本中单双引号的区别
- shell脚本中单引号和双引号
shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符.单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号.(注意是所有,只是单引 ...
- shell中单引号、双引号、反引号、反斜杠的使用
shell可以识别4种不同类型的引字符号: 单引号字符('') 双引号字符("") 反斜杠字符(\) 反引号字符也就是ESC下方的键(`) 1. 单引号 ( '' ) :当shel ...
最新文章
- jQuery源码解析对象实例化与jQuery原型及整体构建模型分析(一)
- centos oracle命令,CentOS7命令行方式搭建Oracle11gR2
- Spring5源码 - 02 Bean和Java对象的区别与猜想验证BeanDefinition
- Object类toString()和equals()方法剖析
- 流水线技术在高速数字电路设计中的应用
- 实战!阿里神器 Seata 实现 TCC模式 解决分布式事务,真香!
- 【报告分享】2020中国248家独角兽报告.pdf(附下载链接)
- 甲骨文超 IBM 成全球第二大软件公司
- 联想电脑硬盘保护系统EDU8.0.1iso安装
- CPU使用率和负载Load计算方法
- 如何将heic格式转化jpg?
- python云计算有哪些岗位_云计算就业前景怎么样,包括哪些岗位,各岗位主要工作是什么?...
- 方阵平方等于自身,这个方阵的特征值
- 怎么简化学生入校查询健康码和测温的流程-校园健康码查询平台,校园安防平台,家校互动平台
- 关于未将对象引用设置到对象实例简单原理分析,与解决方法
- Windows 11 22H2 (KB5017321) 更新失败并显示下载错误 0x800F0806
- 基于C语言的网络电子词典
- 支付宝自动跳入转账页面
- git执行任何操作都特别慢,怎么解决?
- salmon:sailfish的升级版本
热门文章
- 计算机系统概论寻址空间,自考《计算机系统结构》重点知识概论:数据表示(二)...
- java graphics 类_对于 Graphics 类的一点认识(转)
- laravel的composer require报错:Installation failed, reverting ./composer.json to its original content.
- 【C++ STL】vector库使用方法
- 【深度学习】带有 CRF-RNN 层的 U-Net模型
- 【深度学习】讲一个深度分离卷积结构和空洞卷积的应用
- git和github的关系
- linux无法运行病毒,{转}为什么linux系统不容易中病毒?
- 进阶学习(3.7) Flyweight Pattern 享元模式
- 湖南网络推广教大家如何“挽回”网站被降权的排名和权重?