Синтаксическая ошибка KSH: недопустимый арифметический оператор (токен ошибки: «.111111111 -2,55555»)
У меня есть следующий пример, и я не понимаю, почему.
line 48: 15.111111111 -2.55555: syntax error: invalid arithmetic operator (error token is ".111111111 -2.55555")
Это мой источник в ksh:
export a=2.55555
export b=15.111111111
export c=$(( $b -$a))
echo $c
У кого-нибудь есть идея, пожалуйста?
2 ответа
Ваш код действителен в ksh (хотя нет необходимости
exportпеременные, если вы не планируете использовать их в дочерней среде). Так, например, дано
$ cat myscript.ksh
#!/usr/bin/env ksh
export a=2.55555
export b=15.111111111
export c=$(( $b -$a))
echo $c
тогда
chmod +x myscript.ksh
$ ./myscript.ksh
12.555561111
Однако большинство других распространенных оболочек не поддерживают нецелочисленную арифметику — судя по сообщению об ошибке, вы действительно выполняете код с
bash:
$ bash ./myscript.ksh
./myscript.ksh: line 5: 15.111111111 -2.55555: syntax error: invalid arithmetic operator (error token is ".111111111 -2.55555")
ksh имеет поддержку с плавающей запятой, поэтому ksh не использовался?
Bashне делает десятичные дроби в
$(( ... )),
т.е. нельзя использовать числа с плавающей запятой.
Можно найти соответствующий раздел в
man bash-вручную, набрав
/^ARITH ENTER
Что ж, вы увидите:
«Вычисление выполняется в целых числах фиксированной ширины без проверки на переполнение, хотя деление на 0 перехватывается и помечается как ошибка».
Как говорит @Terrance в комментарии выше:
export c=$(echo "$b - $a | bc)должно сработать.