ব্যাশে, আমি কীভাবে একটি বিস্মৃত চিহ্ন থেকে বাঁচতে পারি?


183

আমি এরকম কিছু করতে চাই bzr commit -m "It works!"। আমি সাজানোর মাধ্যমে বাছাইয়ের চিহ্নটি বাছাই করতে পারি bzr commit -m "It works\!"। তবে তারপরে আমার প্রতিশ্রুতি বার্তায় ব্যাকস্ল্যাশ অন্তর্ভুক্ত রয়েছে। ব্যাকস্ল্যাশটিকে উপেক্ষা করার পরে আমি কীভাবে উদ্দীপনা চিহ্নটি থেকে বাঁচতে পারি?


1
এরকম bzr commit -m "It works"!কাজ, খুব।
কেবিএ

1
যেমনটি আমি উল্লেখ করেছি যে আপনি যে আদেশটি দিয়েছেন তা বাস্তবে এটি তার নিজের কাজ করে :)bzr commit -m "It works!"
h4unt3r

নেস্টেড কোট সহ একটি এমনকি quirkier মামলা: stackoverflow.com/questions/22125658/...
সিরো Santilli新疆改造中心法轮功六四事件

1
যদিও স্বীকৃত উত্তরটি আপনার প্রতিশ্রুতিবদ্ধ সমস্যার জন্য ভাল কাজ, তবে আমি মনে করি এটি আসল ইস্যুটির উত্তর নয়: বাশ ইতিহাসের প্রসার । ডেনিসের উত্তর গ্রহণ করার বিষয়টি দয়া করে বিবেচনা করুন?
আরজান

উত্তর:


153

যেহেতু আপনি আপনার প্রতিশ্রুতি বার্তায় ভেরিয়েবলগুলি প্রসারিত করতে বাশের উপর নির্ভর করেন না আপনি তার পরিবর্তে একক উদ্ধৃতি ব্যবহার করতে পারেন। একক উদ্ধৃতি স্ট্রিং বাশ দ্বারা প্রসারিত হয় না।

bzr commit -m 'This does work!' 

24
যেহেতু প্রশ্নটি ছিল "আমি কীভাবে একটি বিস্মৃত চিহ্ন থেকে বাঁচতে পারি?" এবং "কীভাবে আমি বিস্মৃত চিহ্নটি প্রসারিত করব না?" আমি এটি বৈধ বলে মনে করি না। কিছু সময় রয়েছে (যেমন একই কমান্ড-লাইনে অ্যাস্টোস্ট্রোফস এবং বিস্ময়কর চিহ্নগুলি পাস করার সময়) যা কাজ করে না। নীচের উত্তরটি অনেক লোকের যা প্রয়োজন তা করতে আরও ভাল কাজ করে।
জান্নে

7
@ জ্যান: আপনি এতে 100% সঠিক, তবে আমার কাছে মনে হয় সমস্যাটি এখানে সুপারভাইজারের সাথে অনেকগুলি প্রশ্ন রয়েছে: আমরা কি এই প্রশ্নের উত্তরটি দেই, বা আমরা লোকদের তাদের নির্দিষ্ট সমস্যা সমাধানে সহায়তা করি? আমি মনে করি যে দুটি উপায়ই কার্যকর হতে পারে এবং এটি একটি নির্দিষ্ট বিষয়ে সহায়তার সন্ধান করেছিল।
বেনিয়ামিন ব্যানিয়ের

Touche! এটি একটি নির্দিষ্ট সমস্যা ছিল। আমি কেবল আমার পরিস্থিতিতে বিভিন্ন পরিস্থিতিতে ব্যবহার করতে সক্ষম হতে একটি উত্তর চাই। পিএস: যে কারণে আমি এটি উল্লেখ করেছি তা হ'ল আমাকে একটি পার্ল প্রোগ্রামে অ্যাডোস্ট্রোফ এবং বিস্মৃত চিহ্ন দুটিই পাস করার দরকার ছিল এবং আমার নীচের সমাধানটি দরকার ছিল। :)
জান্নে

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

