今天有人提问:

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中` `与$()的区别相关推荐

  1. linux shell中'',和``的区别

    `` :反引号,获取执行命令的结果  打印日期: echo `date` --> 输出 2017年12月 8日 星期五 11时59分48秒 CST '' : 去掉 所有符号的特殊含义. &quo ...

  2. shell中$*和$@的区别

    $*和$@都表示传递给参数或者脚本全部参数 当$*和$@不加双引号时,两者没有任何区别,都表示将接收到的每一个参数当做每一份数据,每个参数之间用空格来分开 当$*和$@加上双引号,则两者就存在一下区别 ...

  3. linux脚本中的exit,Shell中exit和return的区别讲解

    1.exit命令 exit命令是Shell内建命令,用于退出当前Shell进程.使用格式如下: exit [] 可以指定退出状态n,n的取值范围是0-255,一般情况下,0表示正常退出,非零表示异常退 ...

  4. linux shell中./a.sh , sh a.sh , source a.sh, . ./a.sh的区别

    在linux shell中, 执行shell script的方式有多种, 有什么区别呢? 现在用一个简单例子再来说下. a.sh的内容是: #! /bin/bash echo hello world ...

  5. shell中if条件字符串、数字比对,[[ ]]和[ ]区别

    原文:https://www.cnblogs.com/include/archive/2011/12/09/2307905.html shell括号 学习shell的时候总是被shell里的条件判断方 ...

  6. Shell 中 exit 和 return 的区别

    1.exit 命令 exit 命令是 Shell 内建命令,用于退出当前 Shell 进程.使用格式如下: exit [N] 可以指定退出状态 N,N 的取值范围是 0-255,一般情况下,0 表示正 ...

  7. shell中if条件字符串、数字比对,` `和[ ]区别

    引用: http://www.51testing.com/?uid-7701-action-viewspace-itemid-13731 http://blog.csdn.net/sunboy_205 ...

  8. linux系统下的shell是什么,Linux系统中shell各命令的区别有什么?

    今天小编要跟大家分享的文章是关于Linux系统中shell各命令的区别有什么?喜欢Linux系统并对此感兴趣的小伙伴们快来一起看一看吧~希望对你有所帮助. 1.xargs作用: (1)将前一个命令的标 ...

  9. Shell中 单引号(‘‘) 双引号(““) 反引号(``) $() 的区别

    字符串与引号 Shell 的模型就是标准的字符流过滤器模型,简单来说,就是一条命令把结果送到标准 输出,这个标准输出被连接到下一个命令的标准输入,由此来实现一系列命令之间的联动. 每一个命令的输出都是 ...

最新文章

  1. javascript 数组json按键排序
  2. c#中using 和new
  3. mysql8.0 linux 安装
  4. Office 2013和Office 365应用程序对电脑和移动操作系统支持情况分析
  5. 数学建模国赛-2015A太阳影子定位再研究(未完)
  6. Qt学习之Qt基础入门(上)
  7. 我的 2019 年 - 当勤精进,但念无常,何以解忧,唯有暴富
  8. excel部分网格线不见了_excel打印技巧(八)
  9. 25款国外优秀大气的UI界面设计欣赏
  10. Android notes
  11. 骨传导耳机有什么优缺点,骨传导耳机好用吗
  12. [转载] MATLAB快捷键
  13. 怎么解log方程_对数方程的解法
  14. Go语言案例(一)音乐播放器
  15. JavaSE——柏羲
  16. 如何导出Kindle中的电子书
  17. Java jdk 环境配置
  18. HTML5画布Canvas线段、矩形、弧形及贝塞尔曲线等简单图形绘制
  19. java强制转换为string_toString() 和 强制类型转换 (String)
  20. CH32V103_MG996R 舵机驱动

热门文章

  1. 蓝牙耳机比较好用的五个品牌品牌推荐
  2. 读懂盘口语言--空间、时间与期价运动关系
  3. 进击高手【第十期】树
  4. 通达OA工作流数据报表二次开发版
  5. 通达OA 小飞鱼关于OA工作流实施应用过程中设计规范的建议
  6. 数论之因子个数的求法
  7. 计算机线性回归实验报告,实验二 一元线性回归模型的估计、检验、预测和应用-学生实验报告...
  8. java把字符转化为整型_Java开发笔记(三十二)字符型与整型相互转化
  9. 淘淘商城第91讲——SSO系统分析
  10. 查询MySQL的serverId