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 .... ).