Bash: nombre de variable en parámetro posicional (Solucionado)

Imagen de Paulo_Jorge
0 puntos

Saludos
Estoy aprendiendo bash. Estoy escribiendo un script que toma como primer parámetro posicional ($1) el nombre de una variable. Como puedo hacer que el script imprima dicha variable?
ejemplo:

script:
#!/bin/bash
variable1=hola
variable2=hello
 ## Aquí está el problema, necesito que el script imprima la variable cuyo nombre
 ## es $1. Algo como echo ${$1} pero que funcione jeje

...De modo a conseguir esto en la línea de comandos

$ script variable1
hola
$ script variable2
hello

¿Cómo puedo conseguir el resultado de una variable cuyo nombre es el resultado de otra variable? :s
¡Gracias por sus respuestas!

PD: Si no se puede, he pensado crear un archivo de configuración con las variables. Entonces buscaría por $1 en el archivo y gracias a la expansión de parámetros obtendría el resultado de la variable cuyo nombre es $1...

Imagen de supermortadelo
+1
0
-1

No se si te pillo

A ver esto:

variable1=hola
variable2=$variable1
echo $variable2

Un saludo

+1
0
-1
Imagen de sordoman
+1
0
-1

Hola Paulo_Jorge

No se si te pillo yo tampoco pero yo diria ke algo como esto?:

#!/bin/bash
variable1=hola
variable2=hello

case $1 in

variable1)
    echo "$variable1";;

variable2)
    echo "$variable2";;
esac

 

Suerte a ver ke tal, ya contaras

+1
0
-1
Imagen de Paulo_Jorge
+1
0
-1

uhh soy un lío explicándome...
El comportamiento en si sería ese... Pero imagina que tienes una lista enooorme de variables. EL script tendría que tener un case igual de enorme.
¿No se puede hacer que bash imprima directamente la variable cuyo nombre es el argumento $1?
Algo como echo ${$1}, o sea, imprimir la variable ${variable} de nombre $1 => ${$1}...
Es que creo que no se puede hacer... que yo sepa de la forma que he mencionado no se puede...
saludos y gracias por las respuestas :)

+1
0
-1

Chuck Norris sí sabe programar...

Imagen de Paulo_Jorge
+1
0
-1

No me he explicado bien jeje
Lo que quiero es que el usuario pueda elegir qué variable imprimir (variable1 o variable2) desde la línea de comandos. Para ello, da el nombre de la variable como argumento al comando...

ejemplo:
$ script variable1
hola # el script imprime la variable 1 porque el argumento $1 de script era "variable1"

El comportamiento sería similar a este ejemplo:

script:
#!/bin/bash
declare -A lista
lista["variable1"]="hola"
lista["variable2"]="hello"
echo ${lista[$1]}
$ script variable2
hello # o sea, el script imprime la variable "variable2"

...Pero sin tener que utilizar arrays, imprimiendo directamente el resultado de la variable cuyo nombre es el argumento $1...
algo como...

echo ${$1}...

En fin... espero haberme hecho entender un poco mejor jeje
¿Se puede hacer eso?
saludos

+1
0
-1

Chuck Norris sí sabe programar...

Imagen de supermortadelo
+1
0
-1

#!/bin/bash

echo "Elige 1 o 2"

read opcion

variable1="hola"
variable2="hello"

if [ $opcion -eq 1 ];
then
echo $variable1
elif [ $opcion -eq 2 ];
then
echo $variable2
else
echo "valor no valido"
fi

+1
0
-1
Imagen de Paulo_Jorge
+1
0
-1

Utilizaré grep y un archivo con las variables:

linea=$(grep $1 $archivo)
if [ $? = 1 ]
then
	printf "[FALLO]\n" >&2
	return 2;
fi
resultado=${linea##*=}
printf " $resultado [ENCONTRADO]\n"

Lo más probable es que no se pueda hacerlo como yo quería. De todas maneras, no se me ocurría ninguna solución.
Así que, muchas gracias por intentarlo :)
Saludos!

+1
0
-1

Chuck Norris sí sabe programar...

Imagen de razaAztk
+1
0
-1

A ver, que tal esto:
Haciendo uso de funciones.

#!/bin/bash

v01() { echo 'hola'; }

v02() { echo 'hi'; }

$1

Resultado:

$ ./test.sh v01
hola

disculpa que conteste tan tarde, y suerte con tus scripts!

Saludos!

+1
0
-1

void hey(int x,int y)
{
if (x && y)
 printf("http://libertadhack.blogspot.com/");
else
 printf("http://libertadpunk.blogspot.com/");
}
Imagen de aika
+1
0
-1

Supongamos que tenemos un script llamado variables.sh en el que hay multitud de variables.
Ahora llamamos al script con un parámetro que es el nombre de una de esas variables:

$ variables.sh var1 var3
#!/bin/bash

var1="pensar produce estrés en los que están a tu alrededor";
var2="contenido de var 2";
var3="Fes l'amor i no la guerra.";

echo "Nom de la variable: $1";
echo "Contenido de la variable (indirección): ${!1}";
echo "Nom de la variable: $2";
echo "Contenido de la variable (indirección): ${!2}";

Resultado:

Nom de la variable: var1
Contenido de la variable (indirección): pensar produce estrés en los que están a tu alrededor
Nom de la variable: var3
Contenido de la variable (indirección): Fes l'amor i no la guerra.

Espero que esto resuelva tu problema

+1
0
-1
Imagen de eurojet
+1
0
-1

Mediante la funcion eval http://www.unix.com/man-page/posix/1posix/eval/

#!/bin/bash

variable1=hola
variable2=hello
x=$1
nombre='$'$x
eval valor='$'$x
echo $nombre=$valor

Saludos

+1
0
-1