找回密码
 注册
关于网站域名变更的通知
查看: 370|回复: 1
打印 上一主题 下一主题

Linux——Shell中反引号(`)与$()用法的区别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-8-9 14:48 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
有人问:
        echo `echo \\\\\\\w`        echo $(echo \\\\\\\w)        为什么输出的不一样?
这就引申出了另一个问题:反引号与$()有没有区别?
这是一个非常有意思的问题,但要解释这个问题确比较困难,我来换一个简单一点的例子,通俗的解释一下。
比如我们有一个shell脚本名为test.sh有一下两行

8 y; j0 W6 h7 i& i) t3 s: g9 l/ R- w) ?; z8 k* `* @. s
6 P6 L! B  n# i0 [- c9 g
1
# F  c  |* m6 }6 M8 v2 v2! b( }  N/ r+ ?# L* T! x: Y* u
echo  `echo \$HOSTNAME`     //反引号
0 E- q* U- v" r3 I6 P4 \: [' Wecho $(echo \$HOSTNAME)    //$()2 x% B) S  Z/ f1 S- W
( @/ F0 Y1 `9 V- v1 d/ I( d* C) V( H

* K" n: t) q, T
  我们可以使用sh -x test.sh来分析bash是如何来解释这个脚本的,返回的信息如下:
  通过上图我们可以得出两个结论:
  • 反引号中\$并没有将$的特殊意义转换 反引号包含的内容 echo \$hostname 仍然被解释为一个echo $HOSTNAME 取到了这个变量的值并输出所以反引号返回的值为 CentOS-1
  • $()则正好相反,$明显被\转义成了一个普通字符,所以并没有取到变量值,而是返回了字符串本身的意思,故而返回了$HOSTNAME
    3 K* _" X' t5 q4 T8 _& i
  这说明反引号对反斜杠(\)有特殊的转化,至少我们看到当我们直接用1个\时,它本身并不会起到转义的作用。现在我们将脚本的内容做一些修改:
1
2 `' ]! P: d+ G2
1 v0 B* d1 [6 Y
echo  `echo \\$HOSTNAME`     //反引号
$ O& B% y! b5 O6 _7 ?echo $(echo \\$hostname)    //$()7 U! R) _9 w9 ?

( {; V9 W( X* X8 m

; x( D! v& m. C2 o: `, l
游客,如果您要查看本帖隐藏内容请回复

2 ^- r! V$ a. Z7 @- |# |$ l0 `5 y) m4 O) I% q! C8 _0 d5 v! D
6 w. U: s! J* P2 S: a% b  a

该用户从未签到

2#
发表于 2019-8-9 17:50 | 只看该作者
Shell中反引号(`)与$()用法的区别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 00:06 , Processed in 0.218750 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表