उपरोक्त समस्या का एक अन्य समाधान प्रत्येक स्ट्रिंग को एक चर में सेट करना है, फ़ंक्शन को एक शाब्दिक डॉलर के संकेत द्वारा दर्शाए गए चर के साथ कॉल करें \$
। फिर फ़ंक्शन eval
में वैरिएबल और आउटपुट को अपेक्षित रूप से पढ़ने के लिए उपयोग करें।
#!/usr/bin/ksh
myFunction()
{
eval string1="$1"
eval string2="$2"
eval string3="$3"
echo "string1 = ${string1}"
echo "string2 = ${string2}"
echo "string3 = ${string3}"
}
var1="firstString"
var2="second string with spaces"
var3="thirdString"
myFunction "\${var1}" "\${var2}" "\${var3}"
exit 0
आउटपुट तब है:
string1 = firstString
string2 = second string with spaces
string3 = thirdString
इसी तरह की समस्या को हल करने की कोशिश में, मैं UNIX के मुद्दे पर सोच रहा था कि मेरे चर अंतरिक्ष में परिमित थे। मैं एक फ़ंक्शन awk
बनाने के लिए बाद में एक रिपोर्ट बनाने के लिए उपयोग किए जाने वाले चर की एक श्रृंखला का उपयोग करके एक फ़ंक्शन को एक पाइप सीमांकित स्ट्रिंग को पारित करने की कोशिश कर रहा था । मैंने शुरुआत में ghostdog74 द्वारा पोस्ट किए गए समाधान की कोशिश की, लेकिन इसे काम करने के लिए नहीं मिला क्योंकि मेरे सभी मापदंडों को उद्धरणों में पारित नहीं किया गया था। प्रत्येक पैरामीटर में डबल-कोट जोड़ने के बाद यह तब अपेक्षित रूप से कार्य करना शुरू कर देता है।
नीचे मेरे कोड से पहले की स्थिति है और राज्य के बाद पूरी तरह से काम कर रहा है।
इससे पहले - नॉन फंक्शनिंग कोड
#!/usr/bin/ksh
#*******************************************************************************
# Setup Function To Extract Each Field For The Error Report
#*******************************************************************************
getField(){
detailedString="$1"
fieldNumber=$2
# Retrieves Column ${fieldNumber} From The Pipe Delimited ${detailedString}
# And Strips Leading And Trailing Spaces
echo ${detailedString} | awk -F '|' -v VAR=${fieldNumber} '{ print $VAR }' | sed 's/^[ \t]*//;s/[ \t]*$//'
}
while read LINE
do
var1="$LINE"
# Below Does Not Work Since There Are Not Quotes Around The 3
iputId=$(getField "${var1}" 3)
done<${someFile}
exit 0
के बाद - फंक्शनिंग कोड
#!/usr/bin/ksh
#*******************************************************************************
# Setup Function To Extract Each Field For The Report
#*******************************************************************************
getField(){
detailedString="$1"
fieldNumber=$2
# Retrieves Column ${fieldNumber} From The Pipe Delimited ${detailedString}
# And Strips Leading And Trailing Spaces
echo ${detailedString} | awk -F '|' -v VAR=${fieldNumber} '{ print $VAR }' | sed 's/^[ \t]*//;s/[ \t]*$//'
}
while read LINE
do
var1="$LINE"
# Below Now Works As There Are Quotes Around The 3
iputId=$(getField "${var1}" "3")
done<${someFile}
exit 0