153

আপনি যদি ডাবল উদ্ধৃতি এবং উদাত্ততা চান তবে এখানে অন্য একটি পদ্ধতি রয়েছে:

echo "It's broken"'!'

!লাইনটির শেষে না থাকলেও এটি কাজ করে ।

এই ক্ষেত্রে:

echo "hello there"'!'" and goodbye"

বোনাস: শ বা বাশের যে কোনও পাঠ্য (পালকের সাহায্যে) এড়াতে একই জাতীয় কৌশল ব্যবহার করা যেতে পারে : এই উত্তরের প্রথম বিকল্পটি দেখুন । উপরন্তু, যদি আপনি আছে bash-completionইনস্টল, আপনি সম্ভবত আছে ফাংশন ইতিমধ্যে পাওয়া যায়।quote()


4
সুন্দর টিপ, জেডাব্লুডি। আমি বুঝতে পারি না যে বাশ স্ট্রিংগুলি কেবল তাদের মধ্যে সাদা অংশ বাদ দিয়ে কাটা যায়।
অ্যালান এইচ।

প্রকৃতপক্ষে যদি উদ্দীপনা চিহ্নটি স্ট্রিংয়ের শেষে থাকে আপনি echo "Happy birthday!"প্রত্যাশিত হিসাবে কাজ করবেন অন্যথায় আপনি এটি একটি ব্যাকস্ল্যাশ দিয়ে এড়াতে পারবেন, তবে ব্যাকস্ল্যাশ প্রিন্ট করা হবে পাশাপাশি এক্সডি বাশ হৃদয়ের বিবর্ণতার জন্য নয় :)
h4unt3r

@ h4unt3r: অদ্ভুত, এটি আমার অভিজ্ঞতা নয়। আমার জন্য, echo "Happy Birthday!"2 লাইন আউটপুট। প্রথমটি echo "Happy birthday"(কোনও উদ্দীপনা নেই), এবং দ্বিতীয়টি হ্যাপি বার্থডে (আবার, কোনও উদ্দীপনা নেই)। আপনি যখন এই পরীক্ষাটি করেন তখন কি ইতিহাসের প্রসারণ চালু আছে?
jwd

@ jwd আপনি বাশের কোন সংস্করণটি চালাচ্ছেন? আমার সর্বদা হিস্ট এক্সপেনশন থাকে। আপনি দুর্ঘটনাক্রমে দুটি ব্যবহার করেছেন !! তোমার পরীক্ষার জন্য?
h4unt3r

@ h4unt3r: version 4.1.2(1)-release (x86_64-redhat-linux-gnu)অবশ্যই একটি !মাত্র ব্যবহৃত হচ্ছে। আমি histexpandউপস্থিত আছে $SHELLOPTS। তবে আমি অন্য কোনও মেশিনে মাত্র ৪.৩.১৮ (২) চেষ্টা করেছি - এবং আপনি বর্ণিত হিসাবে এটি আচরণ করে। আমার ধারণা এটি একটি বাগ ছিল যা ঠিক হয়ে গেছে।
jwd

66

ইতিহাসের প্রসার বন্ধ করুন :

set +H

অথবা

set +o histexpand

আপনি ~/.bashrcযদি ইতিহাসের সম্প্রসারণটি সাধারণত ব্যবহার না করেন তবে আপনি সেই আদেশগুলির মধ্যে একটি যোগ করতে পারেন।

4.3 বাশ একটি বিশেষ কেস যুক্ত করেছে :

ইতিহাস সম্প্রসারণের অক্ষরটিকে উদ্ধৃত হিসাবেও বিবেচনা করা হয় যদি তা অবিলম্বে ডাবল-কোটেড স্ট্রিংয়ের সমাপ্তি ডাবল উদ্ধৃতিটির আগে হয়


