Ich versuche, eine einfache Bash-Funktion zu schreiben, die als Argumente eine Reihe von Dateien und / oder Verzeichnissen verwendet. Es sollte:
- Qualifizieren Sie die Dateinamen vollständig.
- Sortieren Sie sie.
- Duplikate entfernen.
- Drucken Sie alles aus, was tatsächlich vorhanden ist.
- Gibt die Anzahl der nicht vorhandenen Dateien zurück.
Ich habe ein Skript, das fast macht, was ich will, aber auf die Sortierung fällt. Der Rückgabewert des Skripts in seiner jetzigen Form ist korrekt, die Ausgabe jedoch nicht (unsortiert und dupliziert). Wenn ich die | sort -u
Anweisung wie angegeben auskommentiere , ist die Ausgabe korrekt, der Rückgabewert jedoch immer 0
.
NB Einfachere Lösungen zur Lösung des Problems sind willkommen, aber die Frage ist wirklich, warum dies in dem Code auftritt, den ich habe. Das heißt, warum verhindert das Hinzufügen der Pipe scheinbar das Inkrementieren der Variablen durch das Skript r
?
Hier ist das Skript:
function uniqfile
{
local r=0
for arg in "$@"
do
readlink -e "$arg" || (( ++r ))
done #| sort -u ## remove that comment
return $r
}
for arg in "$@"
zufor arg
. "Wenn 'in WORTEN ...;' ist nicht vorhanden, dann wird 'in "$ @"' angenommen. " - Hilfe für