একটি ভেরিয়েবল অ্যাসাইনমেন্টে একটি ভেরিয়েবল নামের ফর্ম থাকে, তার পরে সমান চিহ্ন এবং তার পরে (alচ্ছিক) মান হয়।
এটি একটি কার্যকর অ্যাসাইনমেন্ট:
ABC=123
"$x"1=1
একটি বৈধ অ্যাসাইনমেন্ট নয়, কারণ "$x"1
একটি পরিবর্তনশীল নাম নয়। এমনও হতে পারে Eval একটি পরিবর্তনশীল নামের uated, কিন্তু এটা নয়। শেলটি বাস্তবে বিশ্বাস করে যে এটি একটি কমান্ড।
আপনি যা অর্জন করতে চান তার করার একটি উপায় হ'ল:
eval "$x"1=1
ব্যাশের অন্য উপায় (তবে অন্যান্য শেলের মধ্যে নয়):
declare "$x"1=1
বা এছাড়াও (আবার কেবল বাশ কেবল):
let "$x"1=1
(আপনার ক্ষেত্রে খুব একটা পার্থক্য নেই।)
তবে, জাকুজে মন্তব্যে যেমন উল্লেখ করেছেন , আপনার শেলটি যদি (কেএস, বাশ বা জেডএস) থাকে তবে আপনি সম্ভবত অ্যারে নিয়ে যেতে চান।
সম্পূর্ণতার জন্য:
eval
নির্বিচার কমান্ড কার্যকর করে। সুতরাং, যদি সমান চিহ্নের ডানদিকে আপনার একটি ভেরিয়েবল থাকে যা কিছু কমান্ডে প্রসারিত হয় তবে সেই কমান্ডটি কার্যকর হবে। নিম্নলিখিত কোড:
x=a
y='$(echo hello)'
eval "$x=$y"
সমতূল্য a=hello
।
declare
ভেরিয়েবল বরাদ্দ করতে বাশ অন্তর্নির্মিত এবং কোনও কমান্ড কার্যকর করে না। নিম্নলিখিত কোড:
x=a
y='$(echo hello)'
declare "$x=$y"
সমতূল্য a='$(echo hello)'
।
let
declare
এটি কমান্ড কার্যকর করে না যে অনুরূপ । কিন্তু বিপরীত declare
, let
গাণিতিক অপারেশন জন্য ব্যবহার করা যেতে পারে:
let a="1 + 2"
সমতূল্য a=3
।