Shell脚本中反引号`和$()的区别

来源:互联网 发布:c 结构体数组 编辑:程序博客网 时间:2024/06/01 18:56

`和(),Shell,()表⽰: DATE=(date)(())⽤于算术计算,(())Shell,: VAR=45
echo((VAR+3))(())中只能⽤+-*/和()运算符,并且只能做整数运算

那么`和$()在命令替换时有什么区别呢

`和$()在用到\时,有了差别,下面举个例子来说明这个问题

echo `echo \\w `echo $(echo \\w )

这里写图片描述
为什么有这样不同的结果呢?
在举个例子
当直接执行echo \$HOSTNAME语句时,结果为$HOSTNAME
当直接执行echo $HOSTNAME语句时,结果为localhost.localdomain
现在编写这样两句程序

echo  `echo \$HOSTNAME`     echo $(echo \$HOSTNAME)    

结果分别为localhost.localdomain和HOSTNAME(\)$的特殊意义转换,将被解释为echo localhost.localdomain,结果为localhost.localdomain。
在用()(\)$的特殊意义转换,所以将被解释为echo \$HOSTNAME,结果为$HOSTNAME。

这说明在反引号(`)中一个反斜杠()并没有转义的作用。

现在多增加几个反斜杠看看结果

echo  `echo \\$HOSTNAME`     echo $(echo \\$HOSTNAME)  

这次结果有了变化,分别为
$HOSTNAME
\localhost.localdomain
这就说明echoecho $HOSTNAME被解释成了echo \$HOSTNAME,而echo $(echo \\$HOSTNAME)被解释成了echo \localhost.localdomain
为什么这次又会是这个结果呢?
其实还是和\有关,在`中一个\不做转义字符处理,但是两个就要做转义字符处理。在$()中一个做转义字符处理,所以有两个\时,就被处理成了一个\。

原创粉丝点击