Una risposta StackOverflow con> 3.5K voti presenta questo one-liner per l'assegnazione alla DIR
directory 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 $( dirname
e )
) 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 pwd
dopo 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 $PWD
shell 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 .... )
.