Современная рекомендация заключается в использовании:
$(...)
вместо старшего:
`...`
главным образом для удобочитаемости и избежания необходимости экранирования при вложении.
Какие оболочки не поддерживают $(...)
форму, и используются ли они до сих пор?
shell
command-substitution
portability
joeytwiddle
источник
источник
cmd
) в * sh оболочках устаревшими? и вы найдете ответ.sh
которая будет поддерживаться в правильной среде$(...)
.Ответы:
Оригинальная оболочка Bourne, csh или tcsh, все не поддерживают
$()
и требуют``
замены команд.Оболочка Bourne больше не используется в качестве оболочки по умолчанию (/ bin / sh) во многих операционных системах на основе UNIX. Однако эти оболочки все еще поставляются поставщиками ОС, поскольку они все еще используются по историческим причинам.
И AIX, и HP-UX имеют / bin / sh в качестве POSIX-совместимой оболочки. Оболочка Bourne по-прежнему доступна в AIX как 'bsh' (но не рекомендуется в 1995 году с AIX 4.1) и HP-UX 11.11 '/ usr / old / bin / sh' (Bourne был удален из 11.23). Я не уверен, когда был сделан переход, но это было много лет назад.
источник
Solaris 10 и более ранних
/bin/sh
версий не поддерживает$()
.Он все еще используется сегодня, потому что Solaris 10 все еще используется, Sun не хотела заменять его стандартной соответствующей версией (вплоть до Solaris 10 включительно), и потому что большинство людей считают
/bin/sh
оболочку по умолчанию и не знают как переносить выполнение сценария с помощью соответствующей оболочки POSIX .Мотивация Sun не изменяться
/bin/sh
состояла в том, чтобы не нарушать существующие сценарии оболочки, которые полагаются на несоответствующее поведение.источник
/bin/sh
...