Я занес приблизительно в блог производительность в браузере некоторое время назад, но позволил мне суммировать те связанные с DOM для Вас здесь.
Тогда существуют некоторые связанные с самим JavaScript:
еще существуют некоторые на моем блоге (ссылка выше).
Расширение скобок, {x..y} выполняется перед другими расширениями, поэтому вы не можете использовать это для последовательностей переменной длины.
Вместо этого используйте метод seq 2 $ max
как user моб заявил .
Итак, для вашего примера это будет:
max=10
for i in `seq 2 $max`
do
echo "$i"
done
Попробуйте версию с арифметическими выражениями для
:
max=10
for (( i=2; i <= $max; ++i ))
do
echo "$i"
done
Это доступно в большинстве версий bash, а также должен быть совместим с Bourne shell (sh).
Пошаговое выполнение цикла вручную:
i=0 max=10 while [ $i -lt $max ] do echo "output: $i" true $(( i++ )) done
Если вам не нужно полностью использовать POSIX, вы можете использовать арифметику для цикла :
max=10 for (( i=0; i < max; i++ )); do echo "output: $i"; done
Или используйте jot (1) в системах BSD:
for i in $( jot 0 10 ); do echo "output: $i"; done
Есть несколько способов сделать это.
max=10
for i in `eval "echo {2..$max}"`
do
echo "$i"
done
Если в вашей системе доступна команда seq
:
for i in `seq 2 $max`
do
echo "output: $i"
done
Если нет, то используйте seq
для бедняков с perl
:
seq=`perl -e "\$,=' ';print 2..$max"`
for i in $seq
do
echo "output: $i"
done
Обратите внимание на эти кавычки.
Ну, поскольку в моей системе (Mac OS X v10.6.1 (Snow Leopard)) не была установлена команда seq
, я закончилось тем, что вместо этого использовался цикл while
:
max=5
i=1
while [ $max -gt $i ]
do
(stuff)
done
* Shrugs * Все, что работает.
Используйте:
max=10
for i in `eval echo {2..$max}`
do
echo $i
done
Вы требуется явный вызов eval для повторной оценки {} после замены переменной.