I terminatori "all'indietro" per if e case sono univoci per lo scripting della shell?

4

In bash almeno, if e case blocchi sono chiusi in questo modo:

if some-expr
then
    echo "hello world"
fi

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

in contrasto con la chiusura più tipica di end o endif / endcase . Per quanto ne so, questa convenzione piuttosto divertente è unica per lo scripting di shell e non ho mai visto un terminale di blocco così strano da nessun'altra parte. A volte cose come questa hanno origine in un'altra lingua (come il elsif di Ruby proveniente da Perl), o una strana giustificazione. Questa caratteristica dello script di shell ha una storia dietro? Si trova in altre lingue?

    
posta tomjakubowski 12.06.2012 - 06:44
fonte

2 risposte

11

Secondo Wikipedia, il sh programma ha riutilizzato la sintassi da 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.

Poiché Bash era la sostituzione GNU di sh , riutilizzava la stessa sintassi per la compatibilità all'indietro.

    
risposta data 12.06.2012 - 06:50
fonte
6

No. Trovate questi costrutti di linguaggio "invertiti" in molte lingue:

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

:)

    
risposta data 12.06.2012 - 06:48
fonte

Leggi altre domande sui tag