24

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

16

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

#!/bin/bash

VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF

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

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

4 ответ(ов)

3

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

#!/bin/bash

VAR1="$1"
VAR2="$2"

MOREF=`sudo run command against "$VAR1" | grep name | cut -c7-`

echo "$MOREF"
0

Я знаю три способа сделать это:

  1. Для таких задач подходят функции:

    func (){
        ls -l
    }
    

    Вызвать её можно, просто написав func.

  2. Также одним из подходящих решений может быть использование eval:

    var="ls -l"
    eval $var
    
  3. Третий способ — это использование переменных напрямую:

    var=$(ls -l)
    
        ИЛИ
    
    var=`ls -l`
    

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

echo "$var"

А также в менее аккуратном:

echo $var
0

Ваша команда выглядит так:

MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)

Вот перевод этой строки на русский язык в стиле ответа на StackOverflow:

"Просто для разнообразия, можно использовать следующую команду для получения значения MOREF. Она выполняет команду с правами суперпользователя, затем фильтрует вывод, используя grep для поиска строк, содержащих 'name', и обрезает текст, начиная с 7-го символа, с помощью cut. В результате в переменную MOREF будет сохранено нужное значение."

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

0

Когда вы задаете переменную, убедитесь, что у вас нет пробелов перед и/или после знака =. Я потратил целый час, пытаясь разобраться с этой проблемой, пробуя различные решения! Это неприемлемо.

Правильно:

WTFF=`echo "stuff"`
echo "Example: $WTFF"

Сработает с ошибкой "stuff: not found" или подобной:

WTFF= `echo "stuff"`
echo "Example: $WTFF"
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь