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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
有人问:
        echo `echo \\\\\\\w`        echo $(echo \\\\\\\w)        为什么输出的不一样?
这就引申出了另一个问题:反引号与$()有没有区别?
这是一个非常有意思的问题,但要解释这个问题确比较困难,我来换一个简单一点的例子,通俗的解释一下。
比如我们有一个shell脚本名为test.sh有一下两行
/ {1 w! V: o) }# y* T( S4 s
; J) P/ X! E0 Y4 }/ r6 I
) H4 G9 {: [/ O7 r/ O' d
1) @* s& T1 E+ X: O3 ^# X
2
3 k5 y/ |0 g8 O5 R
echo  `echo \$HOSTNAME`     //反引号
. W5 F) S5 \9 {& H! u9 G8 ~/ \echo $(echo \$HOSTNAME)    //$()
, f' Z, C( F$ \5 ^, P: ?# G; D$ O& l
5 S3 C- H5 \* o
  我们可以使用sh -x test.sh来分析bash是如何来解释这个脚本的,返回的信息如下:
  通过上图我们可以得出两个结论:
  • 反引号中\$并没有将$的特殊意义转换 反引号包含的内容 echo \$hostname 仍然被解释为一个echo $HOSTNAME 取到了这个变量的值并输出所以反引号返回的值为 CentOS-1
  • $()则正好相反,$明显被\转义成了一个普通字符,所以并没有取到变量值,而是返回了字符串本身的意思,故而返回了$HOSTNAME
    ( t! u4 J- m# X2 Y! u) f2 H& d( I
  这说明反引号对反斜杠(\)有特殊的转化,至少我们看到当我们直接用1个\时,它本身并不会起到转义的作用。现在我们将脚本的内容做一些修改:
1
  `. m! Y' j8 o2& S+ \2 q7 t, u* B4 h
echo  `echo \\$HOSTNAME`     //反引号- Y9 u8 L! `7 I) Z$ v. V
echo $(echo \\$hostname)    //$()
0 R( n( K9 t# H: H( J  F
$ h" ], x& C- L4 G, |* q$ h' H" k& n
1 V( J) X5 @; z  h1 D* j
游客,如果您要查看本帖隐藏内容请回复

' Z6 U1 p( Y- R1 s3 ?! s: s% P1 M# Z+ m, u

! X" N  K" \+ V& x4 V

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 23:14 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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