Способ POSIX
Если вы заботитесь о переносимости, используйте пример из стандарта POSIX :
i=2
end=5
while [ $i -le $end ]; do
echo $i
i=$(($i+1))
done
Выход:
2
3
4
5
Вещи, которые не POSIX:
(( ))
без доллара, хотя это общее расширение , как указано самим POSIX .[[
. [
здесь достаточно. См. Также: В чем разница между одиночными и двойными квадратными скобками в Bash? for ((;;))
seq
(GNU Coreutils) {start..end}
и не может работать с переменными, как указано в в руководстве Bash . let i=i+1
: POSIX 7 2. Язык командного командного интерпретатора не содержит слова let
, и он не работает на bash --posix
4.3.42 i=$i+1
, но я не уверен. POSIX 7 2.6.4 Арифметическое расширение гласит: если переменная оболочки x содержит значение, которое образует действительную целочисленную константу, необязательно включающую знак «плюс» или «минус», тогда арифметические разложения «$ ((x) ) "и" $ (($ x)) "должны возвращать одно и то же значение. но чтение в буквальном смысле это не означает, что $((x+1))
расширяется, поскольку x+1
не является переменной.