Sposób na iterację w zakresie w bash to
for i in {0..10}; do echo $i; done
Jaka byłaby składnia iteracji sekwencji z krokiem? Powiedz, chciałbym uzyskać tylko liczbę parzystą w powyższym przykładzie.
Sposób na iterację w zakresie w bash to
for i in {0..10}; do echo $i; done
Jaka byłaby składnia iteracji sekwencji z krokiem? Powiedz, chciałbym uzyskać tylko liczbę parzystą w powyższym przykładzie.
Odpowiedzi:
mogłabym zrobić
for i in `seq 0 2 10`; do echo $i; done
(choć oczywiście seq 0 2 10
sam wyprodukuje ten sam wynik).
Zauważ, że seq
dopuszcza liczby zmiennoprzecinkowe (np. seq .5 .25 3.5
), Ale rozwinięcie nawiasów klamrowych basha dopuszcza tylko liczby całkowite.
Rozszerzenie nawiasów klamrowych Bash 4 ma funkcję krokową:
for {0..10..2}; do
..
done
Bez względu na to, czy Bash 2/3 (pętla w stylu C, patrz odpowiedzi powyżej) czy Bash 4, wolałbym cokolwiek zamiast polecenia „seq”.
i
, nie możesz tego zrobić for {0..10..${i}}
... kończy się niepowodzeniem.
Pure Bash, bez dodatkowego procesu:
for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
echo $COUNTER
done
#!/bin/bash
for i in $(seq 1 2 10)
do
echo "skip by 2 value $i"
done
> seq 4
1
2
3
4
> seq 2 5
2
3
4
5
> seq 4 2 12
4
6
8
10
12
> seq -w 4 2 12
04
06
08
10
12
> seq -s, 4 2 12
4,6,8,10,12