значение «$ {BASH_SOURCE [0]}» и $ ( cd $ (dirname «xxx»

#bash

#bash

Вопрос:

Это часть сценария bash.

 DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" amp;amp; pwd )
source $DIR/framework.sh $@
  

Пожалуйста, кто-нибудь объяснит, что означают эти две строки.. Похоже, что он переходит в каталог, где существует $ {BASH_SOURCE [0]}, и присваивает pwd результат DIR, но я не могу сначала понять синтаксис $ {BASH_SOURCE [0]} . Есть ли массив переменных в bash? и второй вопрос: почему он просто не делает

 DIR=$( $( dirname "${BASH_SOURCE[0]}" )" )
  

?

Ответ №1:

Первая строка указывает абсолютный путь к скрипту, а не относительный путь. Относительный путь будет примерно таким somedir/myscript.sh , где вы точно не знаете, где somedir находится. Абсолютный путь был бы чем-то вроде /home/seumasmac/somedir/myscript.sh , где мы точно знаем, где в файловой системе находится скрипт.

${BASH_SOURCE[0]} содержит путь, используемый для вызова скрипта. Таким образом, он может возвращать что-то вроде somedir/myscript.sh . Это похоже на $0 , основное отличие заключается в том, что оно также работает, когда скрипт создается, а не вызывается напрямую.

Если бы вы это сделали dirname somedir/myscript.sh , это просто вернулось somedir бы. Итак, вместо этого скрипт выполняет cd ввод somedir , а затем запускается pwd . Это дает полный абсолютный путь к каталогу.

Вторая строка включает framework.sh данные из того же каталога, используя source команду.