Bash는 bool 함수의 변수 결과를 할당한 다음 확인합니다.

Bash는 bool 함수의 변수 결과를 할당한 다음 확인합니다.

0 또는 1(예: true 또는 false)을 반환하고 인수를 사용하는 함수를 만든 다음 다른 함수에 변수를 만들어 해당 함수의 결과를 저장하려고 합니다. 마지막으로 변수가 0 또는 1(참 또는 거짓)인지 확인합니다.

다음은 내가 시도하는 것의 예입니다.

#!/bin/bash

_has_string() {
  if [ $1 == "string" ];
    return 0
  else
    return 1
  fi
}

_my_func() {
  var=$(_has_string "string")
  if [ $var == "0" ]; then
    echo "var contains string"
  else
    echo "var does not contain string"
  fi
}

_my_func

몇 가지 변형을 시도했지만 작동하게 하는 방법을 찾을 수 없는 것 같습니다. 내 모든 변형은 기본적으로 아무것도 반환하지 않습니다 $var. 0이 아닙니다. 비어 있지 않습니다. 말 그대로 그냥 비어있습니다.

답변1

출력을 종료 코드와 혼동하고 있습니다.

_my_func() {
  if _has_string 'string'; then

또한 변수를 인용해야 하며 이는 _has_string다음과 같이 단순화될 수 있습니다.

_has_string() {
    [ "$1" = 'string' ]
}

답변2

$(...)반품산출명령 내용: 표준 출력으로 전송되는 내용입니다. 당신이 원하는종료 코드. bash 스크립트의 프로세스(또는 귀하의 경우 함수)가 종료된 후 특수 변수가 $?종료 코드로 설정됩니다.

그래서 대신

var=$(_has_string 'string')
...

고려하다

_has_string 'string'
var=$?
...

답변3

다른 분들이 이미 지적하셨듯이, 그냥 if문장에 있는 함수를 사용하시면 됩니다. 다음은 귀하가 모를 수도 있는 몇 가지 사항입니다.

함수는 형태로 생각될 수 있다복합 명령. Bash 매뉴얼에 따르면 [[이는 복합 명령을 작성하는 데 사용할 수 있는 연산자 중 하나입니다. 따라서 함수는 _has_string()다음과 같이 구현될 수 있습니다.

$ _has_string()[[ "$1" = "string" ]]
$ if _has_string "string"; then echo "YES"; fi
YES

물론, 이것은 통신사 사정으로 인해 결코 휴대할 수 없습니다 [[. 그러나 우리는 ( )또는 를 사용할 수 있습니다 {}. 예를 들어 작동 방식은 다음과 같습니다 /bin/dash.

$ _has_string()( [ "$1" = "string" ]; )
$ if _has_string "string"; then echo "YES"; fi
YES
$ if _has_string "nope" ; then echo "YES"; fi                             
$ 

관련 정보