StackOverflow odpowiedź z> 3.5K głosów dysponuje ten jeden-liner przypisywania do DIR
katalogu 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. $( dirname
i )
) 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ą pwd
po pierwszym cd
uruchomieniu do katalogu zwróconego przez dirname "${BASH_SOURCE[0]}"
i wykonaj cd
-ing w podpowłoce, aby $PWD
powł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 .... )
.