শেল মধ্যে Eval ত্রুটি


1

আমি নিম্নলিখিত অভিব্যক্তি ব্যবহার করে আমার শেল স্ক্রিপ্টে একটি পরিবর্তনশীল তৈরি এবং সেট করছি।

eval "test2"="'Test Name's Test'"

কিন্তু এটি ত্রুটি নিম্নলিখিত ফলাফল

-sh: eval: line 1: syntax error: Unterminated quoted string

আমি এটা কিভাবে ঠিক করবো.

উত্তর:


3

আসলে কি হবে যখন একটি ধারণা পেতে 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 আউটপুট


0

ত্রুটি বার্তা এখানে বেশ পরিষ্কার। অপ্রচলিত উদ্ধৃতি সম্ভবত ডান দিকে তিনটি একক উদ্ধৃতি উল্লেখ করা হয়।


0

প্রথম: কেন 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

আমি একটি ভেরিয়েবল অ্যাসাইন তৈরি করার জন্য Eval ব্যবহার করছি যখন কেউ আমার ফাংশনটিকে নতুন পরিবর্তনশীল নামটির প্রতিনিধিত্বকারী স্ট্রিং দিয়ে কল করতে চায়
Poorna
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.