Ответ 1
В bash
вам не нужно делать ничего особенного:
[email protected]:~$ num=1
[email protected]:~$ num=$(( $num + 1 ))
[email protected]:~$ echo $num
2
Вот мой простой код оболочки. Я хочу, чтобы результат был 2.Shell рассматривает все как строку. Как я могу это сделать?
num=1
num=$(( $num + 1 ))
ИЗМЕНИТЬ:
Полный код: что не так, если я хочу печатать от 1 до 10?
#! /bin/bash
num=1
until test $num -eq 10
do
num=$(( $num + 1 ))
echo $num
done
В bash
вам не нужно делать ничего особенного:
[email protected]:~$ num=1
[email protected]:~$ num=$(( $num + 1 ))
[email protected]:~$ echo $num
2
@tonio; пожалуйста, не защищайте использование подоболочки (`... или $(...)) строит, когда они не нужны (чтобы не допустить путаницы до максимума, $((...)) не является конструкцией подколла). Sub-shells может сделать потрясающую производительность даже при довольно тривиальных объемах данных. То же самое верно для каждого места, где внешняя программа используется, чтобы сделать что-то, что можно сделать с помощью встроенного блока.
Пример:
num=1
time while [[ $num -lt 10000 ]]; do
num=$(( num+1 ))
done
echo $num
num=1
time while /bin/test $num -lt 10000; do
num=$( /bin/expr $num + 1 )
done
echo $num
Выход (выполняется в ksh в Linux):
real 0m0.04s user 0m0.04s sys 0m0.01s 10000 real 0m20.32s user 0m2.23s sys 0m2.92s 10000
... так что коэффициент времени выполнения равен 250, а коэффициент времени процессора - 100. Я признаю, что пример, который я использовал, был преувеличенным, явно требуя, чтобы все встроенные модули были обойдены, но я думаю, что точка была Сделано: создание новых процессов расширилось, избегайте их, когда сможете, и узнайте, что ваша оболочка распознает, где создаются новые процессы.
Вы только что сделали:
$ num=1; num=$(( $num + 1 ));echo $num
2
Примечание. Вам не нужно указывать переменные внутри $(( ))
. Кроме того, вы можете просто использовать $((num++))
Это может сработать для вас:
num=1; ((num++)); echo $num
2
или
num=1; echo $((++num))
2
для циклов
for num in {1..10}; do echo $num; done
или (в bash как минимум)
for ((num=1; num<=10; num++)) { echo $num; }
второй цикл более полезен при использовании большего количества программ:
for (( num=1,mun=10; num<=10; num++,mun--)) { echo $num $mun; }
попробуйте это
$ num=1; num=`expr $num + 1`; echo $num;
Используйте ((num++))
как стенографию для увеличения num
.
$ num=1
$ ((num++))
$ echo $num
2
Вы не указали, какую оболочку используете, но самая краткая форма, которую я знаю, - это эта (работает хотя бы в bash):
num=$[num+1]
Если только увеличение на единицу и изменение самой переменной, а не печать/назначение, то:
((num++))
Это лучшее/более элегантное решение. См. Ответ собаки для этого.
Если зацикливание над значениями, я бы использовал эту форму вместо:
for i in `seq 1 10`; do
echo $i
done
работает для меня
$ num=1
$ num=$(( $num + 1 ))
$ echo $num
2
Какой результат вы получаете?
Подробнее о bash Арифметика @tldp
Чтобы сделать что-то 10 раз в bash, вы можете использовать (используя brace-expansion}
$ for i in {1..10}; do echo $i; done
1
2
3
4
5
6
7
8
9
10
Однако вы не можете использовать переменные между {}
. Если это так, используйте seq
.
Вы можете использовать что-то вроде:
num=1
num=`expr $num + 1`
Он также будет работать с оболочками bash, такими как ksh.