Hvordan setter jeg en variabel til utgangen av en kommando i Bash?

Jeg har et ganske enkelt skript som er omtrent som følger:

#!/bin/bash

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

echo $MOREF

Når jeg kjører dette skriptet fra kommandolinjen og sender det argumentene, får jeg ingen utdata. Men når jeg kjører kommandoene som finnes i $MOREF-variabelen, er jeg i stand til å få utdata.

Hvordan kan man ta resultatene av en kommando som må kjøres i et skript, lagre den i en variabel og deretter sende den variabelen på skjermen?

Løsning

I tillegg til backticks command kan du bruke $(command) eller "$(command)" som jeg synes er lettere å lese, og tillater nesting.

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

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

Anførselstegn (") er viktig for å bevare verdier på flere linjer.

Kommentarer (14)

Den riktige måten er

$(sudo run command)

Hvis du skal bruke en apostrof, trenger du `, ikke '. Dette tegnet kalles "backticks" (eller "grav aksent").

Som dette:

#!/bin/bash

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

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

echo "$MOREF"
Kommentarer (4)

Bare for å være annerledes:

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