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

3 篇文章 0 订阅

`和 (),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
为什么这次又会是这个结果呢?
其实还是和\有关,在`中一个\不做转义字符处理,但是两个就要做转义字符处理。在$()中一个做转义字符处理,所以有两个\时,就被处理成了一个\。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值