Bash 中的 $(...) 和 `...` 有什么区别

Art*_*ton 4 bash

我用 `...` 得到了预期的结果,但用 $(...) 失败了

kill $(ps ux | grep S..\.tcl | grep -v grep | awk '{print $2}')

Illegal variable name.

kill `ps ux | grep S..\.tcl | grep -v grep | awk '{print $2}'`

(kill expected processes)
Run Code Online (Sandbox Code Playgroud)

通过谷歌搜索,我发现有人说它们是可以互换的,但不是这个例子。那么,Bash 中的 $(...) 和 `...` 有什么区别?

meu*_*euh 8

我做了一个

grep -al 'Illegal variable name' /bin/*
Run Code Online (Sandbox Code Playgroud)

并在 /bin/csh 中找到该消息。当您发出命令时,您似乎正在运行csh而不是 bash。例如:

csh $ echo `echo abc`
abc
csh $ echo $(echo abc)
Illegal variable name.
Run Code Online (Sandbox Code Playgroud)