子壳中的命令执行方法有什么不同?

我想知道是否有通过$(...)`...`调用子shell的显着差异?

例如:

 a=$(ls -la /tmp | grep vox-*) 

和:

 a=`ls -la /tmp | grep vox-*` 

结果将是完全一样的,但我想知道为什么有两种不同的方法,有什么区别,以及我应该使用哪一种。

Backsticks和$(...)在function上是相同的。 不过我更喜欢第二种方法

  • $(...)可以很容易地嵌套

  • 可读性, $(...)更“b”“

  • 一致性,作为一个类似的语法, $((...)) ,用于expression式

另见这个有其他参数的页面 。