W bash wiem, że można napisać forpętlę, w której jakaś zmienna sterująca pętli iiteruje 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 fnamereprezentujący nazwę pliku. Chcę wywołać zestaw poleceń dla każdej nazwy pliku. Na przykład mógłbym chcieć wydrukować zawartość fnameprzy 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 fnamepowinien mieć wartość fname="a.txt", podczas gdy przy drugiej iteracji fnamepowinien 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}.txtzamiast tego.
{}, nie potrzebujesz niczego, aby zapętlić listę (rozdzieloną spacjami)