Una risposta StackOverflow con> 3.5K voti presenta questo one-liner per l'assegnazione alla DIRdirectory dell'attuale script bash:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Sono perplesso dalle doppie virgolette nidificate. Per quanto ne so, i seguenti frammenti sono tra virgolette:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... e tutto il resto a destra di =(ie $( dirnamee )) non è quotato. In altre parole, suppongo che il 2o, 4o e 6o "carattere "chiudano" rispettivamente il 1o, 3o e 5o "carattere.
Capisco cosa "${BASH_SOURCE[0]}"ottengono le doppie virgolette , ma qual è lo scopo delle altre due coppie di virgolette?
Se, d'altra parte (e nonostante il punteggio più alto), lo snippet sopra riportato non è corretto, qual è il modo giusto per raggiungere il suo intento nominale?
(Per intento nominale intendo: raccogliere il valore restituito pwddopo il primo cd-ing nella directory restituita da dirname "${BASH_SOURCE[0]}", e fare il cd-ing in una sotto-shell, in modo che la $PWDshell madre rimanga invariata).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"funziona anche.

$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... ).