Qualquer motivo para usar ou ensinar '...' substituição por novos desenvolvimentos?

16

Entendo que a mais moderna sintaxe de substituição do comando $(...) é preferível à sintaxe antiga baseada em ' , devido à sintaxe mais fácil e menos propensa a erros de aninhamento e escape.

Além disso, parece que a maioria dos shells em estilo /bin/sh no uso moderno suportam $(…) :

  • bash
  • ash (e, portanto, BusyBox, portanto, a maioria dos Linux embarcados)
  • traço
  • FreeBSD / bin / sh

E $(…) é especificado pelo IEEE 1003.1.

Portanto, tenho duas perguntas muito relacionadas:

  • Existe algum motivo para usar 'no novo desenvolvimento de scripts de shell, a menos que você saiba de um sistema antigo específico em que o script precisará ser executado?
  • Existe alguma razão para não ensinar os alunos de programação UNIX a escrever $(...) , e discutir ' apenas como uma variante obsoleta que eles provavelmente encontrarão se estiverem lendo scripts shell de outros desenvolvedores (e podem precisar se eles está trabalhando com um sistema realmente antigo ou fora do padrão por algum motivo)?
por Michael Ekstrand 21.01.2015 / 22:15

3 respostas

19

Como os carrapatos são freqüentemente usados, faz sentido ensinar essa construção sintática.

É claro que a substituição do comando $() style deve ser enfatizada como o estilo padrão (e a construção conforme o padrão).

Por que os tiques de retorno ainda são populares? Porque eles salvam um caractere na digitação, e eles são possivelmente menos pesados no olho.

    
por 21.01.2015 / 22:31
5

Eu não os usaria para programação, e ensinar o uso de substituição de backtick em shell scripts como obsoletos é bom (parece ser o consenso). Eu não acho que eles são inerentemente maus, no entanto, e (pelo menos a julgar pelo seu tutorial médio para a linha de comando do Linux) eles ainda são freqüentemente usados em simples trechos / one-liners onde eles provavelmente não serão aninhados e coisas que você só vou fazer uma vez.

Veja Substituição de comandos: backticks ou cifrão / paren enclosed? .

    
por 21.01.2015 / 23:32
1

Evito usar o construtor $() porque ele não é portátil - no mundo real. Você listou quatro conchas - há muito mais variações do que isso (uma ordem de magnitude?). Tente executar seu script no Solaris / bin / sh e veja como você está.

Por outro lado, quando você para de suportar sistemas antigos? você nunca pode progredir para novas maneiras de fazer as coisas? Eu acho que você deve confiar em seu próprio julgamento, e se você puder ver uma vantagem definitiva do novo caminho sobre o velho, então vá em frente ... não é um deles (pessoalmente eu acho os bacilares muito mais claros - eles não podem ser confundido com a substituição de variáveis de shell, que é uma coisa diferente)

    
por 24.01.2015 / 02:06