2016-06-17 4 views
1

쉘 스크립트 함수에서 값을 반환하는 방법은 무엇입니까?

validateFile() 
    { 
    echo "$1" | grep '.zip$' > /dev/null 
    if [ $? -eq 0 ] 
    then 
     return 1 
    else 
     return 0 
    fi 
    } 
    printf "\n Enter Source File1 Path: " 
    read file1 
    res=$(validateFile $file1); 
    echo "$res" 

But nothing store in **"res"** store nothig 

validateFile 기능은 예 다음 다른 0.And이 값은 고해상도 변수에 저장 반환 2를 반환 할 경우 해당 파일은 zip 파일 여부를 확인 내 기능입니다. 그러나 문제는 res 변수에는 값 저장소가 없습니다.

답변

0

$(...)은 서브 쉘을 호출하고 표준 출력을 캡처합니다.

foo() { 
    fooresult=1 
} 
foo 
echo $fooresult 

나이 : 쉘 스크립트가 return 문을 제공

foo() { 
    echo 1 
} 
fooresult=$(foo) 
echo $fooresult 
1

하지만, 당신이 반환 할 수있는 유일한 것은, 함수의 자신의 종료 상태 (그래서 당신은이 두 가지 중 하나를 수행 할 수 있습니다 0에서 255 사이의 값, 0은 "성공"을 의미 함). 추가 컨텍스트를 제공,이 코드는 질문에 대답 할 수 있지만

validateFile() 
    { 
    echo "$1" | grep '.zip$' > /dev/null 
    if [ $? -eq 0 ] 
    then 
     echo 1 
    else 
     echo 0 
    fi 
    } 
printf "\n Enter Source File1 Path: " 
read file1 
res=$(validateFile $file1); 
echo "$res" 
0
validateFile() 
{ 
    echo "$1" | grep '.zip$' > /dev/null 
    if [ $? -eq 0 ] 
    then 
     echo 1 
    else 
     echo 0 
    fi 
} 
printf "\n Enter Source File1 Path: " 
    read file1 
    res=$(validateFile $file1); 
    echo "$res" 
+0

입니다 : 값을 반환 할 수 가장 좋은 방법은 다음과 같은 같은, 뭔가를 echo하는 것입니다 _why_ 및/또는 _how_에 관해서는 이라고 대답하면 장기적으로 값을 향상시킬 수 있습니다. 대답을 편집하여 설명을 추가하십시오. –

1

은 당신이 원하는 것은 어쩌면

validateFile() 
    { 
    echo "$1" | grep '.zip$' > /dev/null 
    if [ $? -eq 0 ] 
    then 
     # return appropriate value 
     return 1 
    else 
     return 0 
    fi 
    } 
printf "\n Enter Source File1 Path: " 
read file1 
# call function 
validateFile $file1 
# use return code 
res=$? 
echo "$res" 
+0

IMHO,'return'은 함수의 * 종료 코드 *를 위해 예약되어야하고'echo'는 값을 반환해야합니다. –

+0

가능한 경우 종료 코드가 필요하지 않으면 종료 코드 할당은 echo 출력을 포착하는'$()'구조보다 더 우아 해 보입니다. 비 재귀 적이면 변수를 사용하여 모든 문제를 즉시 해결하는 값을 반환 할 가능성이 여전히 있습니다. –

관련 문제