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?
Zusätzlich zu den Backticks
können Sie auch command
$(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.
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"
Einfach um anders zu sein:
MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)