बैश (और अन्य यूनिक्स गोले), 32 (33) बाइट्स
पहला और दूसरा प्रयास:
case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L # non-portable
डेनिस के लिए धन्यवाद, छोटा संस्करण:
od<<<a|grep -q 5&&echo L||echo B # non-portable
echo|od|grep -q 5&&echo B||echo L # portable
echo
उपयोगिता हेक्स मान के साथ एक नई पंक्ति आउटपुट, 0A
है, और कोई अन्य उत्पादन। इसके लिए <<<a
है 61 0A
।
od
उपयोगिता, डिफ़ॉल्ट रूप से, इनपुट दो-बाइट शब्दों के रूप में, की व्याख्या शून्य गद्देदार अगर बाइट की संख्या विषम है, और अष्टाधारी में धर्मान्तरित। इसका परिणाम गूंज के रूप 0A 00
में होता है, जिसे 005000
बड़े-एंडियन या 000012
छोटे-एंडियन में परिवर्तित किया जाता है । छोटे-एंडियन और बड़े-एंडियन में 61 0A
हो जाता 005141
है 060412
। आयुध डिपो से भरा उत्पादन भी अर्थ हम उपयोग नहीं कर सकते पता और आकार डेटा शामिल हैं 0
, 1
या 2
परीक्षण के लिए।
सिस्टम के एंडियननेस को उजागर करने के लिए कमांड को अच्छी तरह से परिभाषित किया गया है। से मानक :
संख्यात्मक मूल्यों की व्याख्या करते समय उपयोग किया जाने वाला बाइट क्रम कार्यान्वयन-परिभाषित है, लेकिन उस क्रम के अनुरूप होगा जिसमें सिस्टम पर इसी प्रकार का एक मेमोरी में संग्रहीत होता है।
संगतता नोट
मुझे यकीन नहीं है कि अगर echo|od
उनके आसपास कोई दोहरा उद्धरण नहीं है, जिसके परिणामस्वरूप [तीन-शब्द तर्क में case
] सभी प्रणालियों पर समर्थित है। मुझे यकीन नहीं है कि सभी सिस्टम शेल स्क्रिप्ट का समर्थन करते हैं, जिसमें कोई भी समाप्ति न्यूलाइन नहीं है। मैं ज्यादातर निश्चित हूं, लेकिन बड़े-एंडियन सिस्टम पर पैडिंग बाइट को जोड़ने के साथ ओड के व्यवहार का 100% नहीं। यदि आवश्यक हो, echo a
तो पोर्टेबल संस्करणों के लिए उपयोग किया जा सकता है। सभी स्क्रिप्ट बश, ksh और zsh में काम करती हैं, और पोर्टेबल डैश में काम करती हैं।