¿La inclusión de matrices en POSIX provocaría la ruptura del estándar POSIX?

Aug 16 2020

La capacidad de usar matrices en bash y ksh93 es muy conveniente cuando surge la necesidad de acceder rápidamente a elementos de varias matrices. Aquí hay un ejemplo rápido:

#!/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]}"

Recuerdo haber leído de pasada que al menos parte de la razón por la que las matrices no están incluidas en el estándar POSIX es que hacerlo rompería las cosas. ¿Es esto cierto? ¿Qué cosas se romperían?

Respuestas

2 bk2204 Aug 18 2020 at 08:39

No sé qué texto que usted se refiere, pero estoy bastante seguro de que este no es el caso, puesto bashy ksh93se supone que son compatibles con POSIX, y si matrices hicieron causa conchas POSIX para romper, entonces esas conchas gustaría no cumple .

Sin embargo, eso no significa que POSIX probablemente los incluya. Primero, bashy es ksh93posible que no implemente matrices de la misma manera, y POSIX no querría especificar una característica que se comportara de manera diferente en implementaciones históricas ampliamente implementadas.

En segundo lugar, POSIX generalmente no especifica muchas características. Solo ahora hay una propuesta para requerir local, que se implementa ampliamente en casi todos los shell POSIX de código abierto, excepto ksh93. De manera similar, sería posible usar una viimplementación que implementara solo las características POSIX, pero la mayoría de los usuarios la encontrarían bastante escasa en cuanto a características.

Finalmente, POSIX prefiere estandarizar cosas que ya están disponibles en la mayoría de las implementaciones, y las matrices de shell no lo son. dashcarece de ellos, al igual que la mayoría de los shells con los que comparte linaje, así como pequeñas implementaciones como busybox. Un entorno POSIX completo puede ser relativamente pequeño, y eso es muy conveniente para las personas que necesitan trabajar con sistemas integrados, por lo que los elementos agradables a menudo se omiten en favor de la simplicidad.

Tenga en cuenta también que el hecho de que la implementación de código abierto ampliamente implementada tenga una característica no significa que los entornos comerciales Unix la tengan. Incluso si POSIX especificara arreglos en una nueva versión, pasarían muchos años antes de que todos esos sistemas se actualizaran para admitirlos.