Próbuję napisać prostą funkcję bash, która jako argumenty przyjmuje wiele plików i / lub katalogów. Powinno:
- W pełni kwalifikuj nazwy plików.
- Sortuj je.
- Usuń duplikaty.
- Wydrukuj wszystko, co faktycznie istnieje.
- Zwraca liczbę nieistniejących plików.
Mam skrypt, który prawie robi to, co chcę, ale spada na sortowanie. Zwracana wartość skryptu w jego obecnej postaci jest poprawna, ale dane wyjściowe nie są (nieposortowane i duplikaty). Jeśli odkomentuję | sort -u
instrukcję, jak wskazano, wynik jest poprawny, ale wartość zwracana jest zawsze 0
.
Uwaga: łatwiejsze rozwiązania problemu są mile widziane, ale tak naprawdę pytanie dotyczy tego, dlaczego tak się dzieje w kodzie, który mam. To znaczy, dlaczego dodanie potoku pozornie zatrzymuje skrypt zwiększający zmienną r
?
Oto skrypt:
function uniqfile
{
local r=0
for arg in "$@"
do
readlink -e "$arg" || (( ++r ))
done #| sort -u ## remove that comment
return $r
}
for arg in "$@"
dofor arg
. „If 'in WORDS ...;” nie jest obecny, wówczas zakłada się „w” $ @ ”.” - pomoc dla