EDA365电子论坛网

标题: Linux——Shell中反引号(`)与$()用法的区别 [打印本页]

作者: ulppknot    时间: 2019-8-9 14:48
标题: Linux——Shell中反引号(`)与$()用法的区别
有人问:
        echo `echo \\\\\\\w`        echo $(echo \\\\\\\w)        为什么输出的不一样?
这就引申出了另一个问题:反引号与$()有没有区别?
这是一个非常有意思的问题,但要解释这个问题确比较困难,我来换一个简单一点的例子,通俗的解释一下。
比如我们有一个shell脚本名为test.sh有一下两行

* L/ M" R9 p) I/ m4 H8 M' i: U
/ S1 z# d6 m  C1 q
9 I4 t: ?& c4 z2 L
1
2 @8 U9 C6 {/ {$ T6 \2 b8 P2
3 G" J$ J' F* G0 E
echo  `echo \$HOSTNAME`     //反引号
. `5 w2 L* M; N' C. Z  U% x+ }( qecho $(echo \$HOSTNAME)    //$()
+ Y4 S; o. x2 W3 f! z. U4 C# O5 Q" G. @  W$ Z' [: E- a

7 c( x" p. ?& e7 U$ `5 `6 Q. J
  我们可以使用sh -x test.sh来分析bash是如何来解释这个脚本的,返回的信息如下:
  通过上图我们可以得出两个结论:
  这说明反引号对反斜杠(\)有特殊的转化,至少我们看到当我们直接用1个\时,它本身并不会起到转义的作用。现在我们将脚本的内容做一些修改:
19 S( Q- J2 X, Y
2
! _$ R! T& r7 j5 }3 w4 y; m
echo  `echo \\$HOSTNAME`     //反引号4 V1 E8 \. h, b# o: Y& ]- O1 ?2 e
echo $(echo \\$hostname)    //$()5 Q0 ?/ H0 z3 q# ^5 t& U6 c
2 e4 M* x" ?' j9 D; o; X

/ j) l- u2 b" E8 g) U# `9 v
2 |& a8 }- N/ q; m) Y5 i( J. F3 U& l

& `2 |/ v7 y- k6 o8 S; Y
  w: t- L, r( N# p4 H' n: F: k

作者: fanichicl    时间: 2019-8-9 17:50
Shell中反引号(`)与$()用法的区别。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2