Il comando `eval` è usato in bash per eseguire gli argomenti come un comando di shell. Gli argomenti sono uniti in una stringa e presi come input per il comando di shell per eseguire il comando. `eval` esegue il comando nella shell corrente. Questo comando è utile quando è necessario eseguire qualsiasi comando che contenga un operatore speciale o parole chiave riservate. Questo comando può essere usato in qualsiasi script anche dove il nome della variabile è sconosciuto fino all’esecuzione dello script. Questo tutorial aiuterà gli utenti Linux ad imparare l’uso di questo comando.
Sintassi:
Qui, gli argomenti vengono analizzati e combinati in una stringa che verrà eseguita dalla shell. `eval` restituisce un codice di stato di uscita dopo l’esecuzione del comando. `eval` restituisce 0 come codice di stato di uscita se non viene fornito alcun argomento o se viene fornito solo un argomento nullo.
Esempio-1: Eseguire il comando `wc` usando `eval`
Supponiamo che un file di testo chiamato “dipartimento.txt” contenga il seguente testo. Il numero totale di linee del file può essere contato dal comando `wc`.
dipartimento.txt
EEE
ETE
ENGLISH
BBA
PHARMACY
Il seguente comando memorizzerà il comando `wc` per contare il numero totale di linee del file, department.txt nella variabile, $mycommand.
Il seguente comando `eval` esegue il comando `wc` e stampa il numero totale di linee.
Output:
L’output mostra che il file department.txt ha 6 linee.
Esempio-2: Eseguire il comando `expr` usando `eval`
Creare un file bash chiamato evaltest.sh e aggiungere il seguente script. Questo script assegnerà due valori interi nella variabile $x e $y. I comandi `expr` e `echo` sono assegnati in due variabili, $c1 e $c2 che vengono eseguite successivamente usando il comando `eval`.
evaltest.sh
#Inizializza le variabili x e y
x=5
y=15
#La prima variabile di comando è usata per assegnare il comando `expr` per aggiungere i valori di $x e $y
c1=”`expr $x + $y`”
#Il secondo comando è usato per assegnare il comando `echo`
c2=”echo”
##`eval` calcolerà e stamperà la somma di $x e $y eseguendo i comandi delle variabili $c1
e $c2
eval $c2 $c1
Esegui lo script.
La somma di 5 e 15 è 20 che viene mostrata nell’output.
Esempio-3: Stampa il valore di una variabile che è assegnata in un’altra variabile
Crea uno script bash chiamato evaltest2.sh con lo script seguente. Qui, una variabile è usata per assegnare il nome di un’altra variabile che contiene una stringa di dati. Il comando `eval` stamperà il valore della variabile che contiene il nome di un’altra variabile come contenuto.
evaltest2.sh
# Assegna un valore di stringa nella variabile, $str1
str1=”Shell Script”
# Assegna il nome della variabile “str1” alla variabile $str2
str2=str1
# Memorizza il comando nella variabile, $comando
comando=”echo”
# Il comando `eval` eseguirà il comando `echo` e stamperà il valore della variabile
che contiene in un’altra variabile
eval $comando \${$str2}
Esegui lo script.
Il valore della variabile $str1 viene stampato.
C’è un altro modo per accedere al valore di una variabile il cui nome è il valore di un’altra variabile. Usando il simbolo ‘!’ si può accedere al valore di questo tipo di variabile. Il seguente comando può essere usato come alternativa allo script precedente e l’output sarà lo stesso.
Esempio-4: Creare una serie di variabili con valori e calcolare la somma dei valori usando il comando `eval`
Creare uno script bash chiamato evaltest3.sh e aggiungere il seguente script. Questo script creerà una serie di variabili e memorizzerà i valori nelle variabili usando il comando `eval`. I valori delle variabili saranno aggiunti e memorizzati in una variabile chiamata $sum. Successivamente, il comando `echo` con i valori delle stringhe viene assegnato in una variabile che viene usata nel comando `eval` per stampare il valore della variabile $sum.
evaltest3.sh
# Inizializza la variabile $sum con il valore 0
sum=0
# Dichiara un ciclo for che itera per 4 volte
for n in {1..4}
do
# Crea quattro variabili usando il comando eval
eval x$n=$n
# Aggiungi i valori della variabile con $sum
sum=$(($sum+$x$n))
done
# Assegna il comando `echo con la stringa in una variabile
command=”echo ‘Il risultato della somma='”
# Comando `eval` stampa il valore della somma usando le variabili
eval $comando $sum
Esegui lo script.
La somma delle quattro variabili è, 1+2+3+4=10 che viene stampata.
Esempio-5: Usare il comando `eval` per rimuovere la lista dei file
Creare un file bash chiamato evaltest4.sh con lo script seguente. Questo script leggerà tre argomenti della linea di comando come nomi di file che saranno rimossi e memorizzerà i valori degli argomenti in una variabile array, $fn. Il comando `rm’ è memorizzato in una variabile, $comando. Il ciclo For è dichiarato qui per recuperare ogni nome di file e rimuovere il file usando il comando `eval` se il file esiste.
evaltest4.sh
#Dichiarare un array
dichiarare -A fn
# Leggi tre argomenti della riga di comando e memorizza in tre indici dell’array
fn=$1
fn=$2
fn=$3
# Memorizza il comando di rimozione in una variabile
command=”rm”
# for loop itererà per tre volte per leggere tre elementi dell’array
for index in 0 1 2
do
# Controlla se il file esiste o no
if } ]]]; then
# se il file esiste allora rimuovi il file
eval $command ${fn}
# Informa l’utente che il file è stato rimosso
echo “${fn} è stato cancellato.”
Else
#Informa l’utente che il file non esiste
echo “${fn} non esiste.”
fi
fatto
Esegui lo script.
Qui vengono forniti tre nomi di file al momento dell’esecuzione dello script. L’output mostra che marks.docx e product.docx esistono nella posizione corrente e i file vengono rimossi e, item.txt non esiste nella posizione corrente.
Conclusione
Ogni comando bash può essere eseguito dal comando `eval` dichiarandolo come una stringa. Il comando `eval` è usato in questo tutorial per eseguire diversi comandi integrati di bash e creare una serie di variabili. Gli usi del comando `eval` saranno chiariti per gli utenti e saranno in grado di usare questo comando per vari scopi dopo aver letto questo tutorial.