Дополнительно
Как установить переменную на вывод команды в Bash?
У меня есть довольно простой сценарий, который выглядит примерно следующим образом:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Когда я запускаю этот скрипт из командной строки и передаю ему аргументы, я не получаю никакого вывода. Однако когда я запускаю команды, содержащиеся в переменной $MOREF
, я могу получить результат.
Как можно получить результаты команды, которую нужно выполнить в сценарии, сохранить их в переменной, а затем вывести эту переменную на экран?
1497
14
В дополнение к обратным символам
вы можете использоватьcommand
$(command)
или"$(command)"
, которые я считаю более удобными для чтения и позволяющими вложенность.Кавычки (```) имеют значение для сохранения многострочных значений.
Правильный путь - это
Если вы собираетесь использовать апостроф, то вам нужен
, а не
. Этот символ называется "backticks" (или "grave accent").Например:
Как вам уже указали, вы должны использовать "обратные знаки".
Предложенная альтернатива
$(command)
работает так же хорошо, и ее легче читать, но обратите внимание, что она действительна только для Bash или KornShell (и оболочек, производных от них), Так что если ваши скрипты должны быть действительно переносимыми на различных Unix-системах, вам следует предпочесть старую нотацию backticks.Некоторые [тег:Баш] уловок, которые я использую, чтобы установить переменные из команды
2-е изд 2018-02-12: добавление различных пути, поиск на дне этого для долго выполняющихся задач!
2018-01-25 редактирования: добавить пример функции (для заполнения Варс про использование диска)
Первая просто старая и совместимой
В основном совместимы, второй способ
В качестве вложения может стать тяжелым, скобочки был реализован для этого
Я знаю три способа это сделать:
1) функции предназначены для выполнения таких задач:
Вызвать его, сказав
Функ
2) и еще одно подходящее решение может быть ивал:
3) третий-использование переменных напрямую:
вы можете получить выход третьего решения в добрый путь:
а также в неприятную сторону:
Просто быть разной:
При определении переменной убедитесь, что у вас без пробелов до и/или после = знак. Буквально потратил час, пытаясь разобраться в этом, стараясь всех видов решений! Это не круто.
Правильно:<БР>
Будет не с ошибкой: (вещи: не найден или похожие)
Если вы хотите сделать это с многострочным/несколько команд/с то вы можете сделать это:
Вы должны использовать либо
$(команда-здесь)
или
пример
Вы можете использовать обратно-клещей(также известный как акцент могил) или
$()
. Вроде как-Оба имеют тот же эффект. Но выход=$(х+2) является более читаемым и последний один.
Это еще один способ, хорошо использовать С некоторые текстовые редакторы, которые не в состоянии правильно выделить каждую запутанный код, который вы создаете.
Некоторые могут найти это полезным. Число значений в переменную подстановки, где "фишка" - использование
$(())
двойные скобки:Вот еще два способа:
Пожалуйста, имейте в виду, что пространство является очень важным в [тег:Баш]. Поэтому, если вы хотите, чтобы ваша команда для запуска, использовать как есть, не вводя больше никаких пробелов.
Я л=$&; harshil и" Эхо " на"$Л;
ТР
в Л2.тр
эксплуатируется на другую переменную Л1.Л2=$(Эхо " Л1 и quot$; | тр [:верх:] [:нижняя:])
Если команда, которую вы пытаетесь выполнить не удается, он будет писать вывод в поток ошибок и потом будет напечатано в консоли. Чтобы избежать этого, необходимо перенаправить поток ошибок