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.

Rahul KP
quelle
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.

fedorqui 'SO hör auf zu schaden'
quelle
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'