StackOverflow відповідь з> 3.5K голосів показує цей один вкладиш для присвоєння DIR
директорії поточного скрипта Баша:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Мене спантеличують вкладені подвійні лапки. Наскільки я можу сказати, такі фрагменти двічі цитуються:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... а все інше праворуч від =
(тобто $( dirname
і )
) не цитується. Іншими словами, я припускаю, що 2-й, 4-й та 6-й "
символи "закривають" 1-й, 3-й та 5-й "
символи відповідно.
Я розумію, чого "${BASH_SOURCE[0]}"
досягають подвійні лапки , але яка мета інших двох пар подвійних лапок?
Якщо, з іншого боку (і високий показник голосів, незважаючи на це), вищевказаний фрагмент є невірним, який правильний спосіб досягти свого номінального наміру?
(Під номінальним наміром я маю на увазі: зібрати значення, повернене pwd
після першого cd
-ing, до каталогу, повернутого dirname "${BASH_SOURCE[0]}"
, і виконайте cd
-ing у підколонці, щоб $PWD
батьківська оболонка залишалася незмінною).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
працює також.
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
.