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/…–