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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

" a8 y8 `. A/ J8 e
7 ~# T( q  g( X( q" K! C% j( w; E2 t) L2 H# Q6 _
1, r- q( i; [1 f9 U$ ~9 m/ t: Z
28 F' s+ \# N9 f' c2 b
echo  `echo \$HOSTNAME`     //反引号; L6 ~$ w0 F$ X; _
echo $(echo \$HOSTNAME)    //$()
, R* o' Y' T+ E) H$ ^; P
. C* E, [# y5 i4 `0 S* Z3 w/ D
4 [' `1 ~$ y+ ~! k
  我们可以使用sh -x test.sh来分析bash是如何来解释这个脚本的,返回的信息如下:
  通过上图我们可以得出两个结论:
  • 反引号中\$并没有将$的特殊意义转换 反引号包含的内容 echo \$hostname 仍然被解释为一个echo $HOSTNAME 取到了这个变量的值并输出所以反引号返回的值为 CentOS-1
  • $()则正好相反,$明显被\转义成了一个普通字符,所以并没有取到变量值,而是返回了字符串本身的意思,故而返回了$HOSTNAME
    & I9 \7 s' n2 D/ B/ l; n
  这说明反引号对反斜杠(\)有特殊的转化,至少我们看到当我们直接用1个\时,它本身并不会起到转义的作用。现在我们将脚本的内容做一些修改:
1" R/ `, }/ M9 _6 h9 j7 _: F+ R4 ?
2
: d% B) @; C. `: ?
echo  `echo \\$HOSTNAME`     //反引号
2 O1 w; r: H1 |3 C0 fecho $(echo \\$hostname)    //$()
7 G' I$ ?9 Z7 K' l' C1 r
2 P0 t, ]# }- `6 }+ C: ?/ K+ E
! T4 U/ i8 g6 x) w: }- x" A
游客,如果您要查看本帖隐藏内容请回复
) u- |- \, a, e6 g
# Q" ~+ B' J/ ?* M: X- ^

. }8 N, O2 P6 T6 C# ?) I  O

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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