Bash 中的浮点运算问题

Bash 中的浮点运算问题

我在 bash 中有代码:

a=$(cat "tempf.out")

其中 tempf.out 是这样的:

-432.4319347412

我想将其乘以 2,因此我写道:

result=$(expr $a*2)

但我明白这一点:

*232.4319347412

如果我尝试使用 bc:

result=$(expr $a*2|bc)

我得到:

(standard_in) 1: illegal character: ^M

请帮忙修复它。

答案1

如果你的tempf.out文件有 DOS 风格的行尾 (CR-LF),那么你需要修复它 - 在文件级别使用dos2unix, tr,或者sed例如

a=$(sed 's/\r$//' tempf.out)
bc <<< "$a*2"

$a或者通过使用 shell 的参数替换功能将其从变量中删除,例如

a=$(<tempf.out)
bc <<< "${a%^M}*2"

其中是使用++组成的^M实际回车符CtrlV CtrlM

答案2

非常感谢大家

a=$(sed 's/\r$//' tempf.out)
result=$(expr $a*2 | bc)    
echo $result

对我有用

相关内容