Вывод команды Linux в переменную

Обновлено: 21.11.2024

Как установить переменную для вывода команды в Bash?

Linux — решение 1:

В дополнение к обратным кавычкам вы можете использовать $().

нажмите кнопку ниже, чтобы скопировать код. Автор — руководство по Linux — команда

Цитаты (") имеют значение для сохранения многострочных значений.

Linux — решение 2:

Вы используете неправильный апостроф. Вам нужно `, а не '. Этот символ называется «обратные кавычки» (или «гравийное ударение»).

нажмите кнопку ниже, чтобы скопировать код. Автор — руководство по Linux — команда

Linux — решение 3:

Команда $(команда) также работает, и ее также легче читать, но учтите, что она действительна только с оболочками bash или korn (и оболочками, производными от них), поэтому, если ваши сценарии должны быть действительно переносимыми на различные Unix, вы должны предпочесть старую нотацию с обратными кавычками.

Linux — решение 4:

Есть три способа сделать это:

1) Функции:

нажмите кнопку ниже, чтобы скопировать код. Автор — руководство по Linux — команда

2) Другим подходящим решением может быть eval:

нажмите кнопку ниже, чтобы скопировать код. Автор — руководство по Linux — команда

3) Непосредственное использование переменных:

нажмите кнопку ниже, чтобы скопировать код. Автор — руководство по Linux — команда

Вы можете получить вывод третьего решения хорошим способом:

нажмите кнопку ниже, чтобы скопировать код. Автор — руководство по Linux — команда

а также неприятным образом:

нажмите кнопку ниже, чтобы скопировать код. Автор — руководство по Linux — команда

Linux — решение 5:

нажмите кнопку ниже, чтобы скопировать код. Автор — руководство по Linux — команда

Поиски, связанные с - linux - linux tutorial - Как установить переменную для вывода команды в Bash?

linux red hat debian opensuse ubuntu arch linux mandrake get link linux computer linux pc linux server linux desktop Learn linux red hat linux red hat enterprise linux linux software linux tutorial linux операционная система suse linux linux download linux os linux ubuntu vmware linux lunix linux windows linux новости linux usb linux команды unix linux версия linux что такое linux linux centos linux ftp bash перенаправить вывод в переменную вывод команды bash в переменную несколько строк bash установить переменную в выражение bash назначить ls переменной bash назначить строку переменной bash использовать переменную в команде команда переменной bash не найдена установить вывод команды в переменную сценарий оболочки назначить вывод команды в переменную bash назначить вывод команды в переменную вывод команды захвата zsh

Лучший в мире анимированный веб-сайт для самообучения с информативными учебными пособиями, объясняющими код и варианты, лежащие в основе всего этого.

Викитехника

Мастерская

Присоединяйтесь к нашему сообществу

Другие языки

Мы обнаружили, что вы используете AdBlock Plus или другое программное обеспечение для блокировки рекламы, которое препятствует полной загрузке страницы.

У нас нет баннеров, Flash, анимации, неприятных звуков или всплывающих окон. Мы не используем эти надоедливые типы рекламы!

Нам нужны деньги для работы сайта, и почти все они поступают от нашей интернет-рекламы.

Когда вы запускаете команду, она выдает какой-то результат: либо результат работы программы, либо сообщения о статусе/ошибке с деталями выполнения программы. Иногда вам может понадобиться сохранить вывод команды в переменной, которая будет использоваться в последующей операции.

В этом посте мы рассмотрим различные способы присвоения выходных данных команды оболочки переменной, что особенно полезно для сценариев оболочки.

Чтобы сохранить вывод команды в переменной, вы можете использовать функцию подстановки команд оболочки в следующих формах:

Ниже приведены несколько примеров использования подстановки команд.

В этом первом примере мы сохраним значение команды who (которая показывает, кто вошел в систему) в переменной пользователя CURRENT_USERS:

Затем мы можем использовать переменную в предложении, отображаемом с помощью команды echo следующим образом:

В приведенной выше команде: флаг -e означает интерпретировать любые используемые управляющие последовательности (например, \n для новой строки). Чтобы не тратить время и память, просто выполните подстановку команд внутри команды echo следующим образом:

Далее, чтобы продемонстрировать концепцию, используя вторую форму; мы можем сохранить общее количество файлов в текущем рабочем каталоге в переменной с именем FILES и вывести ее позже следующим образом:

На этом пока все. В этой статье мы объяснили методы назначения вывода команды оболочки переменной.Вы можете добавить свои мысли к этому сообщению через раздел обратной связи ниже.

Если вам понравилась эта статья, подпишитесь на уведомления по электронной почте о руководствах по Linux. Если у вас есть вопросы или сомнения? обратитесь за помощью в разделе комментариев.

Если вы цените то, что мы делаем здесь, в TecMint, вам следует подумать о следующем:

TecMint – это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете. Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей, доступных всем БЕСПЛАТНО.

Если вам нравится то, что вы читаете, купите нам кофе (или 2) в знак признательности.

Различные типы команд bash необходимо запускать с терминала в зависимости от требований пользователя. Когда пользователь запускает любую команду из терминала, он показывает вывод, если ошибки нет, в противном случае отображается сообщение об ошибке. Иногда вывод команды необходимо сохранить в переменной для использования в будущем. Для этой цели можно использовать функцию подстановки команд оболочки bash. В этом руководстве показано, как с помощью этой функции можно сохранять различные типы команд оболочки в переменной.

переменная =$ ( команда )
переменная =$ ( команда [ опция… ] аргумент1 аргументы2 … )
переменная =$ ( / путь / к / команда )

переменная = ` команда `
переменная = ` команда [ опция… ] аргумент1 аргументы 2 … `
переменная = `/ путь / к / команда `

***Примечание. Не используйте пробелы до и после знака равенства при использовании приведенных выше команд.

Вывод одной команды в переменную

Команды Bash можно использовать без каких-либо параметров и аргументов для тех команд, в которых эти части являются необязательными. В следующих двух примерах показано использование простой подстановки команд.

Команда bash `date` используется для отображения текущей даты и времени. Следующий скрипт сохранит вывод команды `date` в переменную $current_date с помощью подстановки команд.

Вывод:

Команда

`pwd` показывает путь к текущему рабочему каталогу. Следующий скрипт сохраняет вывод команды `pwd` в переменную $current_dir, и значение этой переменной выводится с помощью команды `echo`.

Вывод:

Команда с опцией и аргументом

Эта опция и аргумент являются обязательными для некоторых команд bash. В следующих примерах показано, как можно сохранить вывод команды с параметром и аргументом в переменную.

Команда Bash `wc` используется для подсчета общего количества строк, слов и символов любого файла. Эта команда использует -c, -w и -l в качестве параметров и имя файла в качестве аргумента для создания вывода. Создайте текстовый файл с именем fruit.txt со следующими данными для тестирования следующего скрипта.
фрукты.txt

Выполните следующие команды, чтобы подсчитать и сохранить общее количество слов в файле fruit.txt в переменной $count_words и распечатать значение с помощью команды `echo`.

Вывод:

`cut` — это еще одна команда bash, которая использует параметры и аргументы для создания вывода. Создайте текстовый файл с именем weekday.txt с названиями семи дней недели для запуска следующего скрипта.

день недели.txt

Создайте файл bash с именем cmdsub1.sh со следующим сценарием. В этом сценарии цикл while используется для чтения содержимого файла weekday.txt построчно и чтения первых трех символов каждой строки с помощью команды «cut». После обрезки строковое значение сохраняется в переменной $day. Далее, если оператор используется для проверки значения $day, является «Sun» или нет. Вывод будет печатать «Воскресенье — выходной», если условие истинно, в противном случае будет напечатано значение $day.

cmdsub1.sh

Вывод:

Использование подстановки команд в цикле

Вы можете сохранить вывод подстановки команд в любую переменную цикла, как показано в следующем примере.

Создайте файл с именем cmdsub2.sh со следующим кодом. Здесь команда `ls -d */` используется для получения всего списка каталогов из текущего каталога. Цикл for используется здесь для чтения каждого каталога из вывода и сохранения его в переменной $dirname, которая печатается позже.

cmdsub2.sh

Вывод:

Использование вложенных команд

Как можно использовать несколько команд с помощью pipe(|) показано в предыдущем примере.Но вы можете использовать вложенные команды в подстановке команд, где вывод первой команды зависит от вывода второй команды и работает противоположно команде pipe(|).

Синтаксис вложенной команды:

Две команды, `echo` и `who`, используются в этом примере как вложенные команды. Здесь сначала будет выполнена команда who, которая распечатает информацию о пользователе, вошедшем в систему в данный момент. Вывод команды who будет выполняться командой echo, а вывод echo будет сохранен в переменной $var. Здесь вывод команды `echo` зависит от вывода команды `who`.

Вывод:

Использование командного пути

Если вы знаете путь к команде, вы можете запустить команду, указав путь к команде при использовании подстановки команд. В следующем примере показано использование пути к команде.

Команда `whoami` показывает имя пользователя, вошедшего в систему в данный момент. По умолчанию эта команда хранится в папке /usr/bin/. Запустите следующий скрипт, чтобы запустить команду whoami, используя путь и сохранить в переменной $output, и распечатать значение $output.

Вывод:

Использование аргумента командной строки

Вы можете использовать аргумент командной строки с командой в качестве аргумента в подстановке команды.

Создайте файл bash с именем cmdsub3.sh со следующим сценарием. Команда `basename` используется здесь для извлечения имени файла из 2-го аргумента командной строки и сохраняется в переменной $filename. Мы знаем, что первый аргумент командной строки — это имя исполняемого скрипта, которое обозначается $0.

Запустите скрипт со следующим значением аргумента.

Здесь базовым именем пути Desktop/temp/hello.txt является «hello.txt». Таким образом, значение $filename будет hello.txt.

Вывод:

Вывод:

В этом руководстве показаны различные варианты использования замены команд. Если вам нужно работать с несколькими командами или зависимыми командами и временно сохранять результат для выполнения других задач позже, вы можете использовать эту функцию в своем скрипте для получения вывода.

Подробнее в видео:

Об авторе

Фахмида Есмин

Я веду курсы веб-программирования. Мне нравится писать статьи или учебные пособия на различные темы в области ИТ. У меня есть канал на YouTube, на котором публикуются различные учебные пособия по Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel и т. д.: Справка Tutorials4u.

У меня есть довольно простой скрипт, который выглядит примерно так:

Когда я запускаю этот скрипт из командной строки и передаю ему аргументы, я не получаю никакого вывода. Однако, когда я запускаю команды, содержащиеся в переменной $MOREF, я могу получить вывод.

Как можно взять результаты команды, которую необходимо выполнить в сценарии, сохранить их в переменной, а затем вывести эту переменную на экран?

Кроме того, переменные с заглавными буквами определяются POSIX для имен переменных, имеющих значение для операционной системы или самой оболочки, тогда как имена, содержащие хотя бы один символ нижнего регистра, зарезервированы для использования приложением. Таким образом, рассмотрите возможность использования имен в нижнем регистре для ваших собственных переменных оболочки, чтобы избежать непреднамеренных конфликтов (имея в виду, что установка переменной оболочки перезапишет любую переменную среды с таким же именем).

Кроме того, запись вывода в переменную только для того, чтобы вы могли затем вывести эту переменную, является бесполезным использованием echo и бесполезным использованием переменных.

Кроме того, часто нет необходимости сохранять выходные данные в переменных. Для небольших коротких строк вам нужно будет ссылаться в вашей программе несколько раз, это совершенно нормально и именно так; но для обработки любых нетривиальных объемов данных вы хотите преобразовать процесс в конвейер или использовать временный файл.

14 ответов 14

В дополнение к обратным кавычкам `command` подстановка команд может быть выполнена с помощью $(command) или "$(command)" , что мне кажется более удобным для чтения и допускает вложение.

Цитаты ( " ) имеют значение для сохранения значений многострочных переменных; они необязательны в правой части присваивания, поскольку разбиение на слова не выполняется, поэтому OUTPUT=$(ls -1) будет работать нормально.

Фигурные скобки можно использовать, когда сразу за переменной следует больше символов, которые можно интерпретировать как часть имени переменной. например, $foo .Они также необходимы при выполнении встроенных строковых операций с переменной, таких как $

Если вы собираетесь использовать апостроф, вам нужно ` , а не ' . Этот символ называется «обратные кавычки» (или «гравийное ударение»):

Синтаксис обратной кавычки устарел, и вам действительно нужно заключать интерполяцию переменной в двойные кавычки в эхо .

Я бы добавил, что вы должны быть осторожны с пробелами вокруг '=' в приведенном выше задании. У вас не должно быть пробелов, иначе вы получите неправильное назначение

Комментарий tripleeee верен. В cygwin (май 2016 г.) `` не работает, пока $() работает. Не мог исправить, пока не увидел эту страницу.

Исходная оболочка Bourne поддерживала обратные кавычки , но не нотацию $(. ). Поэтому вам нужно использовать обратные кавычки, если вам требуется совместимость со старыми системами Unix.

Некоторые приемы Bash, которые я использую для установки переменных из команд

Извините, есть длинный ответ, но поскольку bash — это оболочка, основной целью которой является запуск других команд unix и реакция на результирующий код и/или вывод, (команды часто передают filter и т. д.).

Сохранение вывода команды в переменных — это нечто основное и фундаментальное.

Поэтому, в зависимости от

  • совместимость (posix)
  • вид вывода (фильтр(ы))
  • количество переменных для установки (разделения или интерпретации)
  • время выполнения (мониторинг)
  • отлов ошибок
  • повторяемость запроса (см. далее длительный фоновый процесс)
  • интерактивность (учет ввода пользователя при чтении из другого дескриптора входного файла)
  • я что-то пропустил?

Первый простой, старый (устаревший) и совместимый способ

Совместимость, второй способ

Поскольку вложенность может стать слишком сложной, для этого были реализованы круглые скобки

Сегодня следует избегать использования обратных кавычек в сценарии.

Вложенный пример:

функции bash

Чтение более одной переменной (с башизмами)

Если мне просто нужно значение используемое:

вы могли видеть переменную массив:

Но я часто использую это:

( При первом чтении _ будет просто отбрасывать строку заголовка. ) Здесь только в одной команде вы заполните 6 различных переменных (показаны в алфавитном порядке):

<р>. будет работать и с ассоциативными массивами: read _ disk[total] disk[used] .

Выделенный fd с использованием безымянного fifo:

Есть элегантный способ! В этом примере я буду читать файл /etc/passwd:

Используя этот способ ( . read -u $list; . ), оставьте STDIN свободным для других целей, например взаимодействия с пользователем.

Это можно использовать со статическими файлами или даже с /dev/tcp/xx.xx.xx.xx/yyy с x для IP-адреса или имени хоста и y для номера порта или с выводом команды:

И, конечно же, с встроенными документами:

Практический пример разбора CSV-файлов:

Пример функции для заполнения некоторых переменных:

Примечание: строка объявления не требуется, только для удобства чтения.

О sudo cmd | грэп . | вырезать .

(Пожалуйста, избегайте бесполезного кота ! Так что всего на одну вилку меньше:

Все каналы ( | ) подразумевают вилки. Там, где должен быть запущен другой процесс, доступ к диску, вызовы библиотек и т. д.

Поэтому использование sed для примера ограничит подпроцесс только одной вилкой:

И с башизмами:

Но для многих действий, в основном с небольшими файлами, Bash может выполнить эту работу сам:

Идем дальше о разбиении переменных.

Альтернатива: сокращение количества ветвлений за счет фоновых длительных задач

Чтобы предотвратить несколько ответвлений, например

Это работает нормально, но запуск множества вилок тяжел и медленен.

А такие команды, как date и bc, могут выполнять множество операций, построчно!!

Таким образом, мы могли бы использовать долго работающий фоновый процесс для выполнения множества заданий, не инициируя новую ветвь для каждого запроса.

Под bash есть встроенная функция: coproc :

Поскольку bc готов, работа в фоновом режиме и ввод-вывод тоже готовы, задержки нет, нечего загружать, открывать, закрывать, до или после операции. Только сама операция! Это стало намного быстрее, чем необходимость разветвления bc для каждой операции!

Эффект границы: пока bc продолжает работать, они будут хранить все регистры, поэтому некоторые переменные или функции могут быть определены на этапе инициализации, так как первая запись в $ сразу после запуска задачи (через coproc ).

В функцию newConnector

Пример:

Функция myBc позволяет использовать фоновую задачу с простым синтаксисом.

Отсюда, если вы хотите завершить один из фоновых процессов, вам просто нужно закрыть его fd :

что не требуется, поскольку все fd закрываются после завершения основного процесса.

В этом руководстве показано назначение вывода команды переменной в bash с помощью подстановки команд.

Подстановка команд в Bash

Подстановка команд — это функция bash, которая позволяет нам запускать команды Linux и сохранять вывод команды в переменной bash. Как только команда выполняется с использованием синтаксиса подстановки команд, стандартный вывод команды заменяет команду, а завершающие символы новой строки удаляются.

Подстановка команд использует два разных синтаксиса для сохранения вывода команды в переменной.

Первый тип синтаксиса помещает команду в круглые скобки и добавляет знак $ в начале, как показано ниже.

Каждый символ в скобках рассматривается как часть команды.

Второй тип синтаксиса использует обратные кавычки вокруг команды.

Вывод команды Bash в переменную

Мы используем следующие примеры, чтобы продемонстрировать подстановку команд в скрипте bash.

Ниже мы используем первый синтаксис скобок и знака доллара в начале. Выполняется команда whoami, и выходные данные заменяют команду, которая затем присваивается пользовательской переменной. Мы используем команду echo для вывода сообщения на стандартный вывод.

Запуск этого скрипта отображает следующий вывод.

Ниже мы используем синтаксис обратных кавычек. Вывод команды whoami назначается пользовательской переменной, а эхо используется для вывода сообщения на терминал.

Запуск скрипта отобразит приведенный ниже результат.

В приведенном ниже скрипте мы используем ls для вывода содержимого папки delftstack, используя круглые скобки и синтаксис со знаком доллара. Вывод команды ls присваивается переменной files. Команда echo используется для вывода содержимого переменной files на терминал.

При выполнении скрипта на стандартный вывод выводится следующий вывод.

Приведенный ниже сценарий bash использует синтаксис обратных кавычек для назначения вывода команды ls переменной files, а команда echo используется для вывода содержимого переменной files на стандартный вывод.

При запуске скрипта отображается следующий вывод.

Мы используем следующий синтаксис для назначения многострочной команды переменной в скрипте bash.

Приведенный ниже сценарий bash демонстрирует присвоение выходных данных многострочной команды переменной. Команда ls выводит список всего содержимого текущей папки, а вывод передается команде head. Команда head выбирает только первые 5 строк ввода из ls и направляет вывод команде grep. Команда grep сопоставляет строку с потоком слов и выводит ее на стандартный вывод.

При запуске скрипта отображается следующий вывод.

Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы. Если вы также хотите внести свой вклад в DelftStack, написав платные статьи, вы можете посетить страницу «Написать для нас».

сообщить об этом объявлении

Читайте также: