Une réponse StackOverflow avec> 3,5 K votes présente cette ligne unique pour l'attribution au DIR
répertoire du script bash actuel:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Je suis perplexe devant les guillemets imbriqués. Pour autant que je sache, les fragments suivants sont entre guillemets:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... et tout le reste à droite de =
(ie $( dirname
et )
) n'est pas cité. En d'autres termes, je suppose que les 2e, 4e et 6e "
caractères "ferment" respectivement les 1er, 3e et 5e "
caractères.
Je comprends à quoi servent les guillemets doubles "${BASH_SOURCE[0]}"
, mais à quoi servent les deux autres paires de guillemets doubles?
Si, en revanche (et malgré le score de vote élevé), l'extrait ci-dessus est incorrect, quelle est la bonne façon d'atteindre son objectif nominal?
(Par intention nominale, je veux dire: collecter la valeur retournée par pwd
après la première cd
entrée dans le répertoire retourné par dirname "${BASH_SOURCE[0]}"
, et effectuer la cd
-ing dans un sous-shell, de sorte que le $PWD
shell parent reste inchangé).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
fonctionne également.
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
.