2016-06-17 72 views
1

這是我的功能如何在shell腳本函數中返回值?

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功能驗證文件的zip文件或不如果是則返回2否則0.And返回的存儲資源變量的值。但問題是res變量中沒有值存儲。

回答

0

$(...)調用子shell並捕獲其標準輸出。所以,你可以做這兩件事之一:

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

或本:

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

儘管shell腳本提供了一個return語句,你可以用返回的唯一的事情,就是函數自身的退出狀態(介於0和255之間的值,0表示「成功」)。返回一個值 最好的辦法是echo相同,類似下面:

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

儘管這段代碼可以回答這個問題,提供 附加的上下文關於_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

恕我直言,'return'應該保留給函數的* exit code *,'echo'應該用來返回值。 –

+0

在可能的情況下,如果不需要退出代碼,退出代碼的分配看起來比捕獲echo輸出的'$()'結構更優雅。如果非遞歸,那麼仍然有可能使用一個變量來返回一個值,以同時解決所有問題。 –

相關問題