Есть два разных значения слова «не рекомендуется».
быть устаревшим: (в основном это программная функция) быть пригодным для использования, но считаться устаревшим и лучше избегать, как правило, из-за его замены.
Новый Оксфордский Американский Словарь
По этому определению обратные ссылки не рекомендуются.
Устаревшее состояние также может указывать на то, что функция будет удалена в будущем.
- Википедия
По этому определению обратные пометки не являются устаревшими.
Все еще поддерживается:
Ссылаясь на спецификацию открытой группы на языках команд оболочки , в частности, в разделе «2.6.3 Подстановка команд», можно увидеть, что обе формы подстановки команд, backticks ( `..cmd..`
) или доллар parens ( $(..cmd..)
) по-прежнему поддерживаются в той мере, в какой идет спецификация.
выдержка
Подстановка команд позволяет заменить вывод команды вместо самого имени команды. Подстановка команды происходит, когда команда заключена следующим образом:
$(command)
or (backquoted version):
`command`
Оболочка должна расширить подстановку команд, выполнив команду в среде подоболочек (см. Среда выполнения оболочки) и заменив подстановку команд (текст команды плюс заключающие в кавычки $()
или обратно) стандартным выводом команды, удалив последовательности из одной или нескольких символы <newline> в конце замены. Встроенные символы <newline> до конца вывода не должны быть удалены; однако они могут рассматриваться как разделители полей и исключаться при разделении полей, в зависимости от значения IFS и действующего цитирования. Если выходные данные содержат нулевые байты, поведение не определено.
В стиле подстановки команд, заключенном в кавычки, <backslash> должен сохранять свое буквальное значение, за исключением случаев, когда следуют: '$', ' \`
' или <backslash> . Поиск соответствующей обратной цитаты должен удовлетворяться первой нецитированной обратной цитатой; во время этого поиска, если в комментариях оболочки встречается неэкранированная обратная кавычка, здесь-документ, встроенная подстановка команд $(command)
формы или строка в кавычках, возникают неопределенные результаты. Строка с одинарными или двойными кавычками, которая начинается, но не заканчивается в последовательности " `...`
", приводит к неопределенным результатам.
В $(command)
форме все символы, следующие за открывающей скобкой и совпадающей с закрывающей скобкой, составляют команду. Любой допустимый сценарий оболочки может быть использован для команды, кроме сценария, состоящего исключительно из перенаправлений, который дает неуказанные результаты.
Так почему же все говорят, что обратные ходы устарели?
Потому что большинство случаев использования должны использовать форму долларовых паренсов вместо кавычек. (Устаревший в первом смысле выше.) Многие из наиболее авторитетных сайтов (включая U & L) часто заявляют об этом также повсюду, так что это хороший совет. Этот совет не следует путать с каким-то несуществующим планом по удалению поддержки обратных кавычек из оболочек.
BashFAQ # 082 - Почему $ (...) предпочтительнее, чем `...` (обратные пометки)?
выдержка
`...`
это унаследованный синтаксис, требуемый только самой старой из не-POSIX-совместимых командных оболочек. Есть несколько причин всегда предпочитать $(...)
синтаксис:
...
Bash Hackers Wiki - Устаревший и устаревший синтаксис
выдержка
Это более старая Bourne-совместимая форма подстановки команд . Как `COMMANDS`
и $(COMMANDS)
Синтаксисы определяются POSIX, но последний очень предпочтительным, хотя первый, к сожалению , до сих пор очень распространены в сценариях. Подстановки команд нового стиля широко применяются в каждой современной оболочке (а затем и в некоторых). Единственная причина использования обратных галочек - это совместимость с реальной оболочкой Bourne (например, Heirloom). Подстановки команд Backtick требуют особого экранирования при вложении, и примеры, найденные в подстановочных символах, чаще всего неправильно цитируются. Смотрите:
почему $ (...) предпочтительнее, чем `...` (обратные метки)? ,
Стандартное обоснование POSIX
выдержка
Из-за этих противоречивых поведений разнообразие подстановок команд в кавычках не рекомендуется для новых приложений, которые вкладывают подстановки команд или пытаются встроить сложные сценарии.
ПРИМЕЧАНИЕ. В этом третьем отрывке (см. Выше) показано несколько ситуаций, в которых обратные трюки просто не будут работать, а новый метод долларовых паренсов работает, начиная со следующего абзаца:
Кроме того, синтаксис с обратными кавычками имеет исторические ограничения на содержание встроенной команды. В то время как более новая форма "$ ()" может обрабатывать любой допустимый встроенный скрипт, форма с кавычками не может обрабатывать некоторые допустимые скрипты, которые содержат обратные кавычки.
Если вы продолжите читать этот раздел, сбои подсвечиваются, показывая, как они могут потерпеть неудачу, используя обратные пометки, но работайте, используя более новую нотацию долларовых паренсов.
Выводы
Поэтому предпочтительно, чтобы вы использовали долларовые паренсы вместо кавычек, но на самом деле вы не используете что-то, что технически «устарело», как в «это перестанет работать полностью в некоторой запланированной точке».
После прочтения всего этого вы должны иметь заберите вы настоятельно рекомендуется использовать доллар Паренс , если вы специально не требуют совместимости с реальной оригинальной оболочкой без POSIX Борна.
cd
найти каталог, в котором объясняется, почему$(...)
нотация проще в использовании, чем вложенные обратные кавычки.