有人问:
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 L1
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