Возможный дубликат:
Как выполнять целочисленные и плавающие вычисления в командной строке в bash или любом другом доступном языке?
Я хотел бы просто переназначить переменную (точнее, увеличить ее на 0.050
) в скрипте bash. В следующем скрипте, который я написал, i
— это (целый) индекс, а mytime
— десятичное/двойное/плавающее число. «пс» (пикосекунда) — это единица времени, которую я использую в своих расчетах.
#!/bin/bash
mytime = 0.000
for i in {1..3}
do
echo "$i: $mytime ps"
mytime = mytime + 0.050
done
Но когда я запускаю этот скрипт с помощью bash test.sh
, я получаю следующие сообщения об ошибках:
test.sh: line 2: mytime: command not found
1: ps
test.sh: line 6: mytime: command not found
2: ps
test.sh: line 6: mytime: command not found
3: ps
test.sh: line 6: mytime: command not found
Почему это, кажется, интерпретируется mytime
как команда или функция, а не как переменная? Можете ли вы помочь мне исправить это?
решение1
for i in $(seq 1 0.05 3); do
# loop body
echo i equals $i
done
решение2
Две проблемы:
- Не используйте пробелы. Назначение — это
VAR=value
, а неVAR = value
,VAR =value
илиVAR= value
. Это должен быть один токен, разделенный пробелами оболочки, а не два или три). - Оболочка не делает арифметику таким образом. Для целочисленной математики вы можете сказать
VAR=$(($VAR+1))
, или вы можете прочитать этот превосходный вопрос для газиллиона других способов (целые, с плавающей точкой, инфиксные, постфиксные, возможно даже префиксные, произвольной точности и кухонной раковины):как можно выполнять целочисленные и плавающие вычисления в командной строке в bash или на любом другом доступном языке?