Как да задам променлива на изхода на команда в Bash?

Имам доста прост скрипт, който прилича на следното:

#!/bin/bash

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

echo $MOREF

Когато стартирам този скрипт от командния ред и му подам аргументите, не получавам никакъв резултат. Въпреки това, когато изпълнявам командите, съдържащи се в променливата $MOREF, мога да получа изход.

Как може да се вземат резултатите от команда, която трябва да се изпълни в рамките на скрипт, да се запишат в променлива и след това да се изведе тази променлива на екрана?

Решение

В допълнение към задните тирета command можете да използвате $(command) или "$(command)", които намирам за по-лесни за четене и позволяват влагане.

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

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

Кавичките (") са от значение за запазване на многоредови стойности.

Коментари (14)

Правилният начин е

$(sudo run command)

Ако искате да използвате апостроф, трябва да използвате `````, а не'`. Този символ се нарича "заден знак" (или "гробищно ударение").

Например:

#!/bin/bash

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

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

echo "$MOREF"
Коментари (4)

Просто за да бъдем различни:

MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)
Коментари (0)