Shell中` `与$()的区别
今天有人提问:
echo `echo \\\\\\\w`
echo $(echo \\\\\\\w)
为什么输出的不一样?
这就引申出了另一个问题:反引号(`)与$()有没有区别?
这是一个非常有意思的问题,但要解释这个问题确比较困难,我来换一个简单一点的例子,通俗的解释一下。
比如我们有一个shell脚本名为test.sh有以下两行
echo `echo \$HOSTNAME` //反引号
echo $(echo \$HOSTNAME) //$()
我们可以使用sh -x test.sh来分析bash是如何来解释这个脚本的,返回的信息如下:
通过上图我们可以得出两个结论:
反引号中\$并没有将$的特殊意义转换,反引号包含的内容 echo \$hostname 仍然被解释为一个echo $HOSTNAME 取到了这个变量的值并输出,所以反引号返回的值为 CentOS-1。$()则正好相反,$明显被\转义成了一个普通字符,所以并没有取到变量值,而是返回了字符串本身的意思,故而返回了$HOSTNAME。这说明反引号对反斜杠(\)有特殊的转化,至少我们看到当我们直接用1个\时,它本身并不会起到转义的作用。现在我们将脚本的内容做一些修改:
echo `echo \\$HOSTNAME` //反引号
echo $(echo \\$hostname) //$()
我们又多加了1个反斜杠,这次我们来看输出的情况:
这次看起来似乎反转了:
反引号反而输出了$HOSTNAME的字面意思,$()如我们所愿的取到了变量值,并理所应当的输出了一个被转义的字符串\。
我们再来做一个实验,再建立一个脚本名为a.sh:
echo `echo \\\\ `
echo $(echo \\\\ )
注意:最后一个反引号和)的前面都有一个空格,否则最后一个反引号和)都将被注释,不会被当做结束的替换符号。
使用sh -x a.sh的结果如下:
通过上图我们可以看到:
反引号中4个\被输出为1个\,$()中4个\被输出为2个\。
我们将脚本修改为8个\:
echo `echo \\\\\\\\ `
echo $(echo \\\\\\\\ )
再看输出:
由此,我们可以得出结论:
反引号齐本身就对\进行了转义,保留了其本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。
所以我们可以简单的想象成反引号中: \\ = \
$()中则不需要考虑\的问题,与我们平常使用的一样:\ = \。
Shell中` `与$()的区别相关推荐
- linux shell中'',和``的区别
`` :反引号,获取执行命令的结果 打印日期: echo `date` --> 输出 2017年12月 8日 星期五 11时59分48秒 CST '' : 去掉 所有符号的特殊含义. &quo ...
- shell中$*和$@的区别
$*和$@都表示传递给参数或者脚本全部参数 当$*和$@不加双引号时,两者没有任何区别,都表示将接收到的每一个参数当做每一份数据,每个参数之间用空格来分开 当$*和$@加上双引号,则两者就存在一下区别 ...
- linux脚本中的exit,Shell中exit和return的区别讲解
1.exit命令 exit命令是Shell内建命令,用于退出当前Shell进程.使用格式如下: exit [] 可以指定退出状态n,n的取值范围是0-255,一般情况下,0表示正常退出,非零表示异常退 ...
- linux shell中./a.sh , sh a.sh , source a.sh, . ./a.sh的区别
在linux shell中, 执行shell script的方式有多种, 有什么区别呢? 现在用一个简单例子再来说下. a.sh的内容是: #! /bin/bash echo hello world ...
- shell中if条件字符串、数字比对,[[ ]]和[ ]区别
原文:https://www.cnblogs.com/include/archive/2011/12/09/2307905.html shell括号 学习shell的时候总是被shell里的条件判断方 ...
- Shell 中 exit 和 return 的区别
1.exit 命令 exit 命令是 Shell 内建命令,用于退出当前 Shell 进程.使用格式如下: exit [N] 可以指定退出状态 N,N 的取值范围是 0-255,一般情况下,0 表示正 ...
- shell中if条件字符串、数字比对,` `和[ ]区别
引用: http://www.51testing.com/?uid-7701-action-viewspace-itemid-13731 http://blog.csdn.net/sunboy_205 ...
- linux系统下的shell是什么,Linux系统中shell各命令的区别有什么?
今天小编要跟大家分享的文章是关于Linux系统中shell各命令的区别有什么?喜欢Linux系统并对此感兴趣的小伙伴们快来一起看一看吧~希望对你有所帮助. 1.xargs作用: (1)将前一个命令的标 ...
- Shell中 单引号(‘‘) 双引号(““) 反引号(``) $() 的区别
字符串与引号 Shell 的模型就是标准的字符流过滤器模型,简单来说,就是一条命令把结果送到标准 输出,这个标准输出被连接到下一个命令的标准输入,由此来实现一系列命令之间的联动. 每一个命令的输出都是 ...
最新文章
- javascript 数组json按键排序
- c#中using 和new
- mysql8.0 linux 安装
- Office 2013和Office 365应用程序对电脑和移动操作系统支持情况分析
- 数学建模国赛-2015A太阳影子定位再研究(未完)
- Qt学习之Qt基础入门(上)
- 我的 2019 年 - 当勤精进,但念无常,何以解忧,唯有暴富
- excel部分网格线不见了_excel打印技巧(八)
- 25款国外优秀大气的UI界面设计欣赏
- Android notes
- 骨传导耳机有什么优缺点,骨传导耳机好用吗
- [转载] MATLAB快捷键
- 怎么解log方程_对数方程的解法
- Go语言案例(一)音乐播放器
- JavaSE——柏羲
- 如何导出Kindle中的电子书
- Java jdk 环境配置
- HTML5画布Canvas线段、矩形、弧形及贝塞尔曲线等简单图形绘制
- java强制转换为string_toString() 和 强制类型转换 (String)
- CH32V103_MG996R 舵机驱动