163 votes

Qu'est-ce que cela signifie dans le shell quand on met une commande entre le signe dollar et les parenthèses : $(commande)

Je veux juste comprendre la ligne de code suivante dans le shell. Elle est utilisée pour obtenir le répertoire de travail actuel. Je suis conscient que $(variable) renvoie la valeur contenue dans le nom de la variable, mais qu'est-ce qui est $(command) censé revenir ? Renvoie-t-il la valeur après l'exécution de la commande ? Dans ce cas, nous pouvons utiliser ` pour exécuter la commande.

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

La même sortie peut être obtenue à partir de la ligne de code suivante, également dans une version différente du shell.

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

Je suis incapable de comprendre le sens de $(cd.. y $(dirname .

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

159voto

Eric Urban Points 1460

Utilisation de la $ comme ${HOME} donne la valeur de HOME. L'utilisation du $ comme $(echo foo) signifie qu'il faut exécuter ce qui se trouve entre les parenthèses dans un sous-shell et le retourner comme valeur. Dans mon exemple, vous obtiendrez foo depuis echo écrira foo à la norme

27voto

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

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

Examinons les différentes parties de la commande. BASH_SOURCE est une variable de type tableau bash contenant les noms des fichiers sources. Ainsi, "${BASH_SOURCE[0]}" vous renverrait le nom du fichier script.

dirname est un utilitaire fourni par GNU coreutils qui permet de supprimer le fichier dernier composant du nom du fichier. Ainsi, si vous exécutez votre script en disant bash foo , "$( dirname "${BASH_SOURCE[0]}" )" rendrait . . Si tu disais bash ../foo il retournerait .. ; pour bash /some/path/foo il reviendrait /some/path .

Enfin, l'ensemble de la commande "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" obtient le répertoire absolu contenant le script invoqué.

$(...) permet la substitution de commandes, c'est-à-dire que la sortie d'une commande peut remplacer la commande elle-même et peut être imbriquée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X