StackOverflow odpowiedź z> 3.5K głosów dysponuje ten jeden-liner przypisywania do DIRkatalogu bieżącego skryptu bash:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Zaskakują mnie zagnieżdżone podwójne cudzysłowy. O ile wiem, następujące fragmenty są cytowane:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... i wszystko inne po prawej stronie =(tj. $( dirnamei )) jest nie cytowane. Innymi słowy, zakładam, że 2., 4. i 6. "znak „zamykają” odpowiednio 1., 3. i 5. "znak.
Rozumiem, co "${BASH_SOURCE[0]}"osiągają podwójne cudzysłowy , ale jaki jest cel pozostałych dwóch par podwójnych cudzysłowów?
Jeśli natomiast (pomimo wysokiego wyniku głosowania) powyższy fragment kodu jest niepoprawny, jaki jest właściwy sposób osiągnięcia jego zamierzonego celu?
(Przez nominalne zamiary mam na myśli: zbierz wartość zwróconą pwdpo pierwszym cduruchomieniu do katalogu zwróconego przez dirname "${BASH_SOURCE[0]}"i wykonaj cd-ing w podpowłoce, aby $PWDpowłoka nadrzędna pozostała niezmieniona).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"działa również.

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