বলুন যে আমি নিম্নলিখিত ভেরিয়েবলগুলি তৈরি করেছি:
s=John
i=12345
f=3.14
এই সমস্ত ভেরিয়েবলগুলি স্ট্রিং হিসাবে মেমোরিতে সঞ্চয় করা আছে বা bash
অন্য ডেটা ধরণের রয়েছে?
বলুন যে আমি নিম্নলিখিত ভেরিয়েবলগুলি তৈরি করেছি:
s=John
i=12345
f=3.14
এই সমস্ত ভেরিয়েবলগুলি স্ট্রিং হিসাবে মেমোরিতে সঞ্চয় করা আছে বা bash
অন্য ডেটা ধরণের রয়েছে?
উত্তর:
ব্যাশ ভেরিয়েবলগুলি টাইপযুক্ত ।
অন্যান্য অনেক প্রোগ্রামিং ভাষার মতো নয়, বাশ তার ভেরিয়েবলগুলি "প্রকার" দ্বারা আলাদা করে না। মূলত, বাশ ভেরিয়েবলগুলি চরিত্রের স্ট্রিং, তবে প্রসঙ্গের উপর নির্ভর করে বাশ পাটিগণিতের ক্রিয়াকলাপ এবং ভেরিয়েবলের সাথে তুলনা করার অনুমতি দেয়। একটি ভেরিয়েবলের মানটিতে কেবল অঙ্ক থাকে কিনা তা নির্ধারণকারী ফ্যাক্টর।
হিসাবে অন্য উত্তর বলছেন , সেখানে এক ধরণের দুর্বল ফর্ম সঙ্গে টাইপ করার declare
।
এটি নির্দিষ্ট প্রোগ্রামিং ভাষায় উপলব্ধ টাইপিংয়ের [1] একটি খুব দুর্বল রূপ।
একটি উদাহরণ দেখুন:
declare -i number # The script will treat subsequent occurrences of "number" as an integer. number=3 echo "Number = $number" # Number = 3 number=three echo "Number = $number" # Number = 0 # Tries to evaluate the string "three" as an integer.
তথ্যসূত্র:
বাশের মূলত সরল স্কেলার ভেরিয়েবল, অ্যারে এবং এসোসিয়েটিভ অ্যারে রয়েছে। এছাড়াও, স্কেলারগুলি declare
বিল্টিনের সাথে পূর্ণসংখ্যা হিসাবে ট্যাগ করা যেতে পারে । স্ক্রিপ্ট প্রোগ্রামার / শেল ব্যবহারকারীর দৃষ্টিকোণ থেকে, স্ট্রিং ভেরিয়েবলগুলি স্ট্রিং হিসাবে কাজ করে, পূর্ণসংখ্যার ভেরিয়েবলগুলি পূর্ণসংখ্যা হিসাবে কাজ করে এবং তাদের প্রকার অনুসারে অ্যারে করে। অভ্যন্তরীণ বাস্তবায়ন খুব প্রাসঙ্গিক নয়।
তবে, আমরা যদি তথ্যটি মেমরিতে আসলে কীভাবে সঞ্চয় করতে চাই তা জানতে চাইলে প্রোগ্রামটি আসলে কী করে তা দেখতে আমাদের উত্স কোডটি পরীক্ষা করতে হবে।
4.4 বাশে, স্কেলারগুলি পূর্ণসংখ্যা ট্যাগ নির্বিশেষে স্ট্রিং হিসাবে সংরক্ষণ করা হয়। এই দৃশ্যমান সংজ্ঞা struct variable
/ SHELL_VAR
হয় typedef এবং ফাংশনmake_variable_value
, যা স্পষ্টভাবে সঞ্চয়ের জন্য স্ট্রিং পূর্ণসংখ্যার অনুবাদ।
লিঙ্কযুক্ত তালিকা ( array.h
), এবং হ্যাশ টেবিল হিসাবে সহযোগী অ্যারেগুলিকে অ্যারেগুলি সংরক্ষণ করা হয় । তার মধ্যে মানগুলি আবার স্ট্রিং হিসাবে সংরক্ষণ করা হয়। অ্যারেগুলির জন্য একটি লিঙ্কযুক্ত তালিকার তালিকাটি বিজোড় মনে হতে পারে, তবে অ্যারেগুলি যেমন কমই থাকে তবে সূচিগুলি বিন্যাসে সংখ্যায় হতে পারে যে অ্যারে থাকা কতগুলি উপাদান রয়েছে তা নির্বিশেষে, নকশার পছন্দটি বুঝতে কিছুটা সহজ।
তবে কোডটিতে অব্যবহৃতunion _value
সংখ্যার ক্ষেত্র, ভাসমান পয়েন্ট সংখ্যা, পাশাপাশি স্ট্রিংয়ের মান সহ অব্যবহৃতদের একটি সংজ্ঞা রয়েছে । এটি "ভবিষ্যতের জন্য" হিসাবে একটি মন্তব্যে চিহ্নিত হয়েছে, সুতরাং এটি সম্ভব যে ভবিষ্যতের বাশের কিছু সংস্করণ তাদের দেশীয় ফর্মগুলিতে বিভিন্ন ধরণের স্কেলার সংরক্ষণ করবে।
আমার জীবনের জন্য আমি এটিকে এত শব্দে কোথাও বর্ণিত পাই না তবে এটি আমি এটি বুঝতে পারি।
বাশ একটি অনুবাদক, সংকলক নয় এবং সমস্ত ভেরিয়েবলকে স্ট্রিং হিসাবে উপস্থাপন করে। তাই সমস্ত ধরণের প্রচেষ্টা এবং জোর যা বিভিন্ন ধরণের বিস্তারের সাথে যায়।
ব্যাশ পাসের পাসের সব থেকে নামে ভেরিয়েবল declare
সঙ্গে স্ট্রিং হিসাবে বৈশিষ্ট্যাবলী যে পরিবর্তনশীল করা হয় কিভাবে যে নিয়ন্ত্রণ সম্প্রসারিত দ্বারা declare
সঞ্চয়ের।
banana=yellow #no call to declare
declare -p banana
declare -- banana="yellow" #but declare was invoked with --
declare -i test=a #arithmetic expansion to null/zero
declare -p test
declare -i test="0"
declare -i test2=5+4 #successful arithmetic expansion
declare -p test2
declare -i test2="9"
declare -i float=99.6 #arithmetical expansion fails due to syntax
bash: declare: 99.6: syntax error: invalid arithmetic operator (error token is ".6")
nofloat=99.9
declare -p nofloat
declare -- nofloat"99.6" #Success because arithmetical expansion not invoked
declare -a a #variable is marked as a placeholder to receive an array
declare -p a
declare -a a
a[3]=99 #array elements are appended
a[4]=99
declare -p a
declare -a a=([3]="99" [4]="99")
declare -A newmap #same as -a but names instead of numbers
newmap[name]="A Bloke"
newmap[designation]=CFO
newmap[company]="My Company"
declare -p newmap
declare -A newmap=([company]="My Company" [name]="A Bloke" [designation]="CFO" )
এবং অবশ্যই
declare -ia finale[1]=9+16
declare -p finale
declare -ai finale=([1]="25")
declare
এটির কোডাটি হ'ল এমনকি যদি কোনও অভ্যন্তরীণ উপস্থাপনা থাকে যা বৈশিষ্ট্যযুক্ত পতাকাগুলির সাথে পরিবর্তিত হয় তবে স্ট্রিংগুলি হ'ল বাশ দেখায় বা দেখতে চায়।
এই পৃষ্ঠায় বাশে ভেরিয়েবলগুলি টাইপ করার জন্য একটি বিস্তৃত গাইড রয়েছে। এই বিভাগেdeclare
বিল্ট-ইন কমান্ড সম্পর্কে আরও তথ্য রয়েছে । এই লিঙ্কটি থেকে এই কোড স্নিপেট আগ্রহী হতে পারে:
[bob in ~] declare -i VARIABLE=12
[bob in ~] VARIABLE=string
[bob in ~] echo $VARIABLE
0
[bob in ~] declare -p VARIABLE
declare -i VARIABLE="0"
এটি অপ্রাসঙ্গিক।
বাশ ভেরিয়েবলের সাথে যোগাযোগের একমাত্র উপায় বাশের মাধ্যমে, সুতরাং ভেরিয়েবলগুলি মেমরিতে কীভাবে সংরক্ষণ করা হয় তা সম্পর্কে আপনার পক্ষে কোনও পার্থক্য লক্ষ্য করা অসম্ভব , কারণ আপনি কখনই এগুলি সরাসরি মেমরির মাধ্যমে অ্যাক্সেস করতে পারবেন না , আপনাকে সর্বদা বাশকে তাদের জন্য জিজ্ঞাসা করতে হবে মান, এবং ব্যাশ তারপর যাই হোক না কেন এটা করতে চায় তাদের অনুবাদ করতে পারেন দেখুন , যেন তারা ছিল কোন নির্দিষ্ট ভাবে সঞ্চিত হয়েছে।
আসলে, এগুলি এমনকি স্মৃতিতে মোটেও সংরক্ষণ করা যায় না । আমি জানি না বাশের সাধারণ প্রয়োগগুলি কতটা চালাক, তবে কোনও পরিবর্তনশীল ব্যবহার করা হবে কিনা এবং / অথবা এটি সংশোধন করা হবে কি না এবং এটি সম্পূর্ণরূপে অপ্টিমাইজ করা বা এটির ইনলাইন করা সহজতর ক্ষেত্রে এটি অন্তত সম্ভব।
bash
)।