Shell中反引号和$()的区别
Shell中可以用来实现变量代换的命令有两种,一种是由反引号括起来的一条命令另一种是由$()括起来一条命令,shell先执行这条命令,然后见输出结果立刻代换到当前命令行中。
例如定义一个变量存放date命令的输出:
$DATE=`data`
$echo $DATE
命令代换也可以用$()表示:$DATE=$(date) 输出的效果是一样的。我们知道系统是不会存在冗余的的命令,那么这两种方式有什么区别呢?下面我们再看一个例子:
i=1
time1=Fri Aug 23 11:35:21
a=$(echo \time1)
经运行,命令的输出结果是$time1
那么换成a=`echo \time1`输出结果还是一样的吗?输出结果如下:
Fri Aug 23 11:35:21
这种结果的原因如下:
1.反引号本身就对\进行了转移,保留了其本身的意思,如果我们想在反引号中起到\的特殊意义的话,我们必须用两个反斜杠来进行表示。
2.$()中不需要考虑\的问题,与我们平常使用的\一样
反引号是老的用法,$()是新的用法,不管在学习测试中还是在实际工作中,$()的用法都是被推荐的。