Matrices en Dash

Nombre: MATRIZ ()
Autor: ROOT_
Origen: Yo mismo
Lenguaje: Dash script
Licencia: GPL v3.0+
Propósito: Poder usar matrices en Dash
Dependencias: Ninguna especial, sed, grep, printf,... cosas que tiene cualquier sistema.

----------------------

Hola.

Resulta que no sabía nada acerca de los bashismos. Yo programo (programaba) en Bash. Me gusta, es potente para tareas de gestión del sistema y demás y me lo paso muy bien haciendo scripts (soy un script kiddie :)).

La verdad es que me gusta para los programas que uso a diario, poder utilizar (en lo posible, para copias de seguridad, gestión del sistema, tareas programadas...) programas hechos por mí. Te dá un subidón de autoestima. :).

Leí por Internet que Bash no era estándar y que en Debian teníamos a Dash, y me propuse portar mis scripts para hacerlos compatibles con POSIX, pero mi problema es que tenía MUCHÍSIMOS bashismos.

Lo que más echaba de menos es la gestión de matrices (aunque fueran unidimensionales) de Bash, así que he implementado una función que las emula.

Por lo que he leído por Internet, no hay una solución clara, así que me puse a pensar en cómo hacer algo parecido que me valiera.
He implementado una función que te hace el apaño. La desventaja es que es MUCHO más lento que las matrices de Bash, pero bueno, yo no uso una gran cantidad de datos y, aunque no es lo más elegante del mundo, a mí me vale para mis scripts. Yo creo que no ha quedado mal.

Pensé en hacerlo con IFS, pero me daban miedo los caracteres especiales y tal, así que opté por poner un separador que no fuera un caracter, sino una cadena de caracteres chungos para que no interfiriera con los datos.
La cosa funciona, pero genera bastante información basura en la variable. Como no uso una cantidad enorme de datos en las matrices no me he preocupado más del tema; supongo que para gente que quiera usar datos a saco esto ni se acerca, pero para los que hacemos un script para manejar unos cuantos elementos en la matriz, sobra (por lo menos a mí).

Aquí os dejo la función para Dash. A mí me va bien.

Este es su uso en los scripts:

- Para saber el número de elementos que contiene:
NUMERO_ELEMENTOS_MATRIZ=$(MATRIZ "NUMERO" "$MATRIZ")

- Para acceder a un elemento:
DATO_DE_LA_MATRIZ="$(MATRIZ "ACCESO" $CONTADOR "$ELEMENTO" "$MATRIZ")"

- Para añadir un elemento:
MATRIZ="$(MATRIZ "INSERTAR" $CONTADOR "$ELEMENTO" "$MATRIZ")"

Espero que a alguien le sirva. Un saludos coleguitas.

Como no conseguía que me quedara el código bien formateado en este post, lo he subido a "pastebin.com":

http://pastebin.com/vtCgPxzG

(Sólo teneis que pinchar al botoncillo de "Toggle text wrapping" para que se vea bien sin cortar las líneas).