[sh] Expansión de variables, indirección...

Guolas...

Vereis, para acortar mis scripts y aumentar la elegancia, estoy intentando modificar largas secuencias de case's por array's más sustituciones de variables...


Por ejemplo, suponiendo que recibo como parámetro a mi sh un determinado producto alimenticio, por ejemplo jabón xD


./my_sh jabon


Para hacer un echo del valor que tiene la variable jabon en mi sh escribo:

echo "$producto= $[$1]"


Y funciona, mola mogollón hacer uso de esta indireción y que una variable contenga el nombre de la verdadera variable, pero, yo lo que quiero es rizar el rizo para que funcioneesto:

./my_sh jabon valor_del_jabon

Usease, conseguir mediante inderección modificar el valor de un variable...

He intentado con:

temp=$1
shift

$temp=$1

Con set $temp=$1, y multitud de cosas así... pero no consigo que esto:

echo "$producto= "$[$producto]""

De como resultado: jabon= 4000 (por ejemplo)

¿ Se puede conseguir lo que intento perpetar ? ¿ Hace falta que esté declarada antes la variable ?

No sé que se me escapa pero me parece posible... Una vez solucionado esto, lo conectaría a un array y joé, reduciría un motón algunos de mis shell scripts...

Saludo++ [plas]


PD: Vale, conseguido x'D, se me ocurrió que siendo una cosa tan oligofrénica al bash le daría por quejarse, un:

typeset -i $producto=$cantidad

Y ahora el bash se lo traga con papas X-D X-D X-D X-D
No sé si te he entendido muy bien, pero con esto no te valdría?:

#!/bin/bash
set $1=$2
echo $[$1]
Me vale si $2 es un valor numerico, si $2 es un texto, bash no lo guarda bien....


Osea, dos casos, si $2 es un número, con:

typeset -i $1=$2
echo $[$1]

Funciona.


Si $2 es un texto, por ejemplo "comprar" ó "vender" , en la variable no se guarda correctamente ése "comprar"...

Estoy probando con typeset y con set, pero no lo consigo...



PD:

Edit, lo consigo usando "export",peeeeero bash se hace un lío..
Me explico:

for i in $productos
do
echo $i=$[$i]
done

Si listo las variables, si son números, haciendo typeset -i lista bien todo...

Si ejecuto lo mismo, haciendo export en vez de typeset -i usando texto en vez de números... no funciona... pero sin embargo, si listo una variable del array sí funciona, por ejemplo:

echo $aalimentos

Y me devuelve "comprar"...

Jué que lío, parece como si no funcionara la asociatividad, pero sí funciona si lo hago variable por variable
(que no me sirve, porque lo que busco es tener toooodas las variables recogidas en el array, e ir haciendo comprobaciones en un bucle, y no tener que ir haciendo las comprobaciones por código variable a variable...)


En fín, perdón por las divagaciones .. si alguien no entiende lo que busco, lo intento explicar mejor :-S

Saludos
2 respuestas