0

問題はこの行にあります

elif [  "$(echo $a '>' $v06 | bc -l)"  -eq 1  &&   "$(echo $a '<' $v08 | bc -l)" -eq 1  ];then

番号が範囲内にあるかどうかをテストするにはどうすればよいですか?これには他の解決策があるかもしれないことを私は知っていますが、私はbcでこのように解決したいと思います...

a=0.1
v06=0.6
v08=0.8

if [ "$(echo $a '<' $v06 | bc -l)" -eq 1 ];then
    echo " <0.6"
elif [  "$(echo $a '>' $v06 | bc -l)"  -eq 1  &&   "$(echo $a '<' $v08 | bc -l)" -eq 1  ];then
    echo " <0.6 >0.8"
else
    echo ">1.5"
fi
4

3 に答える 3

2

実際、唯一間違っているのは、&&内部[ ]で使用しているために機能しないことです。

複数のテスト条件にのみ[[ ]]含めることができます。&&

&&代わりに、このように外側を置くことができます

elif [ "$(echo $a '>' $v06 | bc -l)" -eq 1 ] && [ "$(echo $a '<' $v08 | bc -l)" -eq 1 ]; then 

またはさらに良い

elif [ $(echo "($a > $v06) && ($a < $v08)" | bc -l) -eq 1 ]; then

bc実際に(num1 > num2) && (num1 < num3)表記をサポートしているので

$( )p / s:期待しているだけなので、0または1戻り値として、引用符は必要ありません。

p / s2:引用符で$( )囲まれている場合でも、引用符を含めることができます。

"$(echo "1 + 2" | bc -l )" 
于 2012-10-18T12:14:26.330 に答える
1

「0」を削除できます。-gtおよび-lt演算子を使用します。

v06="$(echo $v06 | sed 's/0.//')"
v08="$(echo $v08 | sed 's/0.//')"




elif [  $a -gt $v06 -a $a -lt $v08 ];then
于 2012-10-18T10:26:17.840 に答える
0

本当にbcを使用したい場合:

test1=$(bc -l <<< "${a} < ${v06}")
test2=$(bc -l <<< "${a} > ${v06}")
test3=$(bc -l <<< "${a} < ${v08}")
if [[ ${test1} -eq 1 ]]; then
   blabla
elif [[ ${test1} -eq 1 && ${test2} -eq 1 ]]; then 
   blabla
fi

変数を中かっこで囲むことをお勧めします(したがって、06と08が追加されないことを確認$vしてください)。のような演算子を使用している場合は、テストで二重かっこを使用してください&&

于 2012-10-18T10:32:16.420 に答える