2017-04-06 59 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