我对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
答案 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
。使用-l
和e(x)
之类的东西,分别实现e x 和ln(y)(还有更多)。
注意:正如许多人提到的那样,您应该避免使用csh。尽管对tcsh做出了一些小的更改,但是一旦阅读CSH Programming Considered Harmful,我就停止使用它。