Что это значит в оболочке, когда мы помещаем команду внутри знака доллара и скобок: $(command)
Я просто хочу понять следующую строку кода в оболочке. Он используется для получения текущего рабочего каталога. Я знаю, что $(variable) name возвращает значение внутри имени переменной, но что такое $(command) должен возвращать? Возвращает ли он значение после выполнения команды? В этом случае мы можем использовать ` для выполнения команды.
CWD="$(cd "$(dirname )"; pwd)"
тот же вывод может быть взят из следующей строки кода также в другой версии оболочки
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Я не в состоянии понять значение $(cd.. и $(dirname.
может кто-нибудь помочь мне выяснить, как эта команда выполнится?
2 ответа:
использование
$Как${HOME}дает значение HOME. Использование$Как$(echo foo)означает выполнить все, что находится внутри круглых скобок в подобласти и вернуть это как значение. В моем примере вы получитеfooСechoписатьfooк стандарту
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Could anybody help me to figure out how this command get executed?давайте посмотрим на различные части команды.
BASH_SOURCE- это переменная массива bash, содержащая имена исходных файлов. Так что"${BASH_SOURCE[0]}"вернет вам имя файла скрипта.
dirnameэто утилита, предоставляемая GNU coreutils, которые удаляют последний компонент С именем. Таким образом, если вы выполняете свой скрипт, говоряbash foo,"$( dirname "${BASH_SOURCE[0]}" )"вернутся.. Если вы сказалиbash ../foo, он хотел вернуть..; заbash /some/path/fooон бы вернулся/some/path.наконец, вся команда
"$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"возвращает абсолютный каталог, содержащий вызываемый скрипт.
$(...)допускает подстановку команд, т. е. позволяет выходу команды заменить саму команду и может быть вложенным.