¿La inclusión de matrices en POSIX provocaría la ruptura del estándar POSIX?
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
No sé qué texto que usted se refiere, pero estoy bastante seguro de que este no es el caso, puesto bash
y ksh93
se 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, bash
y es ksh93
posible 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 vi
implementació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. dash
carece 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.