Синтаксис:
eval [аргумент…]Здесь аргументы анализируются и объединяются в строку, которая будет выполняться оболочкой. 'eval' возвращает код статуса выхода после выполнения команды. 'eval' возвращает 0 как код статуса выхода, если аргумент не указан или предоставлен только нулевой аргумент.
Пример-1: выполнить команду wc с помощью eval
Предположим, текстовый файл с именем «отделение.текст»Содержит следующий текст. Общее количество строк в файле можно подсчитать с помощью команды wc.
отделение.текст
CSEEEE
ETE
АНГЛИЙСКИЙ
BBA
АПТЕКА
Следующая команда сохранит команду wc для подсчета общего количества строк файла, отделение.текст к переменной, $ mycommand.
$ mycommand = "wc -l отдел.текст"Следующая команда eval запустит команду wc и напечатает общее количество строк.
$ eval $ mycommandВыход:
Вывод показывает, что отделение.текст файл имеет 6 строк.
Пример1-2: выполнить команду expr с помощью eval
Создайте файл bash с именем evaltest.ш и добавьте следующий скрипт. Этот скрипт присвоит два целых значения переменной $ x и $ y. Команды expr и echo назначаются двум переменным, $ c1 и $ c2, которые выполняются позже с помощью команды eval.
evaltest.ш
#!/ bin / bash# Инициализировать переменные x и y
х = 5
у = 15
# Первая командная переменная используется для назначения команды expr для добавления значений $ x и $ y
c1 = "'выражение $ x + $ y'"
# Вторая командная переменная используется для назначения команды 'echo'
c2 = "эхо"
# 'eval' вычислит и напечатает сумму $ x и $ y, выполняя команды $ c1
и переменные $ c2
eval $ c2 $ c1
Запускаем скрипт.
$ bash evaltest.шСумма 5 и 15 составляет 20, что показано на выходе.
Пример-3: Распечатать значение переменной, присвоенное другой переменной
Создайте сценарий bash с именем evaltest2.sh со следующим скриптом. Здесь одна переменная используется для присвоения имени другой переменной, содержащей строковые данные. Команда 'eval' напечатает значение переменной, которая содержит имя другой переменной в качестве содержимого.
evaltest2.ш
#!/ bin / bash# Присваиваем переменной строковое значение $ str1
str1 = "Сценарий оболочки"
# Присвойте имя переменной «str1» переменной $ str2
str2 = str1
# Сохраняем команду в переменной $ command
command = "эхо"
# Команда 'eval' выполнит команду 'echo' и распечатает значение переменной
что содержится в другой переменной
eval $ command \ $ $ str2
Запускаем скрипт.
$ bash evaltest2.шВыводится значение переменной $ str1.
Есть еще один способ получить доступ к значению переменной, имя которой является значением другой переменной. С использованием '!'символ можно получить доступ к значению этого типа переменной. Следующую команду можно использовать как альтернативу предыдущему сценарию, и результат будет таким же.
$ str1 = "Сценарий оболочки"; str2 = str1; команда = "эхо"; eval $ command $ !str2Пример-4: Создайте серию переменных со значениями и вычислите сумму значений с помощью команды eval
Создайте сценарий bash с именем evaltest3.sh и добавьте следующий скрипт. Этот скрипт создаст серию переменных и сохранит значения в переменных с помощью команды eval. Значения переменных будут добавлены и сохранены в переменной с именем $ sum. Затем команда 'echo' со строковыми значениями присваивается переменной, которая используется в команде 'eval' для печати значения переменной $ sum.
evaltest3.ш
#!/ bin / bash# Инициализируем переменную $ sum значением 0
сумма = 0
# Объявить цикл for, который будет повторяться 4 раза
для n в 1… 4
делать
# Создайте четыре переменные с помощью команды eval
eval x $ n = $ n
# Добавляем значения переменной с помощью $ sum
сумма = $ (($ сумма + $ x $ n))
Выполнено
# Назначьте команду 'echo' со строкой в переменную
command = "echo 'Результат суммы ='"
# Команда 'eval' распечатывает значение суммы, используя переменные
eval $ command $ sum
Запускаем скрипт.
$ bash evaltest3.шСумма четырех переменных равна 1 + 2 + 3 + 4 = 10, что выводится на печать.
Пример-5: Использование команды eval для удаления списка файлов
Создайте файл bash с именем evaltest4.sh со следующим скриптом. Этот сценарий будет читать три аргумента командной строки как имена файлов, которые будут удалены, и сохранит значения аргументов в переменной массива, $ fn. Команда 'rm' хранится в переменной $ command. Здесь объявлен цикл For для получения каждого имени файла и удаления файла с помощью команды eval, если файл существует.
evaltest4.ш
#!/ bin / bash# Объявить массив
объявить -A fn
# Прочитать три аргумента командной строки и сохранить в трех индексах массива
fn [0] = $ 1
fn [1] = $ 2
fn [2] = 3 доллара США
# Сохраните команду удаления в переменной
command = "rm"
# цикл for будет повторяться три раза, чтобы прочитать три элемента массива
для индекса в 0 1 2
делать
# Убедитесь, что файл существует или не существует
если [[-f $ fn [$ index]]]; тогда
# если файл существует, то удалить файл
eval $ command $ fn [$ index]
# Сообщаем пользователю, что файл удален
echo "$ fn [$ index] удалено."
Еще
# Сообщаем пользователю, что файл не существует
echo "$ fn [$ index] не существует."
фи
Выполнено
Запускаем скрипт.
$ bash evaltest4.отметки sh.элемент docx.txt продукт.docxЗдесь три имени файла предоставляются во время выполнения скрипта. Вывод показывает, что отметки.docx и продукт.docx существует в текущем месте, файлы будут удалены, а элемент.txt не существует в текущем месте.
Заключение
Любая команда bash может быть выполнена командой eval, объявив ее как строку. Команда 'eval' используется в этом руководстве для выполнения различных встроенных команд bash и создания серии переменных. Использование команды eval будет разрешено для пользователей, и они смогут использовать эту команду для различных целей после прочтения этого руководства.