Синтаксическая ошибка 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)должно сработать.

Другие вопросы по тегам