Bash: 조건부 구성에서 사용자 정의 함수(true 또는 false를 반환)를 사용하는 방법은 무엇입니까?

Bash: 조건부 구성에서 사용자 정의 함수(true 또는 false를 반환)를 사용하는 방법은 무엇입니까?

, 또는 문의 조건부 컨텍스트에서 문자열이 단어 또는 버전 번호인 경우와 같이 인수를 테스트하는 사용자 정의 메서드를 올바르게 사용하려면 어떻게 해야 if합니까 ?whileuntil

특히 (이중) 중괄호는 -gt.

메소드를 호출하면 되나요? 그렇다면 그렇게 하기 위한 상황 요구 사항은 무엇입니까? 그러면 (이중) 대괄호 내부/외부 ifwhile다른 명령문에서 until명령 대체 없이 함수 호출에 어떻게 반응합니까?

그리고 다른 테스트 방법을 호출하기 위해 명령 대체를 사용하지 않는 경우에도 부울 연산자로 연결할 수 있습니까?

연결을 위해 괄호나 이중 괄호를 사용해야 하는 사용 사례가 있나요?

언제 명령 확장이 필요합니까? 함수를 호출하기 위해 산술 확장이 필요한 경우가 있나요?

답변1

함수가 명령을 포함한 다른 모든 명령과 마찬가지로 종료 상태를 통해 성공/실패 true/false를 반환하기를 원할 것입니다. true/성공에 대한 인수로 0이 포함된 내장 [함수를 사용하고 returnfalse/실패에 대한 다른 인수를 사용하거나 다음과 같이 반환하면 됩니다. 함수에 의해 실행되는 마지막 명령의 종료:

isnewer() {
  [ "$1" -nt "$2" ]
  # here returns with the status of the [ command
}

isvowel() {
  case $1 in
    ([aeiouAEIOU]) true;; # or return 0
    (*) false;;           # or return 1
  esac
}

이는 case내부에서 실행된 마지막 명령과 함께 반환되는 복합 명령의 종료 상태로 반환됩니다(여기서는 the true또는 false명령의 종료 상태).

그런 다음 if/ while문에서 명령이 아닌 해당 함수를 호출합니다 [.

if isnewer /etc/passwd /etc/shadow; then
  echo passwd newer than shadow
fi
if isvowel "$x" || isvowel "$y"; then...

이중 중괄호 또는 이중 괄호에 대한 (나에게 불분명한) 참조에 관해서는 while [은 일반 명령( test명령의 또 다른 이름)일 뿐이며 Korn 쉘 및 다음을 포함한 일부 파생물은 bash다음과 같습니다.

  • (( arithmetic expression ))산술 표현식(C 언어와 유사한 구문을 따르고 쉘마다 다름)을 평가하고 결과 숫자가 0이 아닌 경우 (평소와 같이 0 종료 상태를 통해) true/success를 반환하는 구문입니다. 해당 산술 표현식 구문에는 C( <, >=, ||, &&...) 와 유사한 비교 및 ​​부울 연산자가 있습니다 .
  • [[ conditional expression ]]조건식을 평가하는 구문(자체 구문을 사용하고 셸마다 다르며 인수를 구문 분석하는 방식을 연상시킵니다 . [/ 명령과 같은 해당 구문을 [사용 하여 위와 test같은 여러 테스트를 수행할 수 있습니다) -nt또는 문자열이나 짝수를 비교합니다.

그러나 Bash에는 이중 중괄호 연산자가 없습니다.

관련 정보