Como posso definir uma variável para a saída de um comando em Bash?

Eu tenho um roteiro bastante simples que é algo como o seguinte:

#!/bin/bash

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

echo $MOREF

Quando corro este script a partir da linha de comando e o passo os argumentos, não estou obtendo nenhuma saída. Entretanto, quando eu executo os comandos contidos dentro da variável `$MOREF', eu consigo obter output.

Como se pode pegar os resultados de um comando que precisa ser executado dentro de um script, salvá-lo em uma variável e, em seguida, emitir essa variável na tela?

Solução

Além de backticks command você pode utilizar $(command) ou "$(command)" o que eu acho mais fácil de ler, e permitir o aninhamento.

OUTPUT="$(ls -1)"
echo "${OUTPUT}"

MULTILINE=$(ls \
   -1)
echo "${MULTILINE}"

A citação (") é importante para preservar valores de várias linhas.

Comentários (14)

O caminho certo é

$(sudo run command)

Se você vai utilizar um apóstrofo, você precisa `` ``, não ````. Este personagem é chamado de "backticks" (ou "acento grave").

Assim:

#!/bin/bash

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

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

echo "$MOREF"
Comentários (4)

Só para ser diferente:

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