Mam zmienną o nazwie var, która przechowuje listę plików w katalogu. Przeglądam wszystkie pliki i jeśli znajdę katalog, wypisuję na ekranie „Katalog”. kod poniżej:
var=$(ls dir)
for file in $var; do
if [ -d $dir/$file ]; then
echo "Directory"
fi
done
Mam 2 pytania:
Po pierwsze: robię to wewnątrz funkcji i chcę, aby zmienna pliku $ pozostała lokalna, więc kiedy moja funkcja się zakończy, nie mam do niej dostępu. Jak ustawić tę zmienną lokalnie? Nie mogę for local file in $var;
i nie mogę zadeklarować pliku $ przed zapętleniem.
2. Moja pętla nie działa, gdy $(ls dir)
zawiera plik ze spacją w nazwie. Na przykład, jeśli $dir
ma 3 pliki, plik 1 plik 2 i plik 3, $var
tylko pliki 1 i 3 będą przechowywane jako prawdziwe pliki, ale plik 2 nie będzie działał, ponieważ podzieliłby go na plik 2 i. Jak mogę rozwiązać problem z plikami, które mają miejsce w ich imiona?
ls -Q dir
. spowoduje to umieszczenie cudzysłowów wokół każdej nazwy pliku. Ten problem jest częścią tego, dlaczego zaleca się, aby ludzie unikali analizowania ls
danych wyjściowych i zamiast tego używali find
.
"$file"
. w bardziej złożonych sytuacjach może być konieczne użycie$"$file"
.