Что это значит в оболочке, когда мы помещаем команду внутри знака доллара и скобок: $(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 )"
возвращает абсолютный каталог, содержащий вызываемый скрипт.
$(...)
допускает подстановку команд, т. е. позволяет выходу команды заменить саму команду и может быть вложенным.