উচ্চ স্তরের প্রোগ্রামিং ভাষার জ্ঞান (সি / সি ++ / জাভা / পিএইচপি / পাইথন / পার্ল ...) সাধারণ মানুষকে পরামর্শ দেবে যে বাশ ফাংশনগুলি অন্য ভাষাগুলির মতো কাজ করা উচিত। পরিবর্তে , বাশ ফাংশনগুলি শেল কমান্ডের মতো কাজ করে এবং শেল কমান্ডের (যেমন ls -l
) বিকল্পটি যেমন পাস করতে পারে তেমনিভাবে তাদের কাছে আর্গুমেন্টগুলি পাস করার আশা করে । বাস্তবে, ব্যাশে ফাংশন আর্গুমেন্টগুলি অবস্থানগত পরামিতি ( $1, $2..$9, ${10}, ${11}
এবং আরও কিছু) হিসাবে বিবেচনা করা হয়। এটি কীভাবে getopts
কাজ করে তা বিবেচনা করে অবাক হওয়ার কিছু নেই । ব্যাশে কোনও ফাংশন কল করতে বন্ধনী ব্যবহার করবেন না।
( দ্রষ্টব্য : আমি এই মুহুর্তে ওপেন সোলারিসে কাজ করে যাচ্ছি))
# bash style declaration for all you PHP/JavaScript junkies. :-)
# $1 is the directory to archive
# $2 is the name of the tar and zipped file when all is done.
function backupWebRoot ()
{
tar -cvf - $1 | zip -n .jpg:.gif:.png $2 - 2>> $errorlog &&
echo -e "\nTarball created!\n"
}
# sh style declaration for the purist in you. ;-)
# $1 is the directory to archive
# $2 is the name of the tar and zipped file when all is done.
backupWebRoot ()
{
tar -cvf - $1 | zip -n .jpg:.gif:.png $2 - 2>> $errorlog &&
echo -e "\nTarball created!\n"
}
# In the actual shell script
# $0 $1 $2
backupWebRoot ~/public/www/ webSite.tar.zip
ভেরিয়েবলের জন্য নাম ব্যবহার করতে চান। শুধু এই কাজ।
declare filename=$1 # declare gives you more options and limits variable scope
একটি ফাংশনে একটি অ্যারে পাস করতে চান?
callingSomeFunction "${someArray[@]}" # Expands to all array elements.
ফাংশনের অভ্যন্তরে, এই জাতীয় যুক্তিগুলি হ্যান্ডেল করুন।
function callingSomeFunction ()
{
for value in "$@" # You want to use "$@" here, not "$*" !!!!!
do
:
done
}
একটি মান এবং একটি অ্যারে পাস করার প্রয়োজন, তবে এখনও ফাংশনের ভিতরে "$ @" ব্যবহার করবেন?
function linearSearch ()
{
declare myVar="$1"
shift 1 # removes $1 from the parameter list
for value in "$@" # Represents the remaining parameters.
do
if [[ $value == $myVar ]]
then
echo -e "Found it!\t... after a while."
return 0
fi
done
return 1
}
linearSearch $someStringValue "${someArray[@]}"