W bash wiem, że można napisać for
pętlę, w której jakaś zmienna sterująca pętli i
iteruje po określonych liczbach całkowitych. Na przykład mogę napisać skrypt powłoki bash, który wypisuje liczby całkowite od 1 do 10:
#!/bin/bash
for i in {1..10}
do
echo $i
done
Czy zamiast tego można iterować zmienną sterującą pętli, która jest łańcuchem, jeśli podam listę łańcuchów? Załóżmy na przykład, że mam ciąg fname
reprezentujący nazwę pliku. Chcę wywołać zestaw poleceń dla każdej nazwy pliku. Na przykład mógłbym chcieć wydrukować zawartość fname
przy użyciu takiego polecenia:
#!/bin/bash
for fname in {"a.txt", "b.txt", "c.txt"}
do
echo $fname
done
Innymi słowy, przy pierwszej iteracji fname
powinien mieć wartość fname="a.txt"
, podczas gdy przy drugiej iteracji fname
powinien mieć wartość fname="b.txt"
i tak dalej. Niestety wydaje się, że powyższa składnia nie jest całkiem poprawna. Chciałbym uzyskać wynik:
a.txt
b.txt
c.txt
ale gdy wypróbuję powyższy kod, otrzymuję ten wynik:
{a.txt,
b.txt,
c.txt}
Czy możesz mi pomóc ustalić poprawną składnię, abym mógł iteracyjnie zmieniać wartość / zawartość zmiennej fname
? Dziękuję za Twój czas.
{}
i na ,
s. Alternatywą jest usunięcie spacji. Więc albo "a.txt" "b.txt" "c.txt"
albo {"a.txt","b.txt","c.txt"}
. Ale wolę {a..c}.txt
zamiast tego.
{}
, nie potrzebujesz niczego, aby zapętlić listę (rozdzieloną spacjami)