Os terminadores são "invertidos" para if e case exclusivos do shell script?

4

No bash, pelo menos, if e case blocos são fechados assim:

if some-expr
then
    echo "hello world"
fi

case $some-var in
[1-5])
    do-a-thing
    ;;
*)
    do-another-thing
esac

ao contrário do fechamento mais comum de end ou endif / endcase . Tanto quanto eu sei, esta convenção bastante engraçada é exclusiva para scripts de shell e eu nunca vi um terminador de bloco tão estranho em nenhum outro lugar. Às vezes, coisas como essa têm origem em outra linguagem (como elsif de Ruby vindo de Perl), ou uma estranha justificativa. Este recurso de script de shell tem uma história por trás disso? É encontrado em outras línguas?

    
por tomjakubowski 12.06.2012 / 06:44
fonte

2 respostas

11

De acordo com a Wikipedia, o sh programa reutilizou a sintaxe de ALGOL 68 .

Stephen Bourne carried into this shell some aspects of the ALGOL 68C compiler that he had been working on at Cambridge University. Notably he reused portions of ALGOL 68's "if ~ then ~ elif ~ else ~ fi", "case ~ in ~ esac" and "for ~ while ~ do ~ od" (using done instead of od) clauses in the common Unix Bourne shell syntax.

Como o Bash era o substituto GNU de sh , ele reutilizou a mesma sintaxe para compatibilidade com versões anteriores.

    
por 12.06.2012 / 06:50
fonte
6

Não. Você encontra essas construções de linguagem "reversas" em vários idiomas:

  • { e } ,
  • /* e */
  • (* e *)

:)

    
por 12.06.2012 / 06:48
fonte