当我们把一个命令放在美元符号和括号内时,在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命令本身,并可以嵌套。