Ответы:
Это очень похоже на backticks ``.
Это называется подстановка команд ( спецификация posix ) и вызывает подоболочку. Команда в скобках $()
или между обратными галочками (``) выполняется в подоболочке, а выходные данные помещаются в исходную команду.
В отличие от обратных галочек, $(...)
форма может быть вложенной. Таким образом, вы можете использовать подстановку команд внутри другой подстановки.
Существуют также различия в экранировании символов в подстановке. Я предпочитаю $(...)
форму.
echo `echo \`echo foo\`` bar
В POSIX или POSIX-подобных оболочек ( ksh
, bash
, ash
, zsh
, yash
...), это как ``
: команда внутри $()
выполняется , и заменить его на стандартный вывод. Разделение слов и генерация файлов выполняются, если они не заключены $()
в двойные кавычки. таким образом
chmod 777 $(pwd)
следует заменить на:
chmod 777 "$(pwd)"
чтобы избежать расщепления слов и генерации имени файла в текущем рабочем каталоге.
Или даже лучше (за исключением некоторых оболочек, таких как zsh, если каталог был переименован):
chmod 777 "$PWD"
Так $PWD
как это специальная переменная, которая содержит путь к текущему рабочему каталогу в оболочках POSIX.
Или даже лучше:
chmod 777 .
Поскольку .
запись в текущем каталоге является жесткой ссылкой на сам каталог.
Это $()
используется для выполнения команды в основном внутри какой-либо другой команды.
chmod 777 $(pwd)
pwd
Команда дает текущий рабочий каталог. Таким образом, когда все будет выполнено, вывод pwd заменит свою позицию и послужит аргументом для chmod
, и в результате весь ваш нынешний рабочий каталог получит разрешение, 777
которое, я думаю, никогда не должно использоваться в производственной среде;).