Bash: variables de variables
Estaba creando un pequeño script en BASH en el que necesitaba variables a partir de los nombres de otras variables, en tres palabras, "variables de variables". Pensé que sería sencillo, cuestión de jugar un poco con los caracteres que definen las variables -$(){}- no debería complicarse demasiado.
Sin embargo el método chino de prueba/error no sirvió de mucho porque despues de un buen rato seguía como al principio pero con menos paciencia y nulas ganas de perder más tiempo navegando entre manuales, Google y otros recursos que no me hacían avanzar.
Las alternativas, preguntar al amigo Juanjo (en cierto modo el script tenía relación con él), desconectar durante un rato y/o matar a un gatito. Visto que la última no era ni justa ni real -ni lo admitiría aunque lo hubiese hecho-, las dos anteriores si consiguieron sus frutos:
CTL_LIST=([APACHE]=/etc/init.d/whatever [BIND]=/etc/init.d/whatever2);
SERVICIO=APACHE;
CMD=${CTL_LIST[$SERVICIO]};
echo $CMD
En principio aunque la idea era buena, queda demasiado feo puesto que los índices en BASH deben ser numéricos, usar índices para los servicios no era adecuado (admito BASH como no-lenguaje de programación, y si, se podría hacer con Ruby, Perl, Python... pero ya era más cuestión de resolver el crucigrama que de una simple elección).
APACHE_CTL="/etc/init.d/apache2"
CMD="${1}_CTL"
echo ${!CMD}
Al final la solución era sencilla: ${!CMD} y usar adecuadamente las comillas. Así que aquí queda, documentado, para que -espero- alguien lo encuentre en caso de querer usar "variables de variables en bash" y no tenga que dar tantas vueltas como yo he hecho.
Está claro que desconectar y obtener distintas opiniones de un crucigrama es bueno y nos hace cambiar la perspectiva de lo que se plantea.