Programming

bash 변수가 0인지 확인하십시오

procodes 2020. 6. 3. 22:35
반응형

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 ]

배시 식에 변수의 값을 대입 한 후. 여기서 문제는

-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

Specifically: ((depth)). By example, the following prints 1.

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

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

You can try this:

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

NOTE: Here it's just ? after depth.

or

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

NOTE: Here it's :? after depth.

Here if the variable depth is found null it will print the error message and then exit.

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

반응형