"-eq: 단항 연산자가 false로 예상됨"이 나타나는 이유는 무엇입니까? [복사]

"-eq: 단항 연산자가 false로 예상됨"이 나타나는 이유는 무엇입니까? [복사]

알겠어요

$ ./5_divisible_by_1_to_10.sh 
./5_divisible_by_1_to_10.sh: line 16: [: -eq: unary operator expected
 false
true

을 위한:

divisible_by () {
  under_test=$1
  from=2
  to=4
  divisible=0
  for ((check=from; check<=to; check++)) {
    if [ $(($under_test % $check)) -ne 0 ]; then
      divisible=1
    fi  
  }
  return $divisible
}

divider=10
x= divisible_by "$divider"
if [ $x -eq 0 ]; then  # <--- Line 16
  echo "$x true"
else
  echo "$x false"
fi
divider=12
if divisible_by $divider; then
  echo "true"
else
  echo "false"
fi

12를 사용한 두 번째 호출은 잘 작동하지만 10(결과를 표시하려고 하는 경우)을 사용한 첫 번째 호출에서는 오류가 발생합니다.

$x주위에 따옴표를 추가하면 "$x"다른 오류가 발생합니다.

$ ./5_divisible_by_1_to_10.sh 
./5_divisible_by_1_to_10.sh: line 16: [: : integer expression expected
 false
true

답변1

존재하다

if [ $x -eq 0 ]

x행이 비어 있기 때문에

x= divisible_by "$divider"

잘못된 것입니다: divisible_by빈 환경 변수로 호출되었지만 쉘 환경에서 설정하려고 x시도하지도 않았습니다 . x다음을 수행해야 합니다.

divisible_by "$divider"
x=$?

그리고 항상 변수를 인용해야 합니다.

관련 정보