如果:使用小于符号时格式不正确的数字



我是CSH的新手,所以如果这是一个微不足道的问题,我深表歉意。我有一个名为"准确性"的变量,我从文件中读取它,我想将其与其他值进行比较。下面是一些代码:

set accuracy = `cat results.dat | tail -1 | cut -c1-20`
echo '#####ACCURACY: '$accuracy
set solved = 0
if ($accuracy <= 0.000000008) set solved = 1

如果我这样做,我会收到此错误

if:格式不正确的数字。

但是,如果我用这个替换最后一行:

if ( $accuracy == 0.000000000000) set solved = 1

一切正常。有人可以告诉我我做错了什么吗?第一个回声的输出是这样的:

精度:0.000000000007

这根本不是一个bash脚本 - 它是一个csh脚本。bash 版本可能如下所示:

#!/usr/bin/env bash
accuracy=$(tail -1 <results.dat | cut -c1-20)
echo "#####ACCURACY: $accuracy"
solved=0
if [[ $(bc <<<"$accuracy <= 0.000000008") = 1 ]]; then
solved=1
fi

请参阅 BashFAQ #22 以讨论在 Bash 中进行浮点数学运算。

问题是 csh 不支持表达式中的浮点数,只支持整数。

set accuracy = `cat results.dat | tail -1 | cut -c1-20`
echo '#####ACCURACY: '$accuracy
set solved = 0
if (`echo "$accuracy <= 0.000000008" | bc`) set solved = 1

对于更复杂的表达式,可能需要使用bc -l而不是普通bc。有了-le(x)l(y)这样的东西,它们分别实现了 ex和 ln(y)(以及更多)。

注意:正如许多人提到的,您应该避免使用 csh。尽管对tcsh做出了一些小的改变,但一旦我读了CSH编程被认为是有害的,我就停止使用它了。

最新更新