Wie setze ich eine Variable auf die Ausgabe eines Befehls in der Bash?

Ich habe ein ziemlich einfaches Skript, das in etwa wie folgt aussieht:

#!/bin/bash

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

echo $MOREF

Wenn ich dieses Skript über die Befehlszeile ausführe und ihm die Argumente übergebe, erhalte ich keine Ausgabe. Wenn ich jedoch die Befehle ausführe, die in der Variable $MOREF enthalten sind, erhalte ich eine Ausgabe.

Wie kann man die Ergebnisse eines Befehls, der in einem Skript ausgeführt werden muss, in einer Variablen speichern und diese Variable dann auf dem Bildschirm ausgeben?

Lösung

Zusätzlich zu den Backticks command können Sie auch $(command) oder "$(command)" verwenden, die meiner Meinung nach leichter zu lesen sind und eine Verschachtelung ermöglichen.

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

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

Die Anführungszeichen (") sind wichtig, um mehrzeilige Werte zu erhalten.

Kommentare (14)

Der richtige Weg ist

$(sudo run command)

Wenn Sie ein Apostroph verwenden wollen, brauchen Sie `, nicht. Dieses Zeichen wird "Backticks" (oder "grave accent") genannt.

Etwa so:

#!/bin/bash

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

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

echo "$MOREF"
Kommentare (4)

Einfach um anders zu sein:

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