Что это значит в оболочке, когда мы помещаем команду внутри знака доллара и скобок: $(command)


Я просто хочу понять следующую строку кода в оболочке. Он используется для получения текущего рабочего каталога. Я знаю, что $(variable) name возвращает значение внутри имени переменной, но что такое $(command) должен возвращать? Возвращает ли он значение после выполнения команды? В этом случае мы можем использовать ` для выполнения команды.

CWD="$(cd "$(dirname )"; pwd)"

тот же вывод может быть взят из следующей строки кода также в другой версии оболочки

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

Я не в состоянии понять значение $(cd.. и $(dirname.

может кто-нибудь помочь мне выяснить, как эта команда выполнится?

2 74

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 )" возвращает абсолютный каталог, содержащий вызываемый скрипт.

$(...) допускает подстановку команд, т. е. позволяет выходу команды заменить саму команду и может быть вложенным.