
Ich erstelle also eine Funktion, die eine For-Schleife für alle Dateien in einem Verzeichnis mit einem gegebenen Argument ausführt und alle Dateien und Verzeichnisse ausgibt:
#!/bin/bash
List () {
for item in $1
do
echo "$item"
done
}
List ~/*
Wenn ich das Skript ausführe, wird jedoch nur die erste Datei im Verzeichnis ausgedruckt.
Irgendwelche Ideen?
Antwort1
Wenn Sie versuchen, über Dateien in einem Verzeichnis zu iterieren, müssen Sie das Verzeichnis folgendermaßen globgen:
#!/bin/bash
List () {
for item in "${1}/"*
do
echo "$item"
done
}
Dann nenne es so:
$ list ~
Wenn Sie mehrere Dateien als Argumente übergeben möchten, können Sie Ihre for
Schleife alternativ folgendermaßen schreiben:
List () {
for item
do
echo "$item"
done
}
Das kann dann wie folgt aufgerufen werden:
$ list ~/*
Was ist falsch an Ihrer aktuellen Funktion:
Wenn Sie es mit einem Glob aufrufen, übergibt es jede Datei im Verzeichnis als separates Argument. Nehmen wir an, Ihr Home-Verzeichnis enthält file1
, file2
, und file3
. Wenn Sie aufrufen list ~/*
, rufen Sie im Wesentlichen Folgendes auf:
list ~/file1 ~/file2 ~/file3
Dann wird Ihrer for
Schleife nur der Positionsparameter 1 übergeben for item in ~/file1
und die anderen Positionsparameter bleiben ungenutzt.
Danke auch an Ilkkachu für den Hinweis, dass du /
in deinem Hashbang auch ein vergessen hast, was mir völlig entgangen ist.