Ich bin neu bei Bash. Wenn ich den folgenden Befehl ausführe:
grep "type" /root/myFile | cut-d'=' -f2
Ich erhalte folgendes:
102
304
503
442
Ich möchte den Inhalt des ersten Befehls in einer Variablen speichern, sodass der Inhalt der Variablen einer Deklaration wie folgt entspricht:
myVariable="102 304 503 442"
Ich weiß nicht, wie ich das anstellen soll. Soll ich myVariable
mit einer leeren Zeichenfolge initialisieren und den Inhalt des Befehls Zeile für Zeile durchlaufen und ihn mit Leerzeichen dazwischen an myVariable anhängen oder gibt es eine einfachere Möglichkeit, dies mit Bash zu tun?
Antwort1
Sie können dies mit bash
sich selbst tun, indem Sie eine Befehlsersetzung und dann eine Parametererweiterung verwenden.
Übernehmen Sie zunächst die Ausgabe des Befehls in eine Variable, indem Sie die Befehlsersetzung verwenden $()
, und ersetzen Sie dann mithilfe der Parametererweiterung alle Zeilenumbrüche durch Leerzeichen ${variable//$'\n'/ }
:
$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2)
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442
Aus Gründen der Wiederverwendbarkeit und Übersichtlichkeit sind Sie mit einem Array jedoch besser bedient:
myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )
und iterieren Sie auf die übliche Weise über die Array-Elemente.
Antwort2
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`
Was zwischen den Backticks (`) steht, wird ausgeführt und die Ausgabe wird zugewiesen myVariable
.
Wenn Ihre aktuelle Ausgabe durch Zeilenumbrüche ( \n
) getrennt ist, können Sie diese durch Leerzeichen ersetzen, tr
beispielsweise:
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`
Hinweis: Manche Leute bevorzugen die Verwendung dieser $()
Syntax anstelle von Backticks, aber beide sind nützlich und wenn ich die Wahl habe, verwende ich die Backticks. Der eigentliche Vorteil beider ist, dass Sie die Ausführung auf zwei Ebenen handhaben möchten, da der Ausdruck mit Backtick zuerst an eine Unter-Shell gesendet und dann der $()
Teil ausgeführt wird.