Bash - 'unary operator expected'

Bash - 'unary operator expected'

我有一个 shell 脚本,它有超过 200,000 次迭代。这是给我带来问题的一段代码:

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

我不明白为什么。我看到一些类似的问题,但我找不到满意的答案。可能的解决方案是什么?我很清楚如何比较两个浮点数。为什么我只在某些情况下会收到此错误?

两个错误直接相关:

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