Příkaz `eval` se v bashi používá ke spuštění argumentů jako příkaz shellu. Argumenty se spojí do řetězce a jsou brány jako vstup pro příkaz shellu, který příkaz provede. Příkaz `eval` provede příkaz v aktuálním shellu. Tento příkaz je užitečný, pokud je třeba provést nějaký příkaz, který obsahuje speciální operátor nebo vyhrazená klíčová slova. Tento příkaz lze použít i v libovolném skriptu, kde je jméno proměnné neznámé až do spuštění skriptu. Tento návod pomůže uživatelům Linuxu naučit se používat tento příkaz.
Syntaxe:
Příkazy jsou zde analyzovány a spojeny do řetězce, který shell vykoná. Po provedení příkazu `eval` vrací stavový kód ukončení. Pokud není zadán žádný argument nebo je zadán pouze nulový argument, vrátí `eval` jako kód ukončení 0.
Příklad-1: Provedení příkazu `wc` pomocí `eval`
Předpokládejme, že textový soubor s názvem „department.txt“ obsahuje následující text. Celkový počet řádků souboru lze spočítat pomocí příkazu `wc`.
oddělení.txt
EEE
ETE
ENGLISH
BBA
PHARMACY
Následující příkaz uloží příkaz `wc` pro spočítání celkového počtu řádků souboru department.txt do proměnné $mycommand.
Následující příkaz `eval` spustí příkaz `wc` a vypíše celkový počet řádků.
Výstup:
Výstup ukazuje, že department.txt soubor má 6 řádků.
Příklad-2: Proveďte příkaz `expr` pomocí `eval`
Vytvořte soubor bash s názvem evaltest.sh a přidejte následující skript. Tento skript přiřadí dvě celočíselné hodnoty do proměnných $x a $y. Příkazy `expr` a `echo` se přiřadí do dvou proměnných $c1 a $c2, které se později provedou pomocí příkazu `eval`.
evaltest.sh
#Inicializujte proměnné x a y
x=5
y=15
#První proměnná příkazu slouží k přiřazení příkazu `expr`, který sečte hodnoty $x a $y
c1=“`expr $x + $y`“
#Druhý příkaz. proměnná slouží k přiřazení příkazu `echo`
c2=“echo“
#`eval` vypočítá a vypíše součet $x a $y provedením příkazů proměnných $c1
a $c2
eval $c2 $c1
Spustíme skript.
Součet 5 a 15 je 20, který se zobrazí na výstupu.
Příklad-3: Vypište hodnotu proměnné, která je přiřazena v jiné proměnné
Vytvořte skript bash s názvem evaltest2.sh s následujícím skriptem. Zde je jedné proměnné přiřazen název jiné proměnné, která obsahuje řetězcový údaj. Příkaz `eval` vypíše jako obsah hodnotu proměnné, která obsahuje jméno jiné proměnné.
evaltest2.sh
# Přiřaďte do proměnné řetězcovou hodnotu $str1
str1=“Shell Script“
# Přiřaďte název proměnné „str1“ do proměnné $str2
str2=str1
#Uložte příkaz do proměnné, $command
command=“echo“
# Příkaz `eval` provede příkaz `echo` a vypíše hodnotu proměnné
kterou obsahuje v jiné proměnné
eval $command \${$str2}
Spustíme skript.
Vypíše se hodnota proměnné $str1.
Existuje ještě jeden způsob přístupu k hodnotě proměnné, jejíž jméno je hodnotou jiné proměnné. Pomocí symbolu ‚!“ lze přistupovat k hodnotě tohoto typu proměnné. Následující příkaz lze použít jako alternativu předchozího skriptu a výstup bude stejný.
Příklad-4: Vytvořte řadu proměnných s hodnotami a vypočítejte součet hodnot pomocí příkazu `eval`
Vytvořte skript bash s názvem evaltest3.sh a přidejte následující skript. Tento skript vytvoří řadu proměnných a uloží do nich hodnoty pomocí příkazu `eval`. Hodnoty proměnných budou sečteny a uloženy do proměnné s názvem $sum. Dále se do proměnné přiřadí příkaz `echo` s řetězcovými hodnotami, který se použije v příkazu `eval` k vypsání hodnoty proměnné $sum.
evaltest3.sh
# Inicializujte proměnnou $sum hodnotou 0
sum=0
# Deklarujte cyklus for, který bude iterovat 4krát
pro n v {1..4}
do
# Vytvořte čtyři proměnné pomocí příkazu eval
eval x$n=$n
# Sečtěte hodnoty proměnné s $sum
sum=$(($sum+$x$n))
done
# Přiřaďte příkaz `echo`. s řetězcem do proměnné
příkaz=“echo ‚Výsledek součtu='“
# Příkaz `eval` vypíše hodnotu součtu pomocí proměnných
eval $příkaz $součet
Spustit skript.
Součet čtyř proměnných je, 1+2+3+4=10, který se vypíše.
Příklad-5: Použití příkazu `eval` k odstranění seznamu souborů
Vytvořte soubor bash s názvem evaltest4.sh s následujícím skriptem. Tento skript načte tři argumenty příkazového řádku jako názvy souborů, které budou odstraněny, a hodnoty argumentů uloží do proměnné pole $fn. Příkaz `rm‘ je uložen v proměnné $command. Zde je deklarována smyčka pro načtení každého jména souboru a odstranění souboru pomocí příkazu `eval`, pokud soubor existuje.
evaltest4.sh
#Deklarovat pole
deklarovat -.A fn
# Načteme tři argumenty příkazového řádku a uložíme do tří indexů pole
fn=$1
fn=$2
fn=$3
# Uložíme příkaz remove do proměnné
command=“rm“
# for cyklus bude iterovat třikrát pro načtení tří prvků pole
for index in 0 1 2
do
# Zkontrolujeme, zda soubor existuje nebo neexistuje
if } ]]; then
# pokud soubor existuje, pak jej odstraňte
eval $command ${fn}
# Informujte uživatele, že soubor je odstraněn
echo „${fn} je odstraněn.“
Else
#Informujte uživatele, že soubor neexistuje
echo „${fn} neexistuje.“
fi
done
Spustit skript.
Zde jsou při spuštění skriptu uvedeny tři názvy souborů. Výstup ukazuje, že soubory marks.docx a product.docx existují v aktuálním umístění a jsou odstraněny a, item.txt neexistuje v aktuálním umístění.
Závěr
Každý příkaz jazyka bash může být proveden příkazem `eval` deklarováním jako řetězec. Příkaz `eval` je v tomto návodu použit pro spouštění různých vestavěných příkazů bashe a vytvoření řady proměnných. Použití příkazu `eval` bude uživatelům objasněno a po přečtení tohoto tutoriálu budou moci tento příkaz používat k různým účelům.