LS in einem Linux -Skript für die Schleife bedingt
Frage
Ich versuche eine einfache zu erstellen for
Schleife, die alle Ausgänge von einem nimmt ls
Befehl und geben Sie jede Ausgabe in eine Variable. Bisher habe ich
for i in ls /home/svn
do
echo $i
done
Aber es gibt mir einen Fehler.
Lösung
Weil die ls
muss ausgeführt werden:
for i in $(ls ...); do
echo $i
done
Vielleicht möchten Sie stattdessen Shell BILKBing in Betracht ziehen:
for i in /home/svn/*; do
echo $i
done
... oder find
, was eine sehr feinkörnige Auswahl der Eigenschaften von Elementen ermöglicht, um zu finden:
for i in $(find /home/svn -type f); do
echo $i
done
Wenn Sie in den Segmenten des Pfades oder in den Dateinamen selbst einen weißen Platz haben können, verwenden Sie eine while -Schleife (vorheriges Beispiel angepasst):
find /home/svn -type f|while read i; do
echo $i
done
while
liest sich in Bezug auf die Zeile, so dass der weiße Raum erhalten bleibt.
In Bezug auf die Berufung von basename
Sie haben zwei Optionen:
# Call basename
echo $(basename $i)
# ... or use string substitution
echo ${i##*/}
Um den Substitution zu erklären: ##
Entfernt das längste Front-verankerte Muster aus der Saite, #
bis zum ersten Muster -Match, %%
das am längsten verankerte Muster und %
Das erste volle Spiel.
Andere Tipps
Sie müssen nicht verwenden ls
Um Dateien in diesem Fall zu übergehen, erledigt Folgendes den Job: for i in /home/svn/*; do echo $i; done
Sie möchten mir die Ausgabe des LS -Befehls zuweisen, daher müssen Sie ihn in Backticks oder den $ () -Operator einschließen:
for i in $(ls /home/svn)
do
echo $i
done
Das liegt daran, dass Sie es überhaupt falsch machen.
for i in /home/svn/*
do
echo "$i"
done