Подтвердить что ты не робот

Итерация через ряд ints в ksh?

Как я могу выполнить итерацию через простой диапазон int, используя цикл for в ksh?

Например, мой script в настоящее время делает это...

for i in 1 2 3 4 5 6 7
do
   #stuff
done

... но я хотел бы расширить диапазон выше 7. Есть ли лучший синтаксис?

4b9b3361

Ответ 1

Кудрявые скобки?

for i in {1..7}
do
   #stuff
done

Ответ 2

Пока цикл?

while [[ $i -lt 1000 ]] ; do
    # stuff
   (( i += 1 ))
done

Ответ 3

ksh93, Bash и zsh все понимают синтаксис цикла C-like for:

for ((i=1; i<=9; i++))
do
    echo $i
done

К сожалению, пока ksh и zsh понимают синтаксис диапазона фигурных скобок с константами и переменными, Bash обрабатывает только константы (включая Bash 4).

Ответ 4

в OpenBSD, используйте jot:

for i in `jot 10`; do echo $i ; done;

Ответ 5

seq - но доступен только в Linux.

for i in `seq 1 10`
do 
    echo $i
done

есть другие варианты для seq. Но другие решения очень приятные и более важные, портативные. спасибо

Ответ 6

В AIX/Linux/Solaris ksh будут работать следующие.

#!/bin/ksh

d=100

while (( $d < 200 ))
do
   echo "hdisk$d"
  (( d=$d+1 ))
done

Необязательно, если вы хотите отложить до 5 мест, т.е. 00100.. 00199, вы можете начать с:

#!/bin/ksh
typeset -Z5 d

-Скотт

Ответ 7

Несколько примеров, которые я использую в AIX, потому что нет оператора диапазона или seq, вместо этого следует использовать perl.

Здесь цикл for, использующий perl как seq:

for X in `perl -e 'print join(" ", 1..10)'` ; do something $X ; done

Это похоже, но я предпочитаю, когда читает цикл. Нет обратных ссылок или проблем с пробелами.

perl -le 'print "$_ " for 1..10;' | while read X ; do xargs -tn1 ls $X ; done

Мой fav, do bash -подобный shell globbing, в этом случае перестановки с perl.

perl -le 'print for glob "e{n,nt,t}{0,1,2,3,4,5}"' | xargs -n1 rmdev -dl