Przenośny dla wszystkich powłok i każdego systemu, który ma sekwencję (ponieważ to pytanie jest oznaczone)
Jeśli start to 1:
$ echo $(seq 10)
1 2 3 4 5 6 7 8 9 10
Inaczej:
$ echo $(seq 5 10)
5 6 7 8 9 10
Z bc:
$ echo $(echo "for (i=0;i<=1000;i++) i"| bc)
W bash
echo {1..10}
Uwaga:
To rozwiązanie echa działa, jeśli wartość IFS zawiera nową linię, co robi domyślnie.
Domyślnie IFS jest ustawione na sekwencję <space><tab> <newline> . I jest resetowany dla każdego czystego początku powłoki. Ale jeśli masz obawy, że mogło się to zmienić w skrajnym przypadku, mamy kilka rozwiązań.
W bash, zsh, ksh po prostu użyj: IFS = $ '\ t \ n' (pomiń resztę tej odpowiedzi).
Jednak resetowanie wartości IFS pod sh może być skomplikowane. Przeczytaj pełny szczegół tutaj .
Unset IFS.
$ unset IFS; echo $(seq 5 10) #Always work.
zawsze będzie działać. Pod warunkiem, że poniżej nie będzie kodu (lub skryptów potomnych), które wymagałyby ustawienia IFS, takiego jak skrypt, który to robi OldIFS="$IFS"
.
Prawidłowe rozwiązanie
Używanie sztuczki dla sh:
sh -c 'IFS="$(printf " \t\nx")"; IFS="${IFS%x}"; printf "$IFS"|xxd' # correct.
echo $(seq 1 10)