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


5 Answers

Update (2018): Der richtige Weg ist

$(sudo run command)

Sie verwenden die falsche Art von Apostroph. Du brauchst ` , nicht ' . Dieser Charakter wird "Backticks" (oder "Grabakzent") genannt.

So was:

#!/bin/bash

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

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

echo "$MOREF"
Question

Ich habe ein ziemlich einfaches Skript, das ungefähr so ​​ist:

#!/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 die Argumente übergebe, bekomme ich keine Ausgabe. Wenn ich jedoch die in der Variablen $MOREF enthaltenen Befehle $MOREF , kann ich eine Ausgabe erhalten.

Ich würde gerne wissen, wie man die Ergebnisse eines Befehls, der innerhalb eines Skripts ausgeführt werden muss, in einer Variablen speichern und diese Variable dann auf dem Bildschirm ausgeben kann.




Um anders zu sein:

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



Stellen Sie beim Setzen einer Variablen sicher, dass vor und / oder nach dem = -Zeichen KEINE Leerzeichen stehen . Buchstäblich verbrachte eine Stunde versucht, dies herauszufinden, versuchen alle Arten von Lösungen! Das ist nicht cool.

Richtig:

WTFF=`echo "stuff"`
echo "Example: $WTFF"

Wird mit Fehler fehlschlagen : (Sachen: nicht gefunden oder ähnlich)

WTFF= `echo "stuff"`
echo "Example: $WTFF"



Ich kenne drei Möglichkeiten:

1) Funktionen sind für solche Aufgaben geeignet:

func (){
ls -l
}

Rufen Sie es auf, indem Sie func sagen

2) Auch eine andere geeignete Lösung könnte eval sein:

var="ls -l"
eval $var

3) Der dritte verwendet Variablen direkt:

var=$(ls -l)
OR
var=`ls -l`

Sie können die Ausgabe der dritten Lösung in guter Weise erhalten:

echo "$var"

und auch auf böse Weise:

echo $var



Dies ist eine andere Möglichkeit, die Sie mit einigen Texteditoren verwenden können, die nicht jeden komplizierten Code, den Sie erstellen, richtig hervorheben können.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"



Hier sind zwei weitere Möglichkeiten: Bitte beachten Sie, dass Platz in bash sehr wichtig ist. Wenn Sie also möchten, dass Ihr Befehl ausgeführt wird, wie er ist, ohne weitere Leerzeichen einzufügen.

  1. folgend weist L harilil zu und druckt es dann aus

    L=$"harshil"
    echo "$L"
    
  2. Im Folgenden wird die Ausgabe eines Befehls tr an L2 zugewiesen. tr wird an einer anderen Variablen L1 betrieben.

    L2=$(echo "$L1" | tr [:upper:] [:lower:])
    



Related