2017-04-06 8 views
0

私は200000回以上の反復を持つシェルスクリプトを持っています。ここに私に問題を与えているコードがあります:BASH '単項演算子が期待しています'

if [ 1 -eq `echo "$sums>$maxs" | bc` ] ; 
      then 
      hmax=$h; 
      kmax=$k; 
      maxs=$sums; 
fi 

sums、maxs、hおよびkは先に定義されています。私はhとkの異なる値をループしており、合計はそれらから計算されます。しかし、hとkの特定の値についてのみ、私はこのエラーを受け取ります:

(standard_in) 1: syntax error 
./zhu-kanamori.sh: line 173: [: 1: unary operator expected 

私はなぜそれが理解できません。私はいくつかの同様の質問を見ましたが、満足のいく答えを見つけることができませんでした。だから誰かが私がどこに解決策を導くことができるなら、それも素晴らしいだろう。私は2つのフロートを比較する方法についてはっきりしています。しかし、なぜ私はこのエラーが発生するのはなぜですか?

+0

あなたの質問をより簡潔なものにしてください。お手数ですが、お手伝いします。 – Fred

+0

さて、文脈のコード全体を追加しました。実際の質問はちょうど最初です。私は今それを変更するつもりです。 – Archon

+3

'(standard_in)1:syntax error'は' bc'が出力するエラーです。明らかに、 '$ sums'と' $ maxs'はあなたが思うものではありません。 (つまり、単純な数字ではありません) –

答えて

1

2つのエラーが直接リンクされている:

  • (standard_in) 1: syntax errorbcはそれが渡された文字列を理解していなかったことを意味します。つまり、$sums$maxsは実際にはあなたが思った浮動小数点値ではありませんでした。 bash -x yourscriptで実行して、使用中の実際の値を確認します(エラーを再現可能にする実際の値を含めるように質問を修正することができます)。
  • ./zhu-kanamori.sh: line 173: [: 1: unary operator expectedは、[-eqに2つのオペランドを持つことを期待していることを意味しますが、1つしか渡されませんでした。これは、コマンド置換を適切に引用しなかったために起こりました。そのため、失敗したときにbcによって生成された空の文字列は、空の引数ではなく、testのゼロ引数として扱われました。
+0

よろしくお願いいたします。 $ sumsの値が未定義になっているようです – Archon

関連する問題