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

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

ifwhile또는 문의 조건부 컨텍스트(예: 문자열이 단어인지 또는 버전 번호인지)에서 매개 변수를 테스트하는 사용자 정의 메서드를 올바르게 사용하려면 어떻게 해야 합니까 until?

특히 (이중) 중괄호는 한쪽 측면의 테스트 방법에서 문제가 있는 것 같습니다 -gt.

한 가지 메소드만 호출할 수 있나요? 그렇다면 그렇게 하기 위한 배경 요구사항은 무엇입니까? 그렇다면 내부/외부(이중) 괄호와 다른 명령문에서는 명령 if대체 없이 함수 호출에 어떻게 반응합니까?whileuntil

다른 테스트 메소드를 호출하기 위해 명령 대체를 사용하지 않는 경우에도 부울 연산자를 통해 이들을 연결할 수 있습니까?

연결을 위해 대괄호 또는 이중 대괄호가 필요한 사용 사례가 있습니까?

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

답변1

true/success 매개변수가 0이고 기타 false/failure 매개변수가 있는 내장 함수를 [사용하여 함수가 다른 모든 명령(이 명령어 포함)과 마찬가지로 종료 상태로 성공/실패 true/false를 반환하도록 하려고 합니다 . 또는 return함수에 의해 실행된 마지막 명령의 종료만 반환됩니다.

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, 그 자체는 그 안에서 실행된 마지막 명령(따라서 여기의 명령 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이 아닌 경우 true/성공(평소와 같이 종료 상태가 0임)을 반환하는 구문입니다 . 산술 표현식 구문에는 C와 유사한 비교 및 ​​부울 연산자( <, >=, ||, &&...)가 있습니다.
  • 조건식을 평가하는 구문입니다(쉘마다 다르며 해당 [[ conditional expression ]]인수가 구문 분석되는 방식을 연상시키는 자체 구문을 사용함). /command와 같은 이 구문은 다음과 같은 많은 테스트 또는 비교를 수행하는 데 사용할 수 있습니다. 위의 문자열 또는 짝수.[[test-nt

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

관련 정보