What does it mean in shell when we put a command inside dollar sign and parentheses: $(command)
Solution 1:
Usage of the $
like ${HOME}
gives the value of HOME. Usage of the $
like $(echo foo)
means run whatever is inside the parentheses in a subshell and return that as the value. In my example, you would get foo
since echo
will write foo
to standard out
Solution 2:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Could anybody help me to figure out how this command get executed?
Let's look at different parts of the command. BASH_SOURCE
is a bash array variable containing source filenames. So "${BASH_SOURCE[0]}"
would return you the name of the script file.
dirname
is a utility provided by GNU coreutils that remove the last component from the filename. Thus if you execute your script by saying bash foo
, "$( dirname "${BASH_SOURCE[0]}" )"
would return .
. If you said bash ../foo
, it'd return ..
; for bash /some/path/foo
it'd return /some/path
.
Finally, the entire command "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
gets the absolute directory containing the script being invoked.
$(...)
allows command substitution, i.e. allows the output of a command to replace the command itself and can be nested.