একক বিস্ময়বোধক চিহ্ন টাইপ করা বাশে কি করতে পারে?


20

এই প্রশ্নের উত্তরে বর্ণিত হিসাবে বাশ ইতিহাস বিস্তারের জন্য বিস্ময়কর চিহ্নগুলি ব্যবহার করে (উদাহরণস্বরূপ sudo !!পূর্ববর্তী কমান্ড-লাইনটি চালায় sudo)। যাইহোক, আমি কোথাও খুঁজে পাচ্ছি না যা নীচের কমান্ডটি (অর্থাত্ একটি বিস্মৃত চিহ্ন) কী করে তা ব্যাখ্যা করে:

!

এটি কোনও কিছুই মুদ্রিত হয়েছে এবং 1 দিয়ে প্রস্থান করে বলে মনে হচ্ছে, তবে কেন এটি তা করে তা আমি নিশ্চিত নই। আমি অনলাইনে এবং বাশ ম্যানেজ পৃষ্ঠায় দেখেছি, তবে এটি একটি "সংরক্ষিত শব্দ" - এ ছাড়া কিছু খুঁজে পাচ্ছি না - তবে এটি }চলছে এবং এটি চলছে:

}

একটি ত্রুটি মুদ্রণ:

bash: syntax error near unexpected token `}'

1
কিছুই নেই। !ইতিহাসের সম্প্রসারণ অভিব্যক্তির "শুরু" নির্দেশ করে।
jordanm

উত্তর:


47

!কমান্ডের প্রারম্ভের একা কমান্ড বা পাইপলাইনের প্রস্থান স্থিতিটিকে অস্বীকার করে : যদি কমান্ডটি প্রস্থান করে 0, তবে এটি 1(ব্যর্থতা)-এ উল্টবে এবং যদি এটি শূন্য-বহির্গমন থেকে প্রস্থান করে তবে এটি এটিকে 0(সফল) প্রস্থানে পরিণত করবে ।

এই ব্যবহারটি ব্যাশ ম্যানুয়ালটিতে নথিভুক্ত করা হয়েছে:

যদি সংরক্ষিত শব্দ '!' পাইপলাইনের পূর্বে, প্রস্থান স্থিতিটি উপরে বর্ণিত হিসাবে প্রস্থান স্থিতির যৌক্তিক অবহেলা।

একজন !কোন নিম্নলিখিত কমান্ডের সাহায্যে খালি কমান্ড, যা কিছুই সত্য 'ফেরত পাঠায় (সমতূল্য করে negates কমান্ড )। এটি সত্যকে একটি মিথ্যাতে রূপান্তরিত করে এবং স্ট্যাটাস 1 সহ প্রস্থান করে তবে কোনও ত্রুটি তৈরি করে না।:


এছাড়া অন্যান্য ব্যবহার রয়েছে !মধ্যে testএবং [[আদেশ, যেখানে তারা একটি শর্তাধীন পরীক্ষা অস্বীকার। এগুলি আপনি যা দেখছেন তার সাথে সম্পর্কিত নয়। আপনার প্রশ্ন এবং সে ক্ষেত্রে উভয় ক্ষেত্রেই এটি ইতিহাসের প্রসারের সাথে সম্পর্কিত নয় এবং এটিকে !অন্য কোনও শর্ত থেকে পৃথক করা হয়েছে।


5
আসলে কী চালিত হয় এবং কেন এটি রিটার্ন কোড ব্যাখ্যা করে তা ব্যাখ্যা করার জন্য প্রথম উত্তরের জন্য +1 ।
জেফ শ্যাচলার

11

আপনি ব্যাশ ম্যানুয়াল বিভাগ 3.2.2 পাইপলাইনগুলিতে নথিভুক্ত একক বিস্ময়বোধক পয়েন্টটি পেতে পারেন

যদি সংরক্ষিত শব্দ '!' পাইপলাইনের পূর্বে, প্রস্থান স্থিতিটি উপরে বর্ণিত হিসাবে প্রস্থান স্থিতির যৌক্তিক অবহেলা।

$ ! true; echo $?
1
$ ! false; echo $?
0

বিভাগ ৩.২.৪.২ শর্তসাপেক্ষ নির্মাণসমূহ

! অভিব্যক্তি

সত্য মিথ্যা যদি প্রকাশ হয়।


এছাড়াও বিভাগ 4.1 বোর্ন শেল বিল্টিনস

! expr

সত্য যদি এক্সটার মিথ্যা হয়।


এটি উল্লেখ করা উচিত যে !ইতিহাসের বিকল্পটি শুরু করবে যদি না অনুসরণ করে: একটি স্থান, ট্যাব, লাইনের শেষ, '=' বা '(' (যখন এক্সটগ্লোব শেল বিকল্পটি শপ্ট বিল্টিন ব্যবহার করে সক্ষম করা হয়))।


0

কারণ !তুলনা এবং এর মানে হল ব্যবহার করা হয় না

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

a=3
b=2

[ $a -eq $b ] && echo "Equal"
[ ! $a -eq $b ] && echo "Not equal"
# of cause last comparison is possible to write as:
[ $a -eq $b ] || echo "Not equal"

[ $a -eq $b ]
echo $?
1
[ ! $a -eq $b ]
echo $?
0

1
কমান্ডের সাথে !যুক্তি হিসাবে এটি অর্থ test(বাশের অন্তর্নির্মিত সংস্করণ সহ), !কমান্ড অবস্থানে কখন ব্যবহৃত হয় তার অর্থ নয় ।
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

1
! [...]এক্ষেত্রে প্রশ্নের মিল থাকা দরকার ।
মাইকেল হোমার

@ গিলস এবং @ মিশেল হোমারের সাথে একমত আমি জানতাম যে, []হয় test। আমি একটু তাড়াতাড়ি আছি
ইউরিজ গনচরুক

-2

! অন্তর্নির্মিত কমান্ড, একটি পাইপলাইন অনুভূতি বিপরীত।

অন্যান্য ব্যবহার:

#! অন্তর্নির্মিত কমান্ড, স্ক্রিপ্টটি কার্যকর করতে নামকরণকারী দোভাষীকে অনুরোধ করে।

! ইভেন্ট ডিজাইনার, কমান্ড-লাইন শব্দটিকে ইতিহাসের বিকল্প হিসাবে চিহ্নিত করে

!= বৈষম্য অপারেটর

$! শেল ভেরিয়েবল, শেষ পটভূমি কমান্ডের প্রক্রিয়া নম্বর প্রদান করে।


কেবল যুক্ত করার জন্য, আগের কমান্ডের শেষ শব্দটি ব্যবহার করার জন্য একজন! Can ব্যবহার করতে পারে: ls -l /tmp cd !$ এটি আপনাকে / tmp ডিরেক্টরিতে নিয়ে যাবে।
হোপিং বনি

-3

! স্ট্রিংয়ের পরে সর্বশেষতম কমান্ড কার্যকর করা হয় (এখনও কমান্ড বাফারে রয়েছে) যা প্রদত্ত স্ট্রিং দিয়ে শুরু হয়েছিল in শেলটি সবেমাত্র পাওয়া গেছে যে <নাল> দিয়ে কোনও পূর্ববর্তী কমান্ড শুরু হয়নি।


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