শেলের মধ্যে "quot" কমান্ড


15

কমান্ডের ব্যবহার কী quote? আমি এটি সম্পর্কে কোনও তথ্য পাইনি, এটি /binফোল্ডারগুলিতে এক্সিকিউটেবল ফাইলগুলির মধ্যে নয় এবং এটি বাশ বিল্ট-ইনগুলির মধ্যে খুঁজে পাওয়া যায় না। দেখে মনে হচ্ছে এটি কেবলমাত্র প্রথম প্যারামিটারটি echoকমান্ডের মতো এবং আরও কিছু মুদ্রণ করে ।


এটি কেবল উদ্ধৃতি যুক্ত করেছে
হাকিম ওহাব

1
সবেমাত্র হাঁসফাঁস করেই, আমি শেল-কোট নামে একটি ইউটিলিটি পেয়েছি যা উদ্ধৃতির অনুরূপ, তবে এসএসএসের মতো জিনিস এবং ব্যাশ স্ক্রিপ্টগুলি ডিবাগ করার জন্য এর কিছু ব্যবহার রয়েছে। ভেবেছিলাম আমি এটি এখানে পাদটীকা হিসাবে অন্তর্ভুক্ত করব। ' linux.die.net/man/1/ Shell - quote '
জো

ডাব্লুটিএফের মতো এমন একটি সাধারণ শব্দ রয়েছে বলে মনে হয়, quoteযেমন এই অস্পষ্ট উদ্দেশ্যে ব্যবহৃত হয় ... এটিকে "অভ্যন্তরীণ" হিসাবে চিহ্নিত করার উপসর্গ নেই, কোনও ডকুমেন্টেশন নেই, কিছুই না, যদি না আপনি ডিসট্রোর উন্নত সমাপ্তি মেকানিক্সের প্রয়োগের বিশদ খনন করতে যান। আমি এটিকে কিছুটা বিরক্তিকর মনে করি।
হাইড

এটি সেই ব্যক্তির পক্ষে আরও স্পষ্ট হয়ে ওঠে, যার মাতৃভাষা ইংরেজি নয়। আমার মত, উদাহরণস্বরূপ। :)
শুক্রবার

উত্তর:


10

এটা কি?

আমি লক্ষ্য করেছি যে এই কমান্ডটি আমার শেলটিতে ( মাছ, বন্ধুত্বপূর্ণ ইন্টারেক্টিভ শেল ) কাজ করে না । দেখে মনে হচ্ছে এটি কেবল বাশে কাজ করে (উবুন্টুর ডিফল্ট)।

chocobai@pc ~> /bin/bash 
chocobai@pc:~$ quote asdf
'asdf'chocobai@pc:~$ 

chocobai@pc:~$ type quote
quote is a function.
quote ()
{ 
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}

এটার কাজ কি? এটা কি জন্য ব্যবহার করা যেতে পারে?

এটি উদ্ধৃতিগুলি যোগ করেছে তবে কোনও নতুন লাইন নেই। এটি একক উদ্ধৃতিগুলি এমনভাবে পালাতে পারে যা ব্যাশের জন্য উপযুক্ত। পরিবর্তনশীল বা অন্য কোনও ধরণের স্ট্রিং উদ্ধৃত করতে এটি স্ক্রিপ্টগুলিতে কার্যকর হতে পারে। স্পেস সহ পথ / পরামিতিগুলির জন্য আপনার এটি উদাহরণস্বরূপ প্রয়োজন। যদিও এটি করার অন্যান্য উপায় রয়েছে।

এটি সত্যিই আশ্চর্যজনক যে আমি এটি সম্পর্কে কোনও ওয়েবে (ওয়েবে) খুঁজে পাইনি could তবে ভাল, এটি কী করে তা সহজেই দেখা যায়।


2
whichইন্টারেক্টিভ শেল এবং স্ক্রিপ্ট উভয়ই অকেজো। typeপরিবর্তে ব্যবহার করুন। type quoteএটি আপনাকে একটি ফাংশন বলবে এবং এমনকি ফাংশন সংজ্ঞাও দেখায়। অন্তর্নির্মিত help typeউপর আরও জন্য চালান type
গিরিহা

আপনি ঠিক বলেছেন, ধন্যবাদ। আমি উপরের উত্তরটি দেখেছি যা এটি কী তা অনুসন্ধান করতে টাইপ ব্যবহার করে। ঠিক আছে, 'যা'র জন্য আমি জানতাম যে এটি / বিন / বা অন্য কোনও ক্ষেত্রে কার্যকর হয়নি, কারণ এটি কোনও পথ ফেরেনি return আমি মনে করি এটি এখনও এক ধরণের দরকারী ছিল। তবে আপনি ঠিক বলেছেন, আমি টাইপ যুক্ত করব।
verpfeilt

2
আমার উবুন্টু 12.04-এ এই ফাংশনটি সত্যই বর্ণিত হয়েছে /etc/bash_completion, যা ~/.bashrcডিফল্টরূপে উত্সাহিত হয় , /etc/bash.bashrcযেখানে সম্পর্কিত বিভাগটি /etc/bash_completionমন্তব্য করা হয়নি তার দ্বারা নয় । এছাড়াও /usr/share/bash-completion/ফোল্ডারটি উবুন্টু 12.04 এ অনুপস্থিত।
whtyger

8

quoteফাইলটিতে এমন একটি ফাংশন যা সংজ্ঞায়িত (এখানে আমার ডেবিয়ান সিস্টেমে, তবে আমি অনুমান করি যে এটি উবুন্টুতে একই রকম) /usr/share/bash-completion/bash_completion, যা নিজেই /etc/bash.bashrcবাশের শুরুতে উত্সাহিত হয়েছিল ।

আমি এই ফাংশন ব্যবহার না! শেল দ্বারা নিরাপদে ব্যবহারের উপযোগী হওয়ার জন্য যদি আপনার স্টাফের উদ্ধৃতি দেওয়ার প্রয়োজন হয় তবে দয়া করে printfএই %qসংশোধকটি ব্যবহার করুন :

printf '%q\n' "Hello my friend I like 'single quotes' as well as \"double quotes\""

আসলে, এমনকি এটি খুব কমই ব্যবহৃত হয়, উচ্চ-স্তরের স্টাফগুলির জন্য সর্বদা উন্নত কৌশলগুলি আমরা, ব্যবহারকারীরা সাধারণত করি do এই quoteজিনিসটি অভ্যন্তরীণভাবে কিছু অস্পষ্ট স্টাফ ব্যবহার করে যা আমরা এমনকি জানতে চাই না। এই quoteফাংশনটি সম্ভবত কোনও বিক্রেতা / বিতরণ-নির্দিষ্ট (দেবিয়ান-নির্দিষ্ট পড়ুন) এবং সম্ভবত পোর্টেবল কিছু নয় এবং ভবিষ্যতে প্রকাশিত সংস্করণগুলিতে এমনকি পরিবর্তিত হতে পারে।

সম্পাদনা করুন। আমি কেবল একটি উবুন্টু 12.04 সিস্টেমে চেক করেছি এবং quoteফাংশনটি সংশ্লেষিত হয়েছে /etc/bash_completion, উত্স দ্বারা উত্সর্গীকৃত /etc/bash.bashrc, নিজেই উত্সাহিত /etc/profile

আমি কীভাবে এটি নির্ধারণ করেছি? কিছুটা হিউরিস্টিক ব্যবহার করে:

  • এতে quoteউপস্থিত কিনা তা পরীক্ষা করুন /etc/profile:

    grep '\bquote\b' /etc/profile

    না। পরবর্তী পদক্ষেপে যান।

  • উত্সযুক্ত ফাইলগুলি কী কী /etc/profile?

    grep '[[:space:]]\.[[:space:]]' /etc/profile

    আমার কাছে $i(এই উত্সগুলি কীসের জন্য উত্সটি খতিয়ে দেখার প্রয়োজন, তবে এই ক্ষেত্রে এটি ফাইলগুলি /etc/profile.d/*.shযদি থাকে (এবং যদি পাঠযোগ্য হয়) এবং /etc/bash.bashrcসন্ধান করছি /etc/bash.bashrc

  • Is quoteমধ্যে /etc/bash.bashrc? হ্যাঁ / না, ইত্যাদি ...

quoteআসলে একক উদ্ধৃতি এড়ায়, তাই এটি শেল দ্বারা ব্যবহারযোগ্য। এটি printf %qব্যবহারের ক্ষেত্রে যেমন ঠিক তেমনি কাজ করে ।
ফ্লিম

@ আপনার নিজের ঝুঁকিতে ফ্লিম ব্যবহার করুন!
gniourf_gniourf

@gniourf_gniourf আমার ধারণা প্রিন্টফ % কিউ টিল্ড ( ~ ) সঠিকভাবে পরিচালনা করে না । এই চেষ্টা করুন: my_str='~/.bashrc'; echo ' Expected:' "$my_str"; bash -c "echo ' quote:' $(quote "$my_str")"; bash -c "echo 'printf %q:' $(printf '%q\n' "$my_str")"। আপনি কিছু দেখতে পাবেন Expected: ~/.bashrc, quote: ~/.bashrcএবং printf %q: /home/your_username/.bashrc
রকাল্লাইট

1
@ রোকালাইট: আমি কেবল এটি চেষ্টা করেছি এবং এটি একটি প্রত্যাশিত কাজ করে ...
gniourf_gniourf

আপনি সোজা উত্স এ যেতে চান, আপনি ব্যবহার করতে পারেন (shopt -s extdebug; declare -F quote), যা আপনি ফাংশন নাম, লাইন নম্বর এটি সংজ্ঞায়িত করা হয়, এবং ফাইল নাম এটি সংজ্ঞায়িত করা হয়।
wjandrea

3

quote একটি ফাংশন:

quote () 
{ 
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}

এই ফাংশনটি কোথাও ব্যাশ ইনিশিয়ালাইজেশন ফাইলে সংজ্ঞায়িত করা হয়েছে। আরও স্পষ্টভাবে, আপনি যদি উবুন্টু 13.04 ব্যবহার করছেন তবে আপনি এটি /usr/share/bash-completion/bash_completion142 লাইনে খুঁজে পেতে পারেন ।

এটি পরীক্ষা করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

type quote

এর উদ্দেশ্য স্পষ্টতই পরিষ্কার।


এটি কী করে তা স্পষ্ট - তবে আপনি কেন এটি করতে চান তা নাও হতে পারে। সন্দেহের হাত থেকে বাঁচার জন্য: এটি এমন একটি পরিবর্তনশীল যেমন: $INPUTস্পেস, কোট বা অন্যান্য অক্ষর থাকতে পারে এবং এমন স্ট্রিং ফিরিয়ে আনতে ব্যবহৃত হবে যা কেবলমাত্র ব্যাশ দ্বারা একক যুক্তি হিসাবে বিবেচিত হবে returning
বেন এক্সও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.