ধন্যবাদ - এটি কাজ করেছে, তবে আমার করণীয় ছিল set +o histexpand, না set -o histexpand। এটি ঠিক করার জন্য আপনি কি নিজের উত্তরটি সম্পাদনা করতে পারবেন?
ম্যাথু

উফফ, টাইপো, দুঃখিত সংশোধন করা হয়েছে।
ডেনিস উইলিয়ামসন

excelent! এটি এজসের জন্য খুঁজছিলেন .... thx ভিএম! যেমন এস্কেপ অস্থির কাজ করে ... আমি একক উদ্ধৃতিও ব্যবহার করতে চাই না ... আমি এটি আমার .bashrcথেক্সে যুক্ত করব !!, !স্ক্রিপ্টগুলিতে কখনও ব্যবহার করা হয়নি এবং কোন কিছুর জন্য নেই !! এটি সর্বদা বিরক্তিকর ছিল ...
কুম্ভ শক্তি

এটি এত দুর্দান্ত! echo "@AquariusPower!"
জোহান্না

12

ডাবল কোট (") এর পরিবর্তে একক উদ্ধৃতি (') ব্যবহার করুন Sing একক উদ্ধৃতিগুলি এতে থাকা সামগ্রীর সমস্ত ব্যাখ্যা বন্ধ করে দেয়, যখন ডাবল উদ্ধৃতিগুলি কেবল কিছু বন্ধ করে।

bzr commit -m 'It works!'

4

আমি এখনই অন্য একটি উপায় খুঁজে পেয়েছি, এটি কমপক্ষে echoআইং স্ট্রিং (বাক্য) দিয়ে কাজ করবে যা আপনি একটি বিস্মৃত বিন্দু দিয়ে বিরামচিহ্ন করতে চান। এটি বাশ হিস্টস্প্যান্ডের চারপাশে কম-বেশি, একটি শেষ-রান চালায় এবং কোডগুলিতে কেবল খানিকটা বেশি সময় নেয়।

কোন বিস্ময়বোধক বিন্দু জন্য হেক্স, তালিকাভুক্ত যেমন http://www.ascii-code.com/ , 21 হয়, তাই আপনি যদি করা \x21আপনার স্ট্রিং এর শেষে echo -e $foo, মেক $fooনিজস্ব সম্প্রসারিত প্রতিধ্বনি [অর্থাত, foo=$(echo -e "$foo")], আপনি কি আপনি echo $fooআবার যখন !শেষে একটি স্ট্রিং হয় পেতে । এবং হিস্টেপ্যাণ্ডে কোনও পরিবর্তন নেই।

বাশ 4+ এ নিশ্চিতভাবে কাজ করে। পূর্ববর্তী সংস্করণ, ymmv।


হুমমম এটা আমার কাজ করে না।
lzap

প্রতিধ্বনিত করার বিষয়ে আপনি যা বলছেন তা আমি পাই না। 'ইকো-ই' এবং 'প্রিন্টফ' পালিয়ে যাওয়া অক্টাল, হেক্স এবং ইউনিকোড কোডগুলি ব্যাখ্যা করে। আপনি যেগুলির মধ্যে যে কোনও একটি ব্যবহার করছেন সে ক্ষেত্রে আপনি "\ 041" ("!" এর অষ্টাল) বা উদ্দীপনা বিন্দুতে দাঁড়াতে "\ x21" (হেক্স) ব্যবহার করতে পারেন। উদাহরণস্বরূপ: printf "OMG\041"। যদি আপনি কোথাও ডাবল-কোটেড স্ট্রিং তৈরি করছেন যা প্রতিধ্বনি বা প্রিন্টফের মতো নয়, যেমন ওপি সম্পর্কে জিজ্ঞাসা করা হয়েছে, আপনি স্ট্রিংটিতে এম্বেলেক করতে পারেন $(echo -e "\041")যেখানে বিস্মৃত বিবরণটি হওয়া উচিত should এমন: bzr commit -m "This is a great commit$(echo -e "\041")"
টড ওয়ালটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.