What does it mean in shell when we put a command inside dollar sign and parentheses: $(command)

BashShellTerminalShKsh

Bash Problem Overview


I just want to understand following line of code in shell. It is used to get the current working directory. I am aware that $(variable) name return the value inside the variable name, but what is $(command) supposed to return? Does it return the value after executing the command? In that case, we can use ` to execute the command.

CWD="$(cd "$(dirname $0)"; pwd)"

Same output can be taken from the following line of code also in different version of shell

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

I am unable to understand the meaning of $(cd.. and $(dirname.

Could anybody help me to figure out how this command get executed?

Bash Solutions


Solution 1 - Bash

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 - Bash

> 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKItisView Question on Stackoverflow
Solution 1 - BashEric UrbanView Answer on Stackoverflow
Solution 2 - BashdevnullView Answer on Stackoverflow