উপরের ইস্যুটির আর একটি সমাধান হ'ল প্রতিটি স্ট্রিংকে একটি ভেরিয়েবলে সেট করা, আক্ষরিক ডলার চিহ্ন দ্বারা চিহ্নিত ভেরিয়েবলগুলির সাথে ফাংশনটি কল করুন \$
। তারপরে ফাংশনে 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
এটির অনুরূপ সমস্যা সমাধানের চেষ্টা করার জন্য, আমি ইউনিক্সের বিষয়টি নিয়ে ভাবছিলাম যে আমার ভেরিয়েবলগুলি স্থান পরিবর্তন করে। আমি awk
পরে রিপোর্ট তৈরির জন্য ব্যবহৃত ভেরিয়েবলগুলির একটি সিরিজ সেট করে একটি ফাংশনে পাইপ ডিলিমিট স্ট্রিংটি পাস করার চেষ্টা করছিলাম । আমি গোস্টডোগ 74৪ দ্বারা পোস্ট করা সমাধানটি প্রথমে চেষ্টা করেছিলাম কিন্তু আমার সমস্ত পরামিতি উদ্ধৃতিতে পাস না হওয়ায় এটি কাজ করতে পারেনি। প্রতিটি প্যারামিটারে ডাবল-কোট যুক্ত করার পরে এটি প্রত্যাশা অনুযায়ী কাজ করা শুরু করে।
নীচে আমার কোডের রাষ্ট্রের আগে এবং রাষ্ট্রের পরে সম্পূর্ণরূপে কার্যকারী রয়েছে।
পূর্বে - নন ফাংশন কোড
#!/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