ব্যবহার করবেন নাeval
! এটিতে স্বেচ্ছাসেবীর কোড প্রয়োগ কার্যকর করার একটি বড় ঝুঁকি রয়েছে।
বাশাএফএকিউ -50 - আমি একটি চলকটিতে একটি কমান্ড দেওয়ার চেষ্টা করছি, তবে জটিল ক্ষেত্রে সবসময় ব্যর্থ হয়।
ওয়ার্ড স্প্লিটিংয়ের কারণে শব্দটিকে বিভক্ত "${arr[@]}"
করতে না দেওয়ার জন্য এটিকে একটি অ্যারে রাখুন এবং ডাবল-কোট দিয়ে সমস্ত শব্দ প্রসারিত করুন ।IFS
cmdArgs=()
cmdArgs=('date' '+%H:%M:%S')
এবং ভিতরে অ্যারের সামগ্রীগুলি দেখুন। declare -p
আপনি পৃথক সূচকের প্রতিটি কমান্ড পরামিতি সঙ্গে অ্যারের ভিতরে বিষয়বস্তু দেখতে পারবেন। যদি এরকম একটি যুক্তিতে শূণ্যস্থান থাকে, অ্যারে যুক্ত করার সাথে ভিতরে উদ্ধৃতি যুক্ত করে ওয়ার্ড-বিভাজনের কারণে এটি বিভক্ত হওয়া থেকে রোধ করবে।
declare -p cmdArgs
declare -a cmdArgs='([0]="date" [1]="+%H:%M:%S")'
এবং হিসাবে কমান্ড কার্যকর
"${cmdArgs[@]}"
23:15:18
(বা) bash
কমান্ডটি চালাতে পুরোপুরি একটি ফাংশন ব্যবহার করুন ,
cmd() {
date '+%H:%M:%S'
}
এবং ঠিক যেমন ফাংশন কল
cmd
পসিক্সের sh
কোনও অ্যারে নেই, তাই আপনি যে নিকটে আসতে পারেন তা হল অবস্থানগত পরামিতিগুলির উপাদানগুলির একটি তালিকা তৈরি করা। sh
মেল প্রোগ্রাম চালানোর জন্য এখানে একটি পসিক্স উপায়
# POSIX sh
# Usage: sendto subject address [address ...]
sendto() {
subject=$1
shift
first=1
for addr; do
if [ "$first" = 1 ]; then set --; first=0; fi
set -- "$@" --recipient="$addr"
done
if [ "$first" = 1 ]; then
echo "usage: sendto subject address [address ...]"
return 1
fi
MailTool --subject="$subject" "$@"
}
মনে রাখবেন যে এই পদ্ধতির কোনও পুনর্নির্দেশ ছাড়াই কেবল সাধারণ কমান্ডগুলি পরিচালনা করতে পারে। এটি লুপগুলির জন্য / বিবরণী ইত্যাদির জন্য পুনঃনির্দেশগুলি, পাইপলাইনগুলি পরিচালনা করতে পারে না
আর এক সাধারণ ব্যবহারের ক্ষেত্রে হ'ল curl
একাধিক শিরোলেখ ক্ষেত্র এবং পে-লোড নিয়ে চলমান । আপনি সর্বদা নীচের মতো আরগগুলি সংজ্ঞায়িত করতে পারেন এবং curl
প্রসারিত অ্যারে সামগ্রীতে প্রার্থনা করতে পারেন
curlArgs=('-H' "keyheader: value" '-H' "2ndkeyheader: 2ndvalue")
curl "${curlArgs[@]}"
আরেকটি উদাহরণ,
payload='{}'
hostURL='http://google.com'
authToken='someToken'
authHeader='Authorization:Bearer "'"$authToken"'"'
এখন যে ভেরিয়েবলগুলি সংজ্ঞায়িত করা হয়েছে, আপনার কমান্ড আরগগুলি সংরক্ষণ করার জন্য একটি অ্যারে ব্যবহার করুন
curlCMD=(-X POST "$hostURL" --data "$payload" -H "Content-Type:application/json" -H "$authHeader")
এবং এখন একটি সঠিক উদ্ধৃত প্রসারণ করুন
curl "${curlCMD[@]}"