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.