当我们把一个命令放在美元符号和括号内时,在shell中是什么意思:$(command)

我只是想了解shell中的以下代码行。 它用于获取当前的工作目录。 我知道$(variable)名称返回variables名称内的值,但$(command)应该返回什么? 它执行命令后是否返回值? 在这种情况下,我们可以使用`来执行命令。

 CWD="$(cd "$(dirname $0)"; pwd)" 

在不同版本的shell中,也可以从以下代码行获取相同的输出

 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 

我无法理解$(cd..$(dirname的含义。

有谁能帮我弄清楚这个命令是如何执行的?

${HOME}这样的${HOME}用法给出了HOME的值。 $ like $(echo foo)意味着运行子shell中括号内的任何内容并将其作为值返回。 在我的例子中,你会得到foo因为echo会将foo写入标准输出

 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 

Could anybody help me to figure out how this command get executed?

让我们看看命令的不同部分。 BASH_SOURCE是一个包含源文件名的bash数组variables。 所以"${BASH_SOURCE[0]}"会返回你脚本文件的名字。

dirname是由GNU coreutils提供的一个实用程序,它从文件名中删除最后一个组件 。 因此,如果你通过说bash foo执行你的脚本, "$( dirname "${BASH_SOURCE[0]}" )"将返回. 。 如果你说bash ../foo ,它会返回.. ; 对于bash /some/path/foo它会返回/some/path

最后,整个命令"$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"获取包含被调用脚本的绝对目录。

$(...)允许命令replace,即允许命令的输出replace命令本身,并可以嵌套。