programing

bash 변수가 0인지 확인합니다.

lastcode 2023. 4. 27. 22:29
반응형

bash 변수가 0인지 확인합니다.

bash 변수 깊이가 있는데 0과 같은지 테스트하려고 합니다.이 경우 스크립트 실행을 중지합니다.지금까지 제가 가진 것은:

zero=0;

if [ $depth -eq $zero ]; then
    echo "false";
    exit;
fi

불행하게도, 이것은 다음과 같은 결과를 낳습니다.

 [: -eq: unary operator expected

(번역으로 인해 약간 부정확할 수 있음)

스크립트가 작동하도록 수정하려면 어떻게 해야 합니까?

당신의 것처럼 보입니다.depth변수가 설정되지 않았습니다.이것은 그 표현이[ $depth -eq $zero ]된다[ -eq 0 ]after bash는 변수 값을 식으로 대체합니다.여기서 문제는.-eq연산자가 하나의 인수(0)만 있는 연산자로 잘못 사용되지만 두 개의 인수가 필요합니다.그렇기 때문에 단항 연산자 오류 메시지가 표시됩니다.

편집: Doktor J가 이 답변에 대한 코멘트에서 언급했듯이, 체크에서 설정되지 않은 변수와 관련된 문제를 피하는 안전한 방법은 변수를 에 포함하는 것입니다.""설명은 그의 의견을 참고하세요.

if [ "$depth" -eq "0" ]; then
   echo "false";
   exit;
fi

변수와 함께 사용되는 설정되지 않은 변수[bash 명령이 비어 있는 것으로 나타납니다.아래 테스트를 사용하여 이를 확인할 수 있습니다. 모든 테스트는 다음과 같습니다.true왜냐면xyz비어 있거나 설정되지 않음:

  • if [ -z ] ; then echo "true"; else echo "false"; fi
  • xyz=""; if [ -z "$xyz" ] ; then echo "true"; else echo "false"; fi
  • unset xyz; if [ -z "$xyz" ] ; then echo "true"; else echo "false"; fi

이중 괄호(( ... ))는 산술 연산에 사용됩니다.

이중 대괄호[[ ... ]]다음 연산자를 사용하여 숫자를 비교 및 검사할 수 있습니다(정수만 지원됨).

· NUM1 -eq NUM2 returns true if NUM1 and NUM2 are numerically equal.

· NUM1 -ne NUM2 returns true if NUM1 and NUM2 are not numerically equal.

· NUM1 -gt NUM2 returns true if NUM1 is greater than NUM2.

· NUM1 -ge NUM2 returns true if NUM1 is greater than or equal to NUM2.

· NUM1 -lt NUM2 returns true if NUM1 is less than NUM2.

· NUM1 -le NUM2 returns true if NUM1 is less than or equal to NUM2.

예를들면

if [[ $age > 21 ]] # bad, > is a string comparison operator

if [ $age > 21 ] # bad, > is a redirection operator

if [[ $age -gt 21 ]] # okay, but fails if $age is not numeric

if (( $age > 21 )) # best, $ on age is optional

시도:

zero=0;

if [[ $depth -eq $zero ]]; then
  echo "false";
  exit;
fi

이 형식을 사용하고 '==' '<='와 같은 비교 연산자를 사용할 수도 있습니다.

  if (( $total == 0 )); then
      echo "No results for ${1}"
      return
  fi

구체적으로:((depth))예를 들어, 다음 인쇄물은1.

declare -i x=0
((x)) && echo $x

x=1
((x)) && echo $x

사용해 볼 수 있습니다.

: ${depth?"Error Message"} ## when your depth variable is not even declared or is unset.

참고: 여기는 그냥?끝나고depth.

또는

: ${depth:?"Error Message"} ## when your depth variable is declared but is null like: "depth=". 

참고: 여기 있습니다.:?끝나고depth.

변수가 다음과 같은 경우 여기서depth발견됨null오류 메시지를 인쇄한 다음 종료합니다.

언급URL : https://stackoverflow.com/questions/13086109/check-if-bash-variable-equals-0

반응형