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