2017-04-06 58 views
0

所以我有一個shell腳本,它有超過200000次迭代。下面是一段代碼給我的問題:BASH'一元運算符預期'

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

總和,最大值,h和k的定義在前面。我通過h和k的不同值循環,並從中計算總和。但是,僅針對h和k的具體值,我得到此錯誤:

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

我不明白爲什麼。我看到一些類似的問題,但找不到滿意的答案。所以,如果任何人都可以指導我解決問題的方法,那也會很棒。我很清楚如何比較兩個花車。但我的問題是,爲什麼只有在某些情況下,我會得到這個錯誤?

+0

請將您的問題簡化爲更簡潔的內容,它會幫助我們幫助您。 – Fred

+0

好的,但我只是添加了上下文的整個代碼。真正的問題只是在一開始。我現在要改變它。 – Archon

+3

'(standard_in)1:語法錯誤'是'bc'發出的錯誤。顯然,'$ sums'和'$ maxs'不是你認爲的那樣。 (即它們不是簡單的數字) –

回答

1

兩個錯誤直接鏈接:

  • (standard_in) 1: syntax error意味着bc不明白它傳遞的字符串。這意味着$sums$maxs實際上並不是您認爲它們的浮點值;使用bash -x yourscript運行以查看正在使用的實際值(從而能夠修改您的問題以包含使錯誤可重現的實際值)。
  • ./zhu-kanamori.sh: line 173: [: 1: unary operator expected表示[預計-eq有兩個操作數,但它只通過一個。發生這種情況是因爲您沒有充分引用命令替換,所以在失敗時由bc發出的空字符串被視爲test的零參數,而不是單個空參數。
+0

好的,謝謝。看起來有些$總和值是未定義的 – Archon