Введение
В bash-скриптах назначение вывода команды переменным может быть удобным за счет сохранения вывода команд и использования их позже.
В этом кратком руководстве мы рассмотрим, как можно сохранить вывод команды в виде переменной в Bash.
Основы настройки переменных
Сохранение вывода команды в виде переменной достигается за счет подстановка команд. Подстановка команд — это оболочка, которая выполняет команду в среда подоболочкии заменяет обернутую команду стандартным выводом среды, в которой была запущена команда. На этот выход можно ссылаться позже, если он подключен к ссылочной переменной!
Подстановка команд может быть достигнута с помощью обратных кавычек или знака доллара в скобках:
`command`
$(command)
Идут споры о том, `команда` (обратные кавычки) или $ (команда) (знак доллара и круглые скобки) следует использовать в качестве «наилучшей практики». $(command)
хорошо работает при вложенности и в некоторых случаях улучшает читаемость, но вы можете использовать любой синтаксис в следующих примерах.
При этом назначение вывода команды переменной в Bash так же просто, как:
VARIABLE=$(command)
echo "${VARIABLE}"
Бег ${variable}
известен как расширение параметраи используется для оценки и извлечения значения, связанного со ссылочной переменной.
Давайте теперь посмотрим на простой пример настройки переменной для команды изменения цвета вывода:
#!/bin/bash
GREEN=$(tput setaf 2)
echo "${GREEN}Please"
ORANGE=$(tput setaf 9)
echo "${ORANGE}Visit"
echo "${GREEN}Paris"
Во фрагменте мы использовали tput
и присвоил возвращаемое значение этих команд для печати цветного текста. setaf
изменяет цвет переднего плана, а 3 (зеленый) и 9 (оранжевый) являются цветовыми кодами.
Теперь мы перейдем к другому примеру, который содержит несколько условий для установки переменных для разных команд:
#!/bin/bash
PERSON=$(whoami)
echo -e "Hey ${PERSON}! I am Charlien"
DETAILS=$(uname -a)
echo -e "You're running this script on:n${DETAILS}n"
DATES=$(date)
echo -e "The script is being run on:n${DATES}n"
CREATE=$(touch $(date +"%d%m%Y").txt)
echo -e "A text file logging this run is created.${CREATE}n"
LOCATION=$(ls
-l *txt)
echo -e "Saved text file at: ${LOCATION}"
В приведенном выше скрипте whoami
Команда возвращает имя пользователя текущего пользователя. uname -a
возвращает системную информацию, а date
возвращает текущее время и дату.
Примечание: Мы можем сцепить назначение переменных, добавив несколько команд в один вложенный вызов. CREATE
переменная содержит вывод touch
команда, которая, в свою очередь, создает файл и устанавливает имя файла для вывода date +"%d%m%Y
команда.
Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!
Наконец, мы добавляем multiline
концепция назначения командной переменной путем добавления обратной косой черты ()
между ls
команду -l
флаг для отображения только текстовых файлов с использованием *.txt
. Обратная косая черта — это escape-символ, который информирует оболочку о том, что следующий символ не следует интерпретировать.
В echo
команда, мы добавили -e
флаг для использования специального символа, т.е. n
(новая строка), чтобы напечатать вывод в новой строке.
После выполнения скрипта получаем следующий результат:
$ ./variable.sh
Заключение
В этом кратком руководстве мы рассмотрели, как вы можете установить вывод команды в переменную в Bash. Мы рассмотрели разницу между синтаксисом для подстановка команд, отмечая улучшения читабельности $(command)
над заменой на основе обратной кавычки. Затем мы рассмотрели несколько примеров как простого присваивания, так и связанного/вложенного присваивания вывода.