Kiedy używam następujących, otrzymuję wynik zgodnie z oczekiwaniami:
$ echo {8..10}
8 9 10
Jak w łatwy sposób użyć tego rozszerzenia nawiasu klamrowego, aby uzyskać następujące wyniki?
$ echo {8..10}
08 09 10
Teraz mogę to uzyskać za pomocą seq
(nie próbowałem), ale nie tego szukam.
Przydatne informacje mogą być takie, że jestem ograniczony do tej wersji bash. (Jeśli masz zsh
rozwiązanie, ale nie ma bash
rozwiązania, udostępnij również)
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
bash
arithmetic
brace-expansion
Bernhard
źródło
źródło
Odpowiedzi:
Poprzedź pierwszą cyfrę a,
0
aby wymusić, aby każdy termin miał tę samą szerokość.Z sekcji strony podręcznika bash w Brace Expansion:
Należy również pamiętać, że można korzystać
seq
z-w
opcji, aby wyrównać szerokość przez napawanie z wiodącymi zerami:Jeśli chcesz mieć większą kontrolę, możesz nawet określić format stylu printf:
źródło
echo {08..10}
rozwiązaniu, jest on wprowadzany tylko dla wersji bash 4 i nowszych.perl
) wiodące zero wskazuje liczbę ósemkową.seq
użyciu-w
przełącznika w następujący sposób:seq -w 003
produkuje liczby 001, 002 i 003.foo_00001.someextension
której prawie wszystkie konteksty sortowania zapewniają rozsądne porządkowanie.jeśli używasz printf
wymusi to 2 znaki i doda wiodące 0. W przypadku, gdy potrzebujesz 3 cyfr, możesz zmienić na „% .3d”.
źródło
printf
rozwiązania, ale tak naprawdę nie ułatwia tego. Mam nadzieję, że jest jakaś ukryta sztuczka, która spełnia swoje zadanie :)Użyj zakresu zaczynającego się od stałej cyfry i usuń tę cyfrę:
lub bez użycia zewnętrznego polecenia:
Do użytku w pętli for:
choć w tym przypadku pętla while byłaby wyraźniejsza i działałaby w dowolnej powłoce POSIX:
źródło
for
pętli.Mam tę samą wersję bash oryginalnego posteru (
GNU bash, version 3.2.51(1)-release
) i{08..12}
nie działa dla mnie, ale następujące działania:Jest to trochę bardziej nużące, ale działa na OP wersji bash (i późniejszych wersji, jak przypuszczam).
źródło
Dla porównania, myślę, że automatyczna stała szerokość występuje tylko w najnowszej wersji bash:
źródło
zera, ini i płetwa są zmiennymi, więc łatwo jest pisać tylko zera, które wypowiadasz w „zerach”, aby ini bez problemu działały;)
źródło