BASH'一元运营商预计'

时间:2017-04-06 19:54:55

标签: bash sh bc

所以我有一个shell脚本,它有超过200000次迭代。以下是给我提出问题的代码:

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

我不明白为什么。我看到了一些类似的问题,但找不到满意的答案。所以,如果有人能指导我解决问题的地方,那也会很棒。我很清楚如何比较两个花车。但我的问题是为什么只在某些情况下我会收到此错误?

1 个答案:

答案 0 :(得分:1)

这两个错误直接相关:

  • (standard_in) 1: syntax error表示bc无法理解传递的字符串。这意味着$sums$maxs实际上并不是您认为的浮点值;使用bash -x yourscript运行以查看正在使用的实际值(从而能够修改您的问题以包含使您的错误可重现的实际值)。
  • ./zhu-kanamori.sh: line 173: [: 1: unary operator expected表示[期望-eq有两个操作数,但只传递了一个操作数。发生这种情况是因为您没有充分引用命令替换,因此bc在失败时发出的空字符串被视为test的零参数,而不是单个空参数。< / LI>