Будь-яка причина використовувати або навчати підстановці нової розробки?


16

Наскільки я розумію, що більш сучасний $(...)синтаксис заміни команд віддається перевагу над `синтаксисом, що базується на старій основі, через легше і менш схильне до помилок синтаксис та уникнути помилок.

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

  • баш
  • ash (і тому BusyBox, так що найбільше вбудований Linux)
  • тире
  • FreeBSD / бін / ш

І $(…)визначається IEEE 1003.1.

Тому у мене є 2 дуже пов'язаних питання:

  • Чи є якась причина використовувати `у новій розробці скриптів оболонки, якщо ви не знаєте про конкретну стару систему, над якою буде потрібно запускати сценарій?
  • Чи є якась причина не навчати студентів програмування UNIX просто писати $(...)та обговорювати `лише як застарілий варіант, з яким вони, можливо, зіткнуться, якщо читатимуть сценарії оболонок інших розробників (і, можливо, знадобляться, якщо вони працюють із дійсно старою системою чи нестандартною з якоїсь причини)?

7
Ні, немає сенсу використовувати і не навчати `...`. Він призначений для зворотної переносимості лише з оболонкою Bourne (як у оболонки Bourne ^(так само, як |) для зворотної переносимості з оболонкою Thomson). Однак зауважте, що (t)cshцього немає $(...)(але використовувати їх чи викладати їх також не має сенсу).
Стефан Шазелас

2
Це річ Грушо Маркса `; {)
золотники

2
Зачекайте, застарілі бекстейки ?? У когось є канонічна довідка, яка пояснює, чому? (Дивні символи синтаксису дуже важкі для пошуку.)
MathematicalOrchid

1
Легше набрати. `` - 2 натискання клавіш; $()- shift + 4,9, shift + 0 - 5 натискань клавіш;
Ві.

3
@MathematicalOrchid stackoverflow.com/questions/9405478 / ... виглядає досить добре. Повернутись із зворотними посиланнями дуже важко, щоб правильно розмістити гнізда, особливо якщо залучаються додаткові пропозиції.
Майкл Екстранд

Відповіді:


19

Оскільки часто використовуються зворотні кліщі, є сенс навчити цю синтаксичну конструкцію.

Звичайно, $()підстановку команд стилів слід підкреслювати як стиль за замовчуванням (і стандартну структуру, що відповідає).

Чому зворотні кліщі все ще популярні? Тому що вони рятують одного персонажа при наборі тексту, і вони, мабуть, менш важкі для ока.


18
Я б не охарактеризував "менш важку для очей" функцію, але помилку ...
jasonwryan

1
Зазвичай я використовую backsticks у простих випадках, а $ () у складних випадках. Але до цих пір дуже багато сценаріїв використовують задні посилання, і міста повинні були мати змогу використовувати їх.
петерх

@jasonwryan У цьому випадку помилка не через стислість, а довільні проблеми. Тобто, використовуючи лапки це легше на-віч, але це не чому вона амортизується. Якщо ви не намагаєтеся сказати, що цукор за визначенням поганий, і ми всі повинні віддавати перевагу будь-якому… Насправді мені подобається вигляд $()кращого, але задній план простіший і більш KISS; може бути павловським OCDish наслідком загального програмування.
золотинки

@goldilocks як тільки дорослішаєш, читати так чи інакше набагато складніше: підлітки практично не помітні в коді в моєму віці ...
jasonwryan

3
На французькій клавіатурі, наприклад, `є Altrg + è (незручним типу), в той час як $, (, )не потрібно ніякого модифікатора.
Стефан Шазелас

5

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

Див. Розділ Підстановка команд: вкладені зворотні позначки або знак долара / батьків? .


1

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

З іншого боку, коли ви припиняєте підтримувати старі системи? чи ніколи не можна переходити до нових способів ведення справ? Я вважаю, що ви повинні довіряти власному судженням, і якщо ви зможете побачити певну перевагу нового способу над старим, тоді перейдіть до цього ... це не одна з них (особисто я вважаю бактики набагато зрозумілішими - вони не можуть бути плутати з підстановкою змінної оболонки, що різна річ)


1
POSIX не вказує, що /bin/shповинно відповідати. Solaris /bin/shдійсно дуже невідповідний - хоча Solaris 9/10 / ... офіційно сумісний з POSIX. Це $()лише одна конструкція, яку вона не розуміє. Але є ще багато, чого вона не розуміє або трактується по-різному. Портативний спосіб отримати відповідний shдля пошуку його на шляху, повернутому getconf PATH.
maxschlepzig
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.