Как установить переменную на вывод команды в Bash?
У меня есть довольно простой скрипт, который выглядит примерно так:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Когда я запускаю этот скрипт из командной строки и передаю ему аргументы, я не получаю никакого вывода. Однако, когда я выполняю команды, содержащиеся в переменной $MOREF
, я получаю вывод.
Как можно выполнить команду в скрипте, сохранить ее результат в переменную, а затем вывести эту переменную на экран?
4 ответ(ов)
Если вы собираетесь использовать апостроф, вам нужно использовать ```, а не '
. Этот символ называется "обратная кавычка" (или "гравис"):
#!/bin/bash
VAR1="$1"
VAR2="$2"
MOREF=`sudo run command against "$VAR1" | grep name | cut -c7-`
echo "$MOREF"
Я знаю три способа сделать это:
Для таких задач подходят функции:
func (){ ls -l }
Вызвать её можно, просто написав
func
.Также одним из подходящих решений может быть использование
eval
:var="ls -l" eval $var
Третий способ — это использование переменных напрямую:
var=$(ls -l) ИЛИ var=`ls -l`
Вывод третьего решения можно получить удобным способом:
echo "$var"
А также в менее аккуратном:
echo $var
Ваша команда выглядит так:
MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)
Вот перевод этой строки на русский язык в стиле ответа на StackOverflow:
"Просто для разнообразия, можно использовать следующую команду для получения значения MOREF
. Она выполняет команду с правами суперпользователя, затем фильтрует вывод, используя grep
для поиска строк, содержащих 'name', и обрезает текст, начиная с 7-го символа, с помощью cut
. В результате в переменную MOREF
будет сохранено нужное значение."
Если у вас есть дополнительные вопросы или необходима помощь с конкретной частью команды, не стесняйтесь спрашивать!
Когда вы задаете переменную, убедитесь, что у вас нет пробелов перед и/или после знака =
. Я потратил целый час, пытаясь разобраться с этой проблемой, пробуя различные решения! Это неприемлемо.
Правильно:
WTFF=`echo "stuff"`
echo "Example: $WTFF"
Сработает с ошибкой "stuff: not found" или подобной:
WTFF= `echo "stuff"`
echo "Example: $WTFF"
Что означает "2>&1"?
Как выводить команды оболочки по мере их выполнения
Как запросить ввод Yes/No/Cancel в скрипте оболочки Linux?
Разница между sh и Bash
Как сделать паузу в shell-скрипте на одну секунду перед продолжением?