Answers:
使用$like可以${HOME}得出HOME的值。使用$like $(echo foo)意味着运行子外壳程序中括号内的内容并将其作为值返回。在我的示例中,您将获得,foo因为echo它将写入foo标准输出
$(...)比起尝试使用反引号,写命令是一种更好的方法。考虑编写:gcclib=$(dirname $(dirname $(which gcc)))/lib使用反引号。甚至在进入Markdown的困难之中之前,它都变得更加困难,因为您必须转义嵌套命令的反引号,而不必使用$(...)符号。
$(echo foo)创建命令替换而不是子shell。当前的另一个答案是正确的。我认为命令替换是在子外壳中运行的,但是它们仍然是不同的概念。
$(echo foo)将尝试运行括号中返回的内容,它将首先运行,echo foo然后将尝试运行foo,这会产生错误
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"有人可以帮我弄清楚如何执行此命令吗?
让我们看一下命令的不同部分。BASH_SOURCE是包含源文件名的bash数组变量。因此"${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 )"将获取包含正在调用的脚本的绝对目录。
$(...) 允许命令替换,即允许命令的输出替换命令本身,并且可以嵌套。
dirname返回执行文件的路径(相对于当前工作目录的绝对路径或绝对路径),cd将pwd更改为该目录,并pwd输出当前工作目录的绝对路径。但是为什么他们加入了&&?并将什么DIR持有,如果cd失败了呢?
&&阻止其pwd运行cd,从而DIR将其为空而不是具有错误的目录。
$()vs.的优缺点的问题``:stackoverflow.com/questions/9449778/…–