উত্তর:
আসলে কি হবে যখন একটি ধারণা পেতে eval কিছু স্ট্রিং, চেষ্টা করুন echo এটা প্রথম । eval এটা হচ্ছে মত আউটপুট কপি করা echo শেল মধ্যে এবং যে চলমান :
echo "test2"="'Test Name's Test'"
test2='Test Name's Test'
সেখানে তিনটি একক উদ্ধৃতি আছে, যা কখনও চলবে না। এবং আপনি ব্যাস একক-উদ্ধৃত স্ট্রিংগুলিতে একক উদ্ধৃতি অন্তর্ভুক্ত করতে পারবেন না (এটি ব্যাকস্ল্যাশ পালানো সমর্থন করে না, অন্যান্য ভাষাগুলির বিপরীতে), আপনি যদি ডাবল কোটগুলি ব্যবহার করতে চান তবে আপনাকে অবশ্যই দুটি উদ্ধৃতি ব্যবহার করতে হবে eval এরকম কিছু:
echo "test2"="\"Test Name's Test\""
test2="Test Name's Test"
কিন্তু @ ড্যানিয়েল বলেছেন, ড eval অপ্রয়োজনীয় এবং আপনি ব্যবহার করা উচিত নয় eval যে কোনো ক্ষেত্রে - আমি শুধুমাত্র দরকারী দেখা যায় একমাত্র ক্ষেত্রে eval সাথে getopt আউটপুট ।
প্রথম: কেন eval? আপনি শুধু বলতে পারে test="..."।
দ্বিতীয়: আপনি একটি একক উদ্ধৃতি দিতে পারবেন না ' একক উদ্ধৃতি দ্বারা সীমিত একটি স্ট্রিং মধ্যে। আপনি একটি ব্যাকস্ল্যাশ দিয়ে এটি পালাতে পারবেন না। সুতরাং একটি স্ট্রিং মধ্যে একটি একক উদ্ধৃতি দিতে, আপনি একক উদ্ধৃত স্ট্রিং শেষ করতে হবে এবং একক উদ্ধৃতি (যা পালিয়ে যেতে হবে) সন্নিবেশ করা আছে:
test2='Test Name'"'"'s Test'; echo $test2
test3='Test Name'\''s Test'; echo $test3
সমস্যা সঙ্গে eval এটি অন্য বিস্তার বৃত্ত যোগ করে, তাই আপনি অভ্যন্তরীণ অব্যাহতি আছে " এর
eval test2="'Test Name'\"'\"'s Test'"; echo $test2
eval test3="'Test Name'\''s Test'"; echo $test3