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
$