El comando `eval` se utiliza en bash para ejecutar argumentos como un comando shell. Los argumentos se unen en una cadena y se toman como entrada para que el comando de la shell ejecute el comando. `eval` ejecuta el comando en el shell actual. Este comando es útil cuando se requiere ejecutar algún comando que contenga un operador especial o palabras clave reservadas. Este comando puede ser usado en cualquier script también donde el nombre de la variable es desconocido hasta ejecutar el script. Este tutorial ayudará a los usuarios de Linux a aprender el uso de este comando.
Sintaxis:
Aquí, los argumentos son analizados y combinados en una cadena que será ejecutada por el shell. `eval` devuelve un código de estado de salida después de ejecutar el comando. `eval` devuelve 0 como código de estado de salida si no se proporciona ningún argumento o sólo se proporciona un argumento nulo.
Ejemplo-1: Ejecutar el comando `wc` usando `eval`
Suponga que un archivo de texto llamado «departamento.txt» contiene el siguiente texto. El número total de líneas del archivo puede ser contado por el comando `wc`.
departamento.txt
EEE
ETE
INGLES
BBA
PHARMACY
El siguiente comando almacenará el comando `wc` para contar el número total de líneas del archivo, department.txt a la variable, $mycommand.
El siguiente comando `eval` ejecutará el comando `wc` e imprimirá el número total de líneas.
Salida:
La salida muestra que el archivo department.txt tiene 6 líneas.
Ejemplo-2: Ejecutar el comando `expr` usando `eval`
Crea un archivo bash llamado evaltest.sh y añade el siguiente script. Este script asignará dos valores enteros en la variable $x y $y. ¡Los comandos `expr` y `echo` se asignan a dos variables, $c1 y $c2 que se ejecutan posteriormente mediante el comando `eval`.
evaltest.sh
#Inicializa las variables x e y
x=5
y=15
#La primera variable de comando se utiliza para asignar el comando `expr` para sumar los valores de $x e $y
c1=»`expr $x + $y`»
#El segundo comando se utiliza para asignar el comando `echo`
c2=»echo»
#`eval` calculará e imprimirá la suma de $x e $y ejecutando los comandos de las variables $c1
y $c2
eval $c2 $c1
Ejecuta el script.
La suma de 5 y 15 es 20 que se muestra en la salida.
Ejemplo-3: Imprimir el valor de una variable que se asigna en otra variable
Crear un script bash llamado evaltest2.sh con el siguiente script. Aquí, una variable se utiliza para asignar el nombre de otra variable que contiene una cadena de datos. ¡El comando `eval` imprimirá el valor de la variable que contiene el nombre de otra variable como contenido.
evaltest2.sh
# Asigna un valor de cadena a la variable, $str1
str1=»Shell Script»
# Asigna el nombre de la variable, «str1» a la variable $str2
str2=str1
#Guarda el comando en la variable, $command
command=»echo»
# El comando `eval` ejecutará el comando `echo` e imprimirá el valor de la variable
que contiene en otra variable
eval $command \${$str2}
Ejecuta el script.
Se imprime el valor de la variable, $str1.
Hay otra forma de acceder al valor de una variable cuyo nombre es el valor de otra variable. Utilizando el símbolo ‘!’ se puede acceder al valor de este tipo de variables. El siguiente comando puede ser utilizado como una alternativa del script anterior y la salida será la misma.
Ejemplo-4: Crear una serie de variables con valores y calcular la suma de los valores utilizando el comando `eval`
Crea un script bash llamado evaltest3.sh y añade el siguiente script. Este script creará una serie de variables y almacenará los valores en las variables utilizando el comando `eval`. Los valores de las variables serán sumados y almacenados en una variable llamada $sum. A continuación, el comando `echo` con valores de cadena se asigna a una variable que se utiliza en el comando `eval` para imprimir el valor de la variable $suma.
evaltest3.sh
# Inicializa la variable $suma con el valor 0
suma=0
# Declara un bucle for que iterará durante 4 veces
para n en {1..4}
hacer
# Crear cuatro variables usando el comando eval
eval x$n=$n
# Sumar los valores de la variable con $sum
sum=$(($sum+$x$n))
hecho
# Asignar el comando `echo con la cadena en una variable
command=»echo ‘El resultado de la suma='»
# El comando `eval` imprime el valor de la suma usando variables
eval $command $sum
Ejecuta el script.
La suma de las cuatro variables es, 1+2+3+4=10 que se imprime.
Ejemplo-5: Uso del comando `eval` para eliminar la lista de archivos
Crea un archivo bash llamado evaltest4.sh con el siguiente script. Este script leerá tres argumentos de la línea de comandos como nombres de archivos que serán eliminados y almacenará los valores de los argumentos en una variable de matriz, $fn. El comando `rm’ se almacena en una variable, $command. ¡El bucle For se declara aquí para recuperar cada nombre de archivo y eliminar el archivo usando el comando `eval` si el archivo existe.
evaltest4.sh
#Declara un array
declara -.A fn
# Lee tres argumentos de la línea de comandos y los almacena en tres índices del array
fn=$1
fn=$2
fn=$3
# Almacena el comando de eliminación en una variable
command=»rm»
# el bucle for iterará durante tres veces para leer tres elementos del array
for index in 0 1 2
do
# Comprueba si el archivo existe o no
if } ]]; then
# si el archivo existe entonces elimina el archivo
eval $command ${fn}
# Informa al usuario que el archivo se elimina
echo «${fn} se elimina.»
Else
#Informa al usuario que el archivo no existe
echo «${fn} no existe.»
fi
hecho
Ejecuta el script.
Aquí se proporcionan tres nombres de archivo en el momento de ejecutar el script. La salida muestra que marks.docx y product.docx existen en la ubicación actual y los archivos son eliminados y, item.txt no existe en la ubicación actual.
Conclusión
Cualquier comando bash puede ser ejecutado por el comando `eval` declarándolo como una cadena. El comando `eval` se utiliza en este tutorial para ejecutar diferentes comandos incorporados de bash y crear una serie de variables. Los usos del comando `eval` serán aclarados para los usuarios y serán capaces de usar este comando para varios propósitos después de leer este tutorial.