Jak ustawić zmienną na wyjście polecenia w Bashu?

Mam dość prosty skrypt, który jest czymś takim jak poniższe:

#!/bin/bash

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

echo $MOREF

Kiedy uruchamiam ten skrypt z linii poleceń i przekazuję mu argumenty, nie otrzymuję żadnych danych wyjściowych. Jednakże, kiedy uruchamiam komendy zawarte w zmiennej $MOREF, jestem w stanie uzyskać dane wyjściowe.

Jak można pobrać wyniki komendy, która ma być uruchomiona w skrypcie, zapisać je do zmiennej, a następnie wyświetlić tę zmienną na ekranie?

Rozwiązanie

Oprócz backticków command możesz użyć $(command) lub "$(command)", które uważam za łatwiejsze do odczytania i pozwalające na zagnieżdżanie.

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

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

Cytowanie (") ma znaczenie dla zachowania wartości wielowierszowych.

Komentarze (14)

Właściwy sposób to

$(sudo run command)

Jeśli zamierzasz użyć apostrofu, potrzebujesz ``, a nie `'. Ten znak jest nazywany "backticks" (lub "grave accent").

Na przykład tak:

#!/bin/bash

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

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

echo "$MOREF"
Komentarze (4)

Tylko po to, żeby być innym:

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