bash - ভেরিয়েবল অ্যাসাইনমেন্টের কোনও স্থান বাশকে ত্রুটি দেয় কেন?




variables variable-assignment (2)

এটি বাশে কোনও কনভেনশন নয় (বা আরও সাধারণভাবে পসিক্স-ফ্যামিলি শেল)।

কারণ "কেন", কারণ এটি ভুল করার বিভিন্ন উপায়ের কমান্ড হিসাবে বৈধ অর্থ রয়েছে। আপনি যদি NUM2 = 4 একটি অ্যাসাইনমেন্ট তৈরি করেন, তবে আপনি = এটির উদ্ধৃতি না দিয়ে আক্ষরিক যুক্তি হিসাবে পাস করতে পারবেন না। ফলস্বরূপ, এ জাতীয় কোনও পরিবর্তন অনির্ধারিত স্থানে স্থাপনের পরিবর্তে পিছনের দিক থেকে বেমানান হবে (যেখানে সেই মানের লঙ্ঘন এড়াতে POSIX sh স্ট্যান্ডার্ডের এক্সটেনশনগুলি বাঁচতে হবে)।

NUM2= 4 # runs "4" as a command, with the environment variable NUM2 set to an empty string
NUM2 =4 # runs "NUM2" as a command, with "=4" as its argument
NUM2 = 4 # runs "NUM2" as a command, with "=" as its first argument, and "4" as another

এই প্রশ্নের ইতিমধ্যে এখানে একটি উত্তর আছে:

#!/bin/bash

declare -r NUM1=5
NUM2 =4                # Line 4

num3=$((NUM1 + NUM2))
num4=$((NUM1 - NUM2))
num5=$((NUM1 * NUM2))
num6=$((NUM1 / NUM2))  # Line 9

echo "$num3"
echo $((5**2))
echo $((5%4)) 

আমি এই বাশ স্ক্রিপ্টটি ব্যবহার করছি এবং আমি যখন স্ক্রিপ্টটি চালাচ্ছিলাম তখন আমি ত্রুটিটি পেয়েছি

./bash_help 
./bash_help: line 4: NUM2: command not found
./bash_help: line 9: NUM1 / NUM2: division by 0 (error token is "NUM2")
5
25
1

সুতরাং আমি কোডটি এতে পরিবর্তন করেছি এবং ত্রুটিটি চলে গেছে।

#!/bin/bash

declare -r NUM1=5
NUM2=4

num3=$((NUM1 + NUM2))
num4=$((NUM1 - NUM2))
num5=$((NUM1 * NUM2))
num6=$((NUM1 / NUM2))

echo "$num3"
echo $((5**2))
echo $((5%4)) 

যখন আমরা একটি ভেরিয়েবলের জন্য একটি মান নির্ধারণ করি তখন কেন আমরা স্পেস ব্যবহার করতে পারি না? কোডটির আরও ভাল পাঠযোগ্যতার জন্য স্পেসগুলি ব্যবহার করা এটি কনভেনশন। কেউ কি এই ব্যাখ্যা করতে পারেন?


কারণটি হ'ল সহজভাবে, শেলটি এরকম আচরণ করার জন্য নির্মিত। অন্যান্য প্রোগ্রামিং ভাষার অভিজ্ঞতার সাথে কারও পক্ষে এটি বোধগম্য নয় (যদি আপনি শেল সিনট্যাক্সটিকে "ভাষা" বলে থাকেন, যা এটি এক অর্থে)।

শেল স্ক্রিপ্টিংটি বেশিরভাগ ক্ষেত্রে কেবল স্ট্রিংকে উদ্ধৃত না করা সম্ভব করে তোলে (যতক্ষণ না অক্ষরের ক্রমিক হিসাবে বোঝানো হয় একটি স্ট্রিংতে কোনও ফাঁকা বা বিশেষ অক্ষর থাকে না)। এই ধন্যবাদ, আপনি লিখতে পারেন:

 my_command -n -X arg1 arg2

এর পরিবর্তে (কোনও ধরণের কাল্পনিক ছদ্ম কোডে)

 "my_command" "-n" "-X" "arg1" "arg2"

বেশিরভাগ ভাষায়, এটি অন্যান্য উপায়ে: আক্ষরিক স্ট্রিংগুলি উদ্ধৃত হয়, যা কোনও বিশেষ অক্ষর ছাড়াই ভেরিয়েবলগুলি ব্যবহারের জন্য "সিনট্যাক্স স্পেস" মুক্ত করে (যেমন শেল স্ক্রিপ্টিং-এ)।

শেল সিনট্যাক্স অন্যান্য কিছু কাজ করার সময় ঘন ঘন ক্ষেত্রে সুবিধামত, কম সুবিধার্থে (এবং পঠনযোগ্যতা) সুবিধে করে। এটি উভয়ই অভিশাপ এবং আশীর্বাদ। সুন্দর জিনিসটি জেনে রাখা হচ্ছে যে আপনার যদি একটি ইন্টারেক্টিভ শেল থাকে তবে আপনি 100% নিশ্চিত হতে পারেন আপনার কাছে এমন একজন দোভাষী আছে যা কিছু ধরণের (সম্ভবত অদলিত) প্রোগ্রাম পরিচালনা করবে। এর সর্বজনীন উপলব্ধতার কারণে (বিভিন্ন স্বাদ সত্ত্বেও সত্ত্বেও) শেলটি একধরণের প্ল্যাটফর্ম যা শেখার পক্ষে যথেষ্ট কার্যকর।








variable-assignment