Wie speichere ich Befehlsergebnisse in einer Variablen in Shellscripting?


74

Ich möchte die Anzahl der Verzeichnisse und Dateien im Ausgangsverzeichnis herausfinden und die Anzahl der Variablen in einem Shell-Skript speichern. Ich verwende die folgenden Befehle.

command="ls -l | grep -c \"rahul.*patle\""
eval $command

Ich möchte diese Anzahl in einer Varibale-Anzahl speichern. Wie kann ich das machen.


Sie sind wahrscheinlich besser dran, ls -1(Nummer eins) anstelle von ls -lund grep -cEabhängig von Ihrem System zu verwenden?
— Beroe

Antworten:


109

Die Syntax zum Speichern der Befehlsausgabe in einer Variablen lautet var=$(command).

So können Sie direkt tun:

result=$(ls -l | grep -c "rahul.*patle")

Und die Variable $resultenthält die Anzahl der Übereinstimmungen.


Ist es möglich, die Variable zu speichern und gleichzeitig die Terminalausgabe beizubehalten?
— Leo

@ Leo Ich glaube nicht, dass es möglich ist. Sie können wahrscheinlich eine Zwischendatei dafür verwenden: command | tee tmp_fileund dann var=$(< tmp_file). Dies führt den Befehl aus; mit teeIhnen in Terminal - Ausgabe zu sehen , und es wird in der Datei gespeichert tmp_fileals auch, Dann lesen Sie die Datei in $var.
— Fedorqui 'SO hör auf zu schaden'

1
Ich habe es gerade mit einer zusätzlichen Pfeife geschafft tee. result=$(ls -l | tee /dev/tty | grep -c "rahul.*patle")
— Leo

@ Leo oh, das ist gut! Ich hatte gerade eine Frage dazu gestellt: Wie speichere ich die Ausgabe eines Befehls in einer Variablen gleichzeitig mit dem Drucken der Ausgabe? . Fühlen Sie sich frei, Ihren Kommentar dort aufzunehmen, um ihn zu einer allgemeinen Referenz zu machen.
— Fedorqui 'SO hör auf zu schaden'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.