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