Índice

El comando eval

Sintaxis

eval expr1 exp2 ... expn

El comando eval permite la realización de una doble evaluación en la línea de comandos. Recibe como argumento un conjunto de expresiones en el que efectúa las operaciones siguientes:

  • Primera etapa: los caracteres especiales contenidos en las expresiones se tratan. El resultado del tratamiento genera una o varias expresiones: eval otra_exp1 otra_exp2 ... otra_expn. La expresión otra_exp1 representará el comando Unix que se debe ejecutar en la segunda etapa.

  • Segunda etapa: eval va a ejecutar el comando otra_exp1 otra_exp2 ... otra_expn. Sin embargo, previamente, esta línea se va a someter a una nueva evaluación. Los caracteres especiales se tratan y después el comando se lanza.

Ejemplo

Definición de la variable nombre que contiene "cristina":

$ nombre=cristina

Definición de la variable var que contiene el nombre de la variable definida justo arriba:

$ var=nombre

¿Cómo imprimir por pantalla el valor "cristina" sirviéndose de la variable var? En el comando siguiente, el shell sustituye $$ por el PID del shell actual:

$ echo $$var 
17689var

En el comando siguiente, el nombre de la variable está aislado. Este no podrá funcionar: el shell genera un error de sintaxis, ya que no puede tratar dos caracteres "$" simultáneamente:

$ echo ${$var} 
ksh: ${$var}: bad substitution

Es indispensable usar el comando eval:

$ eval echo \$$var 
cristina 
$

El orden de evaluación ...