Есть ли причина использовать или учить замену новым разработкам?

16

Насколько я понимаю, более современный $(...)синтаксис подстановки команд предпочтительнее старого `синтаксиса из-за более простого и менее подверженного ошибкам вложения и экранирования синтаксиса.

Кроме того, кажется, что большинство /bin/shоболочек в современном стиле поддерживают $(…):

  • удар
  • Ash (и, следовательно, BusyBox, поэтому большинство встроенных Linux)
  • тире
  • FreeBSD / bin / sh

И $(…)определено IEEE 1003.1.

Итак, у меня есть 2 очень связанных вопроса:

  • Есть ли какая-либо причина использовать `в новой разработке сценариев оболочки, если вы не знаете конкретную старую систему, на которой сценарий должен будет выполняться?
  • Есть ли какая-либо причина не учить студентов по программированию на UNIX просто писать $(...), а обсуждать `только как устаревший вариант, с которым они, вероятно, столкнутся, если будут читать сценарии оболочки других разработчиков (и может понадобиться, если они работают с действительно старой или нестандартной системой)? по какой-то причине)?
Майкл Экстранд
источник
7
Нет, нет смысла использовать или учить `...`. Он существует для обратной переносимости только с оболочкой Борна (как и в случае с оболочкой Борна ^(так же, как |) для обратной переносимости с оболочкой Томсона). Обратите внимание, что (t)cshу них нет $(...)(но нет особого смысла использовать или учить их).
Стефан Шазелас
2
Это вещь Граучо Маркса `; {)
Златовласка
2
Подожди, галочки устарели ?? У кого-нибудь есть каноническая ссылка, объясняющая почему? (Странные синтаксические символы очень сложны для поиска.)
MateticOrchid
1
Проще набрать. `` - 2 нажатия клавиш; $()- сдвиг + 4,9, сдвиг + 0 - 5 нажатий клавиш;
Ви.
3
@MaturgicalOrchid stackoverflow.com/questions/9405478/… кажется довольно хорошим. Обратные пометки очень трудно правильно вкладывать, особенно если используются дополнительные кавычки.
Майкл Экстранд

Ответы:

19

Поскольку часто используются обратные тики, имеет смысл обучать этой синтаксической конструкции.

Конечно, $()подстановка команды стиля должна быть подчеркнута как стиль по умолчанию (и стандартная соответствующая конструкция).

Почему бэк-тики все еще популярны? Потому что они сохраняют один символ при наборе текста и, возможно, менее тяжелы для глаз.

maxschlepzig
источник
18
Я бы не охарактеризовал «менее тяжелый для глаз» как особенность, но это ошибка ...
jasonwryan
1
Обычно я использую backsticks в простых случаях и $ () в сложных случаях. Но очень многие сценарии до сих пор используют обратные ссылки, и выпускники должны были иметь возможность использовать их.
Петер - Восстановить Монику
@jasonwryan В этом случае ошибка не из-за краткости, а из-за произвольных проблем. Т.е., используя кавычку это легче на глаз, но это не почему она амортизируется. Если вы не пытаетесь сказать, что сахар по определению вреден, и мы все должны отдавать предпочтение asm для чего бы то ни было ... На самом деле мне нравится выглядеть $()лучше, но неприятные ощущения легче и больше ПОЦЕЛУЮ; может быть следствием общего программирования.
Златовласка
@goldilocks, как только вы становитесь старше, читаемость все равно становится намного сложнее: в моем возрасте
обратные черты
3
На французской клавиатуре, например, `является Altrg + è (неудобным типа), в то время как $, (, )не нужно никакого модификатора.
Стефан Шазелас
5

Я не стал бы использовать их для программирования, и обучение использованию замены backtick в сценариях оболочки, как устаревших, прекрасно (это, кажется, консенсус). Однако я не думаю, что они изначально злые, и (по крайней мере, судя по вашему обычному руководству по командной строке Linux) они все еще часто используются в простых фрагментах / однострочниках, где они, вероятно, не будут вложенными, и тому подобное. собираешься делать только один раз.

См. Подстановка команд: кавычки или знак доллара / парен прилагается? ,

Jaymmer - Восстановить Монику
источник
1

Я избегаю использовать $()конструкцию, потому что она не переносима - в реальном мире. Вы перечислили четыре оболочки - вариантов гораздо больше, чем вокруг (на порядок?). Попробуйте запустить свой скрипт в Solaris / bin / sh и посмотрите, как вы это делаете.

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

Мюррей Дженсен
источник
1
POSIX не указывает, что /bin/shдолжно соответствовать. Solaris /bin/shдействительно очень несоответствующий - хотя Solaris 9/10 / ... официально соответствует POSIX. Это $()только одна конструкция, которую он не понимает. Но есть еще много чего он не понимает или интерпретируется по-разному. Портативный способ получить соответствующий shдля поиска в пути, возвращаемом getconf PATH.
maxschlepzig