2013-02-17 26 views
5

में किसी कथन में किसी फ़ंक्शन में तर्क पास करना मैं एक कथन के भीतर किसी फ़ंक्शन में तर्क पारित करने का प्रयास कर रहा हूं और उसके बाद फ़ंक्शन लौटाता हूं (बैश में)। मुझे जो परिणाम मिल रहा है वह गलत है। आप यह कैसे ठीक से करते हैं?बैश

#!/bin/bash 

foo() { 
    if [ $1 = "zero" ]; then 
     echo "0" 
    else 
     echo "1" 
fi 
} 

arg="zero" 
if foo $arg -eq 0 ; then 
    echo "entered 0" 
else 
    echo "entered something else" 
fi 

arg="blah" 
if foo $arg -eq 0 ; then 
    echo "entered 0" 
else 
    echo "entered something else" 
fi 

नहीं वांछित परिणाम:

[email protected]:~/work$ ./test.sh 
0 
entered 0 
1 
entered 0 

अग्रिम धन्यवाद। ~ क्रिस

उत्तर

7

आप या तो return अपने कार्य से एक परिणाम या $() का उपयोग इसके उत्पादन पर कब्जा करने की:

if [ $(foo $arg) -eq 0 ] ; then 
+0

बिग धन्यवाद जैसे कुछ चाहते हैं !! – user1117603

0

सुनिश्चित नहीं हैं कि आप क्या करना चाहते हैं ...

आपका foo() समारोह हमेशा रिटर्न सफलता के साथ, return का उपयोग करें।

आप अपने foo() पर दूसरे और तीसरे पैरामीटर -eq 0 पर काम करते हैं लेकिन उनका उपयोग नहीं किया जाता है। क्या आप बाहर निकलने की स्थिति देखना चाहते हैं? यह बस if foo $arg; then ..; fi है।

2

क्या आप वाकई 0 या 1 गूंजने के लिए अपने फ़ंक्शन की आवश्यकता है? ऐसा लगता है कि आप

foo() { 
    if [ $1 = "zero" ]; then 
    return 0 
    else 
    echo 1 
    fi 
} 

# Or even just simply foo() { [ $1 = "zero ]; } 

arg="zero" 
if foo $arg; then 
    echo "entered 0" 
else 
    echo "entered something else" 
fi 

arg="blah" 
if foo $arg; then 
    echo "entered 0" 
else 
    echo "entered something else" 
fi