我有以下例子,但我不知道为什么。
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
有人有什么想法吗?
答案1
您的代码有效在 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
然而大多数其他常见的 shell 不支持非整数运算-根据错误消息,您实际上正在使用以下命令执行代码bash
:
$ bash ./myscript.ksh
./myscript.ksh: line 5: 15.111111111 -2.55555: syntax error: invalid arithmetic operator (error token is ".111111111 -2.55555")
答案2
ksh 具有浮点支持,因此没有使用 ksh?
Bash
中不包含小数$(( ... ))
,
即不能使用浮点数。
man bash
可以通过输入以下内容 查找手册中的相关部分:/^ARITH
ENTER
您将会看到:
“评估是在固定宽度的整数没有检查溢出,但除以 0 会被捕获并标记为错误。”
正如@Terrance 在上面的评论中所说:
export c=$(echo "$b - $a | bc)
应该有效。