L'inclusione di array in POSIX provocherebbe la rottura dello standard POSIX?

Aug 16 2020

La possibilità di utilizzare array in bash e ksh93 è molto conveniente quando si presenta la necessità di accedere rapidamente a elementi da più array. Ecco un rapido esempio:

#!/bin/ksh93 --

array1=(1 2 3 4 5 6 7)

array2=(8 9 10 11 12 13 14)

printf '%s\n' "Third element of array1 is ${array1[2]} and fifth element of array2 is ${array2[4]}"

Ricordo di aver letto di sfuggita che almeno una parte del motivo per cui gli array non sono inclusi nello standard POSIX è che così facendo si rompono le cose. È vero? Quali cose si rompono?

Risposte

2 bk2204 Aug 18 2020 at 08:39

Non so a quale testo ti riferisci, ma sono abbastanza sicuro che non sia così, poiché bashe ksh93dovrebbero essere conformi a POSIX, e se gli array causassero la rottura delle shell POSIX, allora quelle shell non sarebbero conformi .

Tuttavia, ciò non significa che POSIX possa includerli. Primo, bashe ksh93potrebbe non implementare gli array allo stesso modo, e POSIX non vorrebbe specificare una caratteristica che si comportava in modo diverso nelle implementazioni storiche ampiamente distribuite.

In secondo luogo, POSIX generalmente non specifica molte funzionalità. Solo ora c'è anche una proposta da richiedere local, che è ampiamente distribuita in quasi tutte le shell POSIX open source tranne ksh93. Allo stesso modo, sarebbe possibile utilizzare viun'implementazione che implementa solo le funzionalità POSIX, ma la maggior parte degli utenti la troverebbe piuttosto scarsa sulle funzionalità.

Infine, POSIX preferisce standardizzare le cose che sono già disponibili nella maggior parte delle implementazioni e gli array di shell non sono una cosa del genere. dashmanca di loro, così come la maggior parte delle shell con cui condivide il lignaggio, così come piccole implementazioni come busybox. Un ambiente POSIX completo può essere relativamente piccolo, e questo è molto comodo per le persone che hanno bisogno di lavorare con i sistemi embedded, quindi i simpatici sono spesso omessi a favore della semplicità.

Nota anche che solo perché l'implementazione open source ampiamente distribuita ha una caratteristica non significa che gli ambienti Unix commerciali lo faranno. Anche se POSIX dovesse specificare gli array in una nuova versione, sarebbero passati molti anni prima che tutti quei sistemi fossero aggiornati per supportarli.