Une réponse StackOverflow avec> 3,5 K votes présente cette ligne unique pour l'attribution au DIRré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 $( dirnameet )) 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 pwdaprès la première cdentrée dans le répertoire retourné par dirname "${BASH_SOURCE[0]}", et effectuer la cd-ing dans un sous-shell, de sorte que le $PWDshell 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 .... ).