Насколько я понимаю, более современный $(...)
синтаксис подстановки команд предпочтительнее старого `
синтаксиса из-за более простого и менее подверженного ошибкам вложения и экранирования синтаксиса.
Кроме того, кажется, что большинство /bin/sh
оболочек в современном стиле поддерживают $(…)
:
- удар
- Ash (и, следовательно, BusyBox, поэтому большинство встроенных Linux)
- тире
- FreeBSD / bin / sh
И $(…)
определено IEEE 1003.1.
Итак, у меня есть 2 очень связанных вопроса:
- Есть ли какая-либо причина использовать `в новой разработке сценариев оболочки, если вы не знаете конкретную старую систему, на которой сценарий должен будет выполняться?
- Есть ли какая-либо причина не учить студентов по программированию на UNIX просто писать
$(...)
, а обсуждать`
только как устаревший вариант, с которым они, вероятно, столкнутся, если будут читать сценарии оболочки других разработчиков (и может понадобиться, если они работают с действительно старой или нестандартной системой)? по какой-то причине)?
$()
- сдвиг + 4,9, сдвиг + 0 - 5 нажатий клавиш;
`...`
. Он существует для обратной переносимости только с оболочкой Борна (как и в случае с оболочкой Борна^
(так же, как|
) для обратной переносимости с оболочкой Томсона). Обратите внимание, что(t)csh
у них нет$(...)
(но нет особого смысла использовать или учить их).