我只想了解shell中的以下代码行。它用于获取当前工作目录。我知道$(variable)
名称返回变量名称中的值,但$(command)
应该返回什么?它在执行命令后返回值吗?在这种情况下,我们可以使用`
来执行命令。
CWD="$(cd "$(dirname $0)"; pwd)"
在不同版本的shell
中也可以从以下代码行中获取相同的输出DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
我无法理解$(cd..
和$(dirname
的含义。
有人可以帮我弄清楚这个命令是如何执行的吗?
答案 0 :(得分:94)
使用像$
这样的${HOME}
给出了HOME的值。使用像$
这样的$(echo foo)
意味着运行子shell中括号内的任何内容并将其作为值返回。在我的示例中,您将获得foo
,因为echo
会将foo
写入标准输出
答案 1 :(得分:17)
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
有人可以帮我弄清楚这个命令是如何执行的吗?
让我们看一下命令的不同部分。 BASH_SOURCE
是包含源文件名的bash数组变量。因此"${BASH_SOURCE[0]}"
会返回脚本文件的名称。
dirname
是GNU coreutils提供的一个实用程序,它从文件名中删除 last component 。因此,如果您通过说bash foo
执行脚本,"$( dirname "${BASH_SOURCE[0]}" )"
将返回.
。如果您说bash ../foo
,则会返回..
;对于bash /some/path/foo
,它会返回/some/path
。
最后,整个命令"$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
获取包含被调用脚本的绝对目录。
$(...)
允许命令替换,即允许输出命令来替换命令本身并且可以嵌套。