বাশ এড়ানোর জন্য কমান্ড


103

আমার একটি বাশ কমান্ড দরকার যা একটি স্ট্রিংকে পালিয়ে যাওয়া এমন কিছুতে রূপান্তরিত করে। এখানে একটি উদাহরণ:

echo "hello\world" | escape | someprog

যেখানে পালানোর কমান্ড তৈরি "hello\world"করে "hello\\\world"। তারপরে, সাম্প্রপোগ "hello\\world"এটি প্রত্যাশা অনুযায়ী ব্যবহার করতে পারে । অবশ্যই, আমি আসলে কী করব তার এটি একটি সরল উদাহরণ।


5
পালানোর প্রকৃতি কী? অন্য কথায়, কোন চরিত্রগুলি পালাতে হবে? ভালভাবে সংজ্ঞায়িত হচ্ছে শৈলী পালাবার (যেখানে ট্যাব \ t দ্বারা প্রতিস্থাপিত হয়, \ N সঙ্গে নতুন লাইন, সঙ্গে \ "উদ্ধৃতি, ইত্যাদি) এটা সমস্যা ছাড়া সাহায্যের কঠিন - আপনি একটি সি ++ খুঁজছেন?।
মাইকেল হারুন Safyan


এই প্রশ্নের অর্থ কোনও এক ডজন বিভিন্ন জিনিসকে বোঝানো যেতে পারে। আমাদের অনুমান করার পরিবর্তে, আপনি কী ধরণের পলায়নের সন্ধান করছেন তা যদি ঠিক করে দেয় তবে তা সাহায্য করবে।
ডন হ্যাচ

4
প্রশ্নটি \\ for \ ব্যবহারের জন্য নির্দিষ্ট ছিল \ একটি গৃহীত উত্তর আছে।
ব্যবহারকারী 1

উত্তর:


159

বাশে:

printf "%q" "hello\world" | someprog

উদাহরণ স্বরূপ:

printf "%q" "hello\world"
hello\\world

এটি ভেরিয়েবলের মাধ্যমেও ব্যবহার করা যেতে পারে:

printf -v var "%q\n" "hello\world"
echo "$var"
hello\\world

6
মনে মনে, %qপ্রায় এক দশকেরও বেশি সময় ধরে প্রায় 2012 অবধি ভেঙে গেছে It এতে সমস্যা ছিল ~। এছাড়াও পোর্টেবল সেড ওয়ান-লাইনার স্ট্যাকওভারফ্লো.com
জো সো


4
@ অন্টোর: a='abc$def":'; printf '%q\n' "$a"ফলাফলগুলি abc\$def\":(ডলারের চিহ্নটি এড়িয়ে গেছে)। এটি বাশ 4.3 (আমি বাশ 3.2 তে একই ফল পেয়েছি)। আপনি কি সংস্করণ ব্যবহার করছেন?
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

4
ডলারের চিহ্ন থেকে বাঁচতে কেবল পরিবর্তে একক উদ্ধৃতি ব্যবহার করুন, উদাহরণস্বরূপ:printf "%q" 'he$l&lo\world'
LeandroCR

বাশের printf '%q\n' textটেক্সটটি bashফর্ম্যাটতে উদ্ধৃত করা হয়েছে (এবং বর্তমান লোকেলের জন্য), সুতরাং এটি কেবল ওপি-র ক্ষেত্রে কাজ করবে যদি তাদের someprogঠিক একই উদ্ধৃতি বাক্য গঠন থাকে bashযা অত্যন্ত অসম্ভব।
স্টিফেন চেজেলাস

9

খাঁটি বাশ, প্যারামিটার বিকল্প ব্যবহার করুন:

string="Hello\ world"
echo ${string//\\/\\\\} | someprog

4
এইভাবে "হ্যালো ওয়ার্ল্ড" "হ্যালো \ ওয়ার্ল্ড" এ পালানো যায় নি - প্রিন্টফের স্বীকৃত উত্তরে এপ্রোচ তা করে।
vchrizz

4
এছাড়াও, "% q" "" / "কে" 03/25/2017 "এর মতো পালাতে পারে না যা আমাকে" 03 \ / 25 \ / 2017 "এ পালাতে হবে (যাতে এটি '/' সীমিত নিয়মে থাকতে পারে) এক্সপ্রেশন)।
ক্রেলি

0

আপনি বিভিন্ন অক্ষর প্রতিস্থাপন করতে পার্ল ব্যবহার করতে পারেন, উদাহরণস্বরূপ:

$ echo "Hello\ world" | perl -pe 's/\\/\\\\/g'
Hello\\ world

আপনার পালানোর প্রকৃতির উপর নির্ভর করে আপনি সঠিক অক্ষরগুলি থেকে বাঁচতে একাধিক কল চেইন করতে পারেন।


4
সেড না কেন? $ প্রতিধ্বনি "হ্যালো \ বিশ্ব" | সেড 's / \\ / \\\\ /'
স্পেস

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