`परीक्षण` और` [`` - अलग-अलग बायनेरिज़, कोई अंतर?


14

मैंने एक और सवाल का जवाब देते हुए देखा कि testऔर [अलग-अलग बायनेरी हैं, लेकिन [मैनपेज ऊपर खींचता है test। समाप्त करने की आवश्यकता के अलावा ], क्या कोई अंतर है? यदि नहीं, तो वे सहिष्णु होने के बजाय अलग-अलग बायनेरी क्यों हैं? (वे भी bashनिर्मित हैं, और bashकोई अंतर नहीं दिखाता है।)

जवाबों:


6

स्रोत कोड जा रहा है कि यह कैसे संभालती के रूप में अंतर बताते हैं --helpविकल्प।

  /* Recognize --help or --version, but only when invoked in the
     "[" form, when the last argument is not "]".  Use direct
     parsing, rather than parse_long_options, to avoid accepting
     abbreviations.  POSIX allows "[ --help" and "[ --version" to
     have the usual GNU behavior, but it requires "test --help"
     and "test --version" to exit silently with status 0.  */

दिखाते

$ /usr/bin/test --help
$
$ /usr/bin/[ --help
Usage: test EXPRESSION
  or:  test
  or:  [ EXPRESSION ]
  or:  [ ]
  or:  [ OPTION
Exit with the status determined by EXPRESSION.
[...]

में bashनिर्मित संस्करण, फर्क सिर्फ इतना है कि है [की आवश्यकता है ], अंत में के रूप में आप ने कहा।


1
दिलचस्प है, हालांकि अधिकांश कार्यक्रम एक सिमिलिंक के साथ समान व्यवहार प्राप्त करते हैं।
केविन

2
वे मेरे सिस्टम पर समान इनकोड के हार्डलिंक हैं। इस ओवर सिम्बलिंक का लाभ यह है कि यदि सिम्लिंक लक्ष्य को हटा दिया जाता है या स्थानांतरित कर दिया जाता है, तो सिम्लिंक अब काम नहीं करता है। यदि किसी हार्डलाइन को इनोड में स्थानांतरित या हटा दिया जाता है, तो सभी हार्डलिंक काम करना जारी रखते हैं।
कोई नहीं

6

आम तौर पर, वे कठोर लिंक के साथ एक ही द्विआधारी होते हैं। शेल के आधार पर, एक आंतरिक कार्यान्वयन बाइनरी के बजाय परीक्षण testऔर [परीक्षण के लिए उपयोग किया जा सकता है । यह प्रक्रिया स्पैनिंग के मामले में अधिक कुशल है, और बाइनरी प्रोग्राम testप्रदान करने की तुलना में विभिन्न विकल्प प्रदान कर सकता है।

कॉल प्रारूप में अंतर के अलावा, वे दोनों समान कार्यक्षमता प्रदान करते हैं।


8
आश्चर्यजनक रूप से पर्याप्त, डेबियन के कोरुटिल्स में वे एक ही बाइनरी नहीं हैं। समान स्रोत को दो बार संकलित किया जाता है, एक PROGRAM_NAME को "परीक्षण" के रूप में परिभाषित करता है, और अन्य इसे "[" के रूप में परिभाषित करता है और कुछ अतिरिक्त कोड के साथ परीक्षण करता है कि अभिव्यक्ति "]" के साथ समाप्त होती है। o_O
एंगस

3
@angus इसका एक अन्य उदाहरण ls / dir / vdir है। ऐसा लगता है कि कोरुटिल्स रनगेट पर argv [0] के परीक्षण के बजाय अलग-अलग हार्डकोड बायनेरिज़ का निर्माण करना पसंद करते हैं।
रैंडम 832
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.