如果:少用数字则格式错误,然后用符号

时间:2019-02-16 03:50:27

标签: csh

我对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 ( $accuracy == 0.000000000000) set solved = 1

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

  准确性:0.000000000007

2 个答案:

答案 0 :(得分:0)

这根本不是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

有关在bash中进行浮点数学运算的讨论,请参见BashFAQ #22

答案 1 :(得分:0)

问题在于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)之类的东西,分别实现e x 和ln(y)(还有更多)。

注意:正如许多人提到的那样,您应该避免使用csh。尽管对tcsh做出了一些小的更改,但是一旦阅读CSH Programming Considered Harmful,我就停止使用它。