Qu’est-ce que cela signifie en shell quand on place une commande à l’intérieur du signe dollar et des parenthèses: $ (commande)

Je veux juste comprendre la ligne de code suivante en shell. Il est utilisé pour obtenir le répertoire de travail en cours. Je suis conscient que $(variable) name renvoie la valeur dans le nom de la variable, mais qu’est-ce que $(command) censé renvoyer? Renvoie-t-il la valeur après avoir exécuté la commande? Dans ce cas, nous pouvons utiliser ` pour exécuter la commande.

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

La même sortie peut être prise à partir de la ligne de code suivante également dans différentes versions de shell

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

Je n’arrive pas à comprendre la signification de $(cd.. et $(dirname .

Quelqu’un pourrait-il m’aider à comprendre comment cette commande est exécutée?

L’utilisation de $ comme ${HOME} donne la valeur de HOME. L’utilisation de $ like $(echo foo) signifie que vous exécutez tout ce qui se trouve entre parenthèses dans un sous-shell et que vous retournez cette valeur. Dans mon exemple, vous obtiendrez foo car echo va écrire foo à la sortie standard

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

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

Permet de regarder différentes parties de la commande. BASH_SOURCE est une variable de tableau bash contenant les noms de fichiers source. Donc, "${BASH_SOURCE[0]}" vous renverrait le nom du fichier script.

dirname est un utilitaire fourni par GNU coreutils qui supprime le dernier composant du nom de fichier. Ainsi, si vous exécutez votre script en disant bash foo , "$( dirname "${BASH_SOURCE[0]}" )" sera renvoyé . . Si vous avez dit bash ../foo , ça retournerait .. ; pour bash /some/path/foo il renverrait /some/path .

Enfin, la commande entière "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" récupère le répertoire absolu contenant le script appelé.

$(...) permet la substitution de commandes, c.-à-d. permet la sortie d’une commande pour remplacer la commande elle-même et peut être nestede.