বাশ / শ - - এবং & এর মধ্যে পার্থক্য


136

আমি সাধারণত ;একটি লাইনে একাধিক কমান্ড একত্রিত করতে ব্যবহার করি তবে কিছু লোক পছন্দ করে &&। কোন পার্থক্য আছে? উদাহরণস্বরূপ, cd ~; cd -এবং cd ~ && cd -একই জিনিসটি বোধ হয়। কোন সংস্করণটি আরও পোর্টেবল, যেমন অ্যান্ড্রয়েডের শেলের মতো বাশ-সাবসেট দ্বারা সমর্থিত হবে বা তাই?

উত্তর:


193

আগের কমান্ড ব্যর্থ ;হলে দ্বিতীয়টি চলবে।

তবে &&দ্বিতীয়টি দিয়ে চলবে না।

এটি অপারেশনগুলির মধ্যে একটি "অলস" যৌক্তিক "এবং" অপারেন্ড।


2
অন্য কথায় এটি একটি শর্ট সার্কিট আচরণ পেয়েছে
পিটারচাউলা

@ পেটার কোনটি? ;এক বা &&এক? না আপনি উভয় বোঝাতে চান?
শায়ান


57

আমি ব্যবহার করছি &&কারণ দীর্ঘ সময় আগে কাছের কম্পিউটারে:

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C

তবে সাহায্য করা হয়নি ...;)

cd /tnp/test && rm -rf * নিরাপদ... ;)


26
নিরাপদ হতে, আমি ব্যবহার করবrm -rf /tnp/test
Melvynkim

5
আরও নিরাপদ rm /tnp/test/ -rfহওয়ার জন্য মারাত্মক প্রবেশ মিসকালিক প্রতিরোধ করার জন্য ব্যবহার করা ভাল
রেড্রো

22

ইন cmd1 && cmd2, cmd2কেবলমাত্র cmd1সফল হলে কার্যকর হয় (0 প্রদান করে)।

ইন cmd1 ; cmd2, cmd2যে কোনও ক্ষেত্রে মৃত্যুদন্ড কার্যকর করা হয়।

উভয় কনস্ট্রাক্টস একটি পসিক্স-কমপ্লায়েন্ট শেলের অংশ।


11

&&পূর্ববর্তী কমান্ডটি 0 সহকারে প্রস্থান করা হলে পরবর্তী কমান্ডটি কার্যকর করা the বিপরীত হিসাবে, ||পূর্ববর্তী কমান্ডটি 0 ;টির সাথে সর্বদা 0 এর সমান নয় এমন স্থিতি সহ প্রস্থান করা হলে কার্যকর করতে হবে ।

পূর্ববর্তী কমান্ডটি ঠিকঠাক শেষ হয়েছে কিনা তার উপর নির্ভর করে আপনার যখন কোনও নির্দিষ্ট পদক্ষেপ নেওয়া দরকার তখন খুব কার্যকর।


5

দ্বারা পৃথক কমান্ডগুলি ;তাদের সমাপ্তির স্থিতি নির্বিশেষে ক্রমান্বয়ে কার্যকর করা হয়।

সাথে &&, দ্বিতীয় কমান্ড কেবল তখনই কার্যকর করা হয় যখন প্রথমটি সফলভাবে শেষ হয় (0 এর প্রস্থান স্থিতি ফিরে আসে)।

এটি বাশ ম্যানপেজে আওতায় রয়েছে Lists। আমি উভয় অপারেটরকে সমর্থন করার জন্য ইউনিক্সের মতো কোনও শেল আশা করব, তবে অ্যান্ড্রয়েড শেল সম্পর্কে আমি বিশেষভাবে জানি না।


2
বাশ ম্যানুয়ালটির এখানে একটি লিঙ্ক রয়েছে: gnu.org/software/bash/manual/bashref.html# তালিকাগুলি
গ্লেন জ্যাকম্যান

3

&&শর্তসাপেক্ষ কার্যকর করার অনুমতি দেয় যখন ;সর্বদা দ্বিতীয় কমান্ড কার্যকর করা হয়।

উদাহরণস্বরূপ command1 && command2, command2কেবল তখনই কার্যকর করা হবে যখন command1শেষ হয়ে যাবে exit 0, সিগন্যাল দিয়ে সমস্ত ভাল হয়ে গেছে, যখন command1 ; command2দ্বিতীয় কমান্ডে সর্বদা কার্যকর করা হবে ফলাফল যাই হোক না কেন command1


1

&& হ'ল লজিক্যাল এবং বাশ। ব্যাশের লজিকাল এ্যান্ড এর শর্ট সার্কিট মূল্যায়ন রয়েছে। এই মূর্খতা নিম্নলিখিত প্রকাশের একটি সহজ উপায়:


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

যেহেতু ; সংস্করণ নিছক:


cmd1
cmd2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.