Quais conchas não suportam a expansão entre parênteses em dólar e exigem reticências?

8

A recomendação moderna é usar:

$(...)

em vez do mais antigo:

`...`

principalmente para facilitar a leitura e evitar a necessidade de escapar ao aninhar.

Quais shells não suportam o $(...)formulário e ainda existem hoje em uso?

joeytwiddle
fonte
1
Leia completamente Os backticks (ie cmd) em * shells foram descontinuados? e você encontrará a resposta.
John1024
Ele diz "A única razão para usar backticks é a compatibilidade com um shell Bourne real (como o Heirloom)".
Joeytwiddle
1
Um ponto importante é que todos os sistemas do tipo Unix mantidos após os anos 90 terão um comando chamado shque, no ambiente certo, será compatível $(...).
Stéphane Chazelas

Respostas:

8

O shell Bourne original, csh ou tcsh, todos não suportam $()e requerem `` substituição de comando.

O shell Bourne não é mais usado como o shell padrão (/ bin / sh) em muitos sistemas operacionais baseados em UNIX. No entanto, esses shells ainda são fornecidos pelos fornecedores do SO, pois ainda são usados ​​por razões históricas.

O AIX e o HP-UX possuem / bin / sh como um shell compatível com POSIX. O shell Bourne ainda está disponível no AIX como 'bsh' (mas obsoleto em 1995 com o AIX 4.1) e no HP-UX 11.11 '/ usr / old / bin / sh' (o Bourne foi removido do 11.23). Não tenho certeza de quando a troca foi feita, mas foi há muitos anos.

DarkHeart
fonte
5

O Solaris 10 e versões anteriores /bin/shnão suportam $().

Ele ainda está em uso hoje porque o Solaris 10 ainda está em uso, a Sun não queria substituí-lo por uma versão em conformidade padrão (até o Solaris 10 inclusive) - e porque a maioria das pessoas considera /bin/sho shell padrão e não sabe como executar portably um script com um shell em conformidade com POSIX .

A motivação da Sun para não mudar /bin/shera evitar a quebra de scripts de shell existentes que se baseiam no comportamento não conforme.

maxschlepzig
fonte
2
@cuonglm, sim, eu apenas testei e posso confirmar. Teria pensado que, em vez Hurd vai ser lançado do que a Sun / Oracle muda sua política de /bin/sh...
maxschlepzig