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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

( \5 q) H% T9 B$ @7 k# i. x
. l# F8 R9 ?5 d6 W2 p( n; J7 y: f# E# K& L
1( c3 F4 C" I6 V; [6 F
2
7 p% M+ J$ r1 v7 A, v
echo  `echo \$HOSTNAME`     //反引号
0 U$ d; y6 I; G* J$ ^& `! v6 oecho $(echo \$HOSTNAME)    //$()
! D; A! m) f2 `$ \/ ?: H3 S5 T" A# W3 z! D+ F

; u7 t0 C1 H/ O
  我们可以使用sh -x test.sh来分析bash是如何来解释这个脚本的,返回的信息如下:
  通过上图我们可以得出两个结论:
  • 反引号中\$并没有将$的特殊意义转换 反引号包含的内容 echo \$hostname 仍然被解释为一个echo $HOSTNAME 取到了这个变量的值并输出所以反引号返回的值为 CentOS-1
  • $()则正好相反,$明显被\转义成了一个普通字符,所以并没有取到变量值,而是返回了字符串本身的意思,故而返回了$HOSTNAME
    ; W" j5 ^  w! U9 ?3 `4 {; O
  这说明反引号对反斜杠(\)有特殊的转化,至少我们看到当我们直接用1个\时,它本身并不会起到转义的作用。现在我们将脚本的内容做一些修改:
1
  s% o- n; f8 x2
. c% G, z4 _6 t, a0 g7 m5 a9 ~) l
echo  `echo \\$HOSTNAME`     //反引号/ \: d$ C; y8 }7 b! Z* K
echo $(echo \\$hostname)    //$()
9 c2 ~' y+ \! A) ^
' o) v% V/ N2 S8 c' r4 r

5 e3 U4 S& C' {( ]( R% l" m& B2 z) g
游客,如果您要查看本帖隐藏内容请回复

% c/ W. h/ p9 k- W# H6 N/ b( V% i0 |+ c7 q. r$ {& y; Y  J. f

- r# X* G0 L: w; Q/ |" v/ q

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 00:24 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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