2017-04-06 12 views
0

그래서 200000 번 반복되는 쉘 스크립트가 있습니다. 다음은 문제를 일으키는 코드 조각입니다.BASH '단항 연산자가 필요합니다'

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

합계, maxs, 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

'(표준 _1) 1 : 구문 오류 '는'bc'에 의해 생성 된 오류입니다. 분명히'$ sums'와'$ maxs'는 여러분이 생각하는 것과 다르다. (즉, 단순한 숫자가 아닙니다.) –

답변

1

두 가지 오류가 직접 연결되어 있습니다 :

  • (standard_in) 1: syntax errorbc 그것이 전달 된 문자열을 이해하지 못했음을 의미합니다. 이것은 $sums$maxs이 실제로 생각한 부동 소수점 값이 아니라는 것을 의미합니다. bash -x yourscript으로 실행하면 사용중인 실제 값을 볼 수 있습니다. 그러면 오류를 재현 할 수 있도록 실제 값을 포함하도록 질문을 수정할 수 있습니다.
  • ./zhu-kanamori.sh: line 173: [: 1: unary operator expected[-eq에 2 개의 피연산자가 있다고 예상하지만 하나만 전달되었다고합니다. 이는 명령 대체를 적절히 인용하지 않았기 때문에 발생했습니다. 따라서 실패했을 때 bc에 의해 방출 된 빈 문자열은 단일 빈 인수가 아닌 test에 대한 0 인수로 처리됩니다.
+0

감사합니다. 일부 $ sums 값이 정의되지 않은 것 같습니다. – Archon