ইউনিক্সে পরীক্ষা কমান্ড একটি আউটপুট মুদ্রণ করে না


20

আমি যখন এটি টার্মিনালে টাইপ করি

test 4 -lt 6

আমি কোন আউটপুট পাই না। কেন না? আমার দরকার 0 বা 1


1
'পরীক্ষায়' অবিলম্বে কোনও মান আউটপুট করার বিকল্প থাকলে ভাল হত না? শুধু বিকল্প। এটাই আমাদের দরকার।
টড ওয়ালটন

উত্তর:


15

এক্সপোডে আপনি 0 বা 1 পান।

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

আপডেট : এক্সটিকোডটি পরবর্তী ব্যবহারের জন্য সঞ্চয় করতে, কেবল এটি একটি ভেরিয়েবলকে অর্পণ করুন:

bash-4.2$ test 4 -lt 6

bash-4.2$ first=$?

bash-4.2$ test 4 -gt 6

bash-4.2$ second=$?

bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1

1
প্রস্থান কোডটি পাইপ করার কোনও উপায় আছে?
indieman

3
না। শুধুমাত্র আউটপুট পুনঃনির্দেশিত করা যেতে পারে। যাইহোক, সাধারণত এটির জন্য কোনও প্রয়োজন নেই। এটি পরবর্তী ব্যবহারের জন্য সঞ্চয় করতে, কেবল এটি একটি ভেরিয়েবলের জন্য নির্ধারণ করুন। অথবা সেই মানটির সাথে আপনার উদ্দেশ্যটি ঠিক কী তা আমাদের বলুন।
manatwork

2
প্রস্থান কোডটি $?ভেরিয়েবলের মধ্যে স্থাপন করা হয় - যতক্ষণ না এটি আপনি চালিত পরবর্তী কমান্ড দ্বারা ওভাররাইট না হওয়া পর্যন্ত।
শাদুর

1
দ্রষ্টব্য: আপনি ব্যবহার করতে পারেন অ্যারের একটি পাইপলাইন একাধিক কমান্ড ফল পাবেন। দ্বারা ফল কী হবে গত পাইপলাইন কমান্ড যদি বিকল্প বন্ধ (ডিফল্ট) হয়। $PIPESTATUS$?pipefail
l0b0

@ ইন্ডিয়ান, যদি আপনার প্রযোজনীয় স্থিতির ভিত্তিতে অন্য কিছু করা প্রয়োজন হয় তবে আপনার এটি সংরক্ষণ করার দরকার নেই - কেবল ব্যবহার করুনif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
ওয়াইল্ডকার্ড

5

আরেকটি উপায়

test 4 -lt 6 && echo 1 || echo 0

তবে সেক্ষেত্রে সতর্কতা অবলম্বন করুন। যদি testসাফল্য এবং echo 1ব্যর্থতা echo 0কার্যকর হয়।


2

যদি আপনি একটি প্রস্থান কোডের পরিবর্তে স্ট্যান্ডার্ড আউট এর সাথে তুলনার ফলাফল চান তবে আপনি expr(1)কমান্ডটি ব্যবহার করতে পারেন :

$ expr 4 '<=' 6
1

দুটি বিষয় লক্ষণীয়:

  1. আপনার সম্ভবত অপারেটরকে শেল মেটাচ্যাকার্টরের সাথে প্রচুর দ্বন্দ্ব হিসাবে উদ্ধৃত করতে হবে
  2. আউটপুট মানটি এর জন্য রিটার্ন কোডের বিপরীত testtestসত্যের জন্য 0 প্রদান করে (যা প্রস্থান কোডগুলির জন্য মান), তবে exprসত্যের জন্য 1 টি প্রিন্ট করে।

1
3. একটা হল testশেল builtin, যা যথেষ্ট যতো তাড়াতাড়ি (50 সম্পর্কে আমার মেশিনে বার) testএবং exprথেকে এক্সেকিউটেবল coreutils প্যাকেজ।
manatwork

দ্বিতীয় পয়েন্টের জন্য +1। আপনি যে গোলমাল করছেন তা খুঁজে পেতে খুব হতাশাব্যঞ্জক একটি বাগ পেতে পারে।
ইমানুয়েল বার্গ

2

আপনি নিম্নলিখিত কমান্ডটি টাইপ করতে পারেন:

echo $(test -e myFile.txt) $?
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.