2013-04-21 2 views
3

우선 배시 함수의 리턴에있어서 테스트 내 소스 코드 :배시 기능

function oidev.fnc.bash.example.fncreturnstringvalue 
{ 
    echo "ABC" 
    return 1 
} 

호출자 기능 :

function oidev.fnc.bash.example.fncreturnstringvaluecaller 
{ 
    local FNCVALUE 
    local FNCSTRING 
    FNCSTRING=$(oidev.fnc.bash.example.fncreturnstringvalue && FNCVALUE="$?" || FNCVALUE="$?") 
    # String OK but Value empty 
    echo "VALUE : $FNCVALUE" 
    echo "STRING: $FNCSTRING" 
    unset FNCVALUE 
    unset FNCSTRING 
    oidev.fnc.bash.example.fncreturnstringvalue && FNCVALUE="$?" || FNCVALUE="$?" 
    # Value OK and String on STDOUT 
    echo "VALUE : $FNCVALUE" 
    echo "STRING: $FNCSTRING" 
} 

떠들썩한 파티에서 출력 :
VALUE :
문자열 : ABC
ABC
값 : 1 012 3,STRING : (반드시 비어 있지만, 함수에서 에코) `

그리고 지금 내 간단한 질문 :
그것은 하나의 라인 건설에 의해 두 개의 서로 다른 변수로 복귀 문자열과 반환 값을 얻을 수 있습니까?

전역 변수를 사용하고 싶지 않습니다. $가 아닌 경우에는 사용할 수 없습니까? 하위 호출 후!
많은 도움에 감사하고, 나의 독일어 영어에 대해 유감스럽게 생각한다!

답변

1

어쩌면 도움이 시도 :

func() { 
    echo 'abc' 
    return 111 
} 

read var1 var2 <<<$(func; echo $?) 
echo "var1 $var1" 
echo "var2 $var2" 

인쇄됩니다

var1 abc 
var2 111 

해결 방법을 "공간 문제"를 - 지금이 아니라 더 나은 생각을 가지고이

같은 도우미 함수를 사용할 때
func() { 
    echo 'abc def' 
    return 111 
} 

runner() { 
    ret=$(func) 
    echo $? $ret 
} 

read -r var2 var1 <<<$(runner func) 
echo "var1 $var1" 
echo "var2 $var2" 

또는 도우미 변수를 사용하고 변수 순서를 바꿈

func() { 
    echo 'abc def' 
    return 111 
} 
read -r var2 var1 <<<$(res=$(func); echo $? $res) 
echo "var1 $var1" 
echo "var2 $var2" 

모두이 완벽한 대답을

var1 abc def 
var2 111 
+0

감사를 반환 할 것이라고 <<< 건설 ... 구글은 알고있다! –

+0

'func()'에 의해 반환 된 문자열이 공백을 포함하고 있다면 이것은 작동하지 않을 것입니다. – jordanm

+0

네, 그렇지만 echo "\ 'a b c \'"함수를 사용하여 호출자로부터 읽기 위해 하나의 변수에 인용 할 수 있습니다 –