return
बयान bash
द्वारा इस्तेमाल किया एक अंकीय मान वापस जाने के लिए के रूप में एक स्थिति कोड बुला समारोह से $?
के माध्यम से प्राप्त किया जा करने के लिए प्रयोग किया जाता है। आप एक स्ट्रिंग वापस नहीं कर सकते हैं। भी
आप एक विशेष वैश्विक चर का उपयोग कर सकते हैं या तो के रूप में @konsolebox द्वारा प्रस्तावित या देखें, echo
अपने समारोह के अंदर वापसी मान, और जब फ़ंक्शन को कॉल आदेश प्रतिस्थापन का उपयोग :
makeName()
{
echo "$fileName.$1.log"
}
echo -n "Enter fileName:"
read fileName
name1=$(makeName "type1")
name2=$(makeName "type2")
echo $name1
echo $name2
[अद्यतन]
अद्यतन प्रश्न दिखाता है कि आप makeName
फ़ंक्शन के अंदर अभी तक एक और मूल्य पढ़ने का इरादा रखते हैं, जबकि फ़ंक्शन भी echo
उपयोगकर्ता के लिए कुछ संकेत देता है। तो आदेश प्रतिस्थापन दृष्टिकोण है कि मामले में काम नहीं - आप एक वैश्विक चर का उपयोग करने की आवश्यकता है,
makeName() {
echo -n "Enter Ext: "
read ext
__="$fileName.$1.$ext.log"
}
echo -n "Enter fileName:"
read fileName
makeName "type1" ; name1=${__}
makeName "type2" ; name2=${__}
echo $name1
echo $name2
$ ./sample.sh
Enter fileName:filename
Enter Ext: ext1
Enter Ext: ext2
filename.type1.ext1.log
filename.type2.ext2.log
फिर भी तरह बेहतर है, क्लीनर कोड के लिए और अपने समारोह के अंदर वैश्विक चर का उपयोग कर से बचने के लिए, आप दृष्टिकोण Returning Values from Bash Functions और में वर्णित इस्तेमाल कर सकते हैं पैरामीटर के रूप में वापसी वैरिएबल का नाम गुजरती हैं, और आदर्श रूप में भी पैरामीटर के रूप में fileName
पारित:
makeName() {
local __type=$1
local __fileName=$2
local __resultvar=$3
local ext
local myresult
echo -n "Enter Ext: "
read ext
myresult="$__fileName.$__type.$ext.log"
eval $__resultvar="'$myresult'"
}
echo -n "Enter fileName:"
read fileName
makeName "type1" $fileName theResult ; name1=${theResult}
makeName "type2" $fileName theResult ; name2=${theResult}
echo $myresult
echo $name1
echo $name2
साइड नोट: चर्चा के लिए Why should eval be avoided in Bash, and what should I use instead? देखें eval
से बचा जाना चाहिए। बैश संस्करण 3.1 या उच्चतर का उपयोग करते समय, आप eval
के बजाय printf
उपयोग कर सकते हैं:
...
printf -v "$__resultvar" '%s' "$myresult"
...
और अंत में, पार्टी के साथ 4.3 या उसके बाद, हम एक चर declare -n
का उपयोग करने के nameref विशेषता असाइन कर सकते हैं ताकि चर को प्रभावी ढंग से एक और चर के लिए एक संदर्भ है:
...
declare -n myresult=$3
myresult="$__fileName.$__type.$ext.log"
...
हाय एंड्रियास, मैं अपने प्रश्न को अद्यतन किया है। – Ashwin
मेरा अद्यतन उत्तर देखें - अनिवार्य रूप से, आपने 'रिटर्न' का दुरुपयोग किया है, और आपको @ कंसोलबॉक्स द्वारा प्रस्तावित दृष्टिकोण का उपयोग करने की भी आवश्यकता है जब आपका फ़ंक्शन stdout (वापसी मूल्य के अलावा) आउटपुट प्रिंट करने का इरादा रखता है –
धन्यवाद एंड्रियास। यह अभी ठीक काम करता है। :) – Ashwin