सामान्य तौर पर, शेल चर में हेक्स, ऑक्ट और दशमलव संख्या को समझ सकता है, बशर्ते कि उन्हें इस प्रकार परिभाषित किया गया हो integers
:
$ declare -i v1 v2 v3 v4 v5 v6 v7
$ v1=0112
$ v2=74
$ v3=0x4a
$ v4=8#112
$ v5=10#74
$ v6=16#4a
$ v7=18#gg
echo "$v1 $v2 $v3 $v4 $v5 $v6 $v7"
74 74 74 74 74 74 304
या वे "अंकगणित विस्तार" के परिणाम हैं:
$ : $(( v1=0112, v2=74, v3=0x4a, v4=8#112, v5=10#74, v6=16#4a, v7=18#gg ))
$ echo "$v1 $v2 $v3 $v4 $v5 $v6 $v7"
74 74 74 74 74 74 304
तो, आपको केवल उस वर्ण को प्रिंट करने के लिए एक तरीके की आवश्यकता है जो एक चर मान से संबंधित है।
लेकिन यहाँ दो संभावित तरीके हैं:
$ var=$((0x65))
$ printf '%b\n' "\\$(printf '0%o' "$var")"
e
$ declare -i var
$ var=0x65; printf '%b\n' "\U$(printf '%08x' "$var")"
e
दो प्रिंट की जरूरत है, एक मूल्य को हेक्साडेसिमल स्ट्रिंग में बदलने के लिए और दूसरा वास्तव में चरित्र को प्रिंट करने के लिए।
दूसरा कोई भी UNICODE बिंदु प्रिंट करेगा (यदि आपका कंसोल सही ढंग से सेट है)।
उदाहरण के लिए:
$ var=0x2603; printf '%b\n' "\U$(printf '%08x' "$var")"
☃
एक हिम मानव।
वह चरित्र जिसमें एक utf-8 प्रतिनिधित्व है जैसा कि f0 9f 90 ae
है 0x1F42E
। के लिए खोज cow face site:fileformat.info
करने के लिए इसे पाने के :
$ var=0x1F42F; printf '%b\n' "\U$(printf '%08x' "$var")"
🐮
नोट : 4.3 से पहले बैश के लिए UNICODE के साथ एक समस्या है (उस संस्करण में और ऊपर की तरफ सही), UNICODE अंक 128 और 255 (दशमलव में) के बीच के अक्षर गलत तरीके से मुद्रित हो सकते हैं।
संदर्भ
चौथे पैरा के अंदर PARAMETERS
में man bash
:
यदि चर का पूर्णांक विशेषता सेट है, तो मान का मूल्यांकन एक अंकगणितीय अभिव्यक्ति के रूप में किया जाता है, भले ही $ ((...)) विस्तार का उपयोग नहीं किया गया हो (नीचे अंकगणित विस्तार देखें)।
अंदर "कृत्रिम विकास" man bash
:
एक अग्रणी 0 के साथ स्थिरांक को अष्टक संख्या के रूप में व्याख्या की जाती है। एक प्रमुख 0x या 0X हेक्साडेसिमल को दर्शाता है। अन्यथा, संख्याएं फार्म [आधार #] n लेती हैं, जहां वैकल्पिक आधार 2 और 64 के बीच एक दशमलव संख्या है जो अंकगणितीय आधार का प्रतिनिधित्व करता है, और n उस आधार में एक संख्या है। यदि आधार # छोड़ा गया है, तो आधार 10 का उपयोग किया जाता है। 9 से अधिक अंकों को उस क्रम में निचले अक्षरों, बड़े अक्षरों, @, और _ द्वारा दर्शाया जाता है। यदि आधार 36 से कम या इसके बराबर है, तो 10 और 35 के बीच संख्याओं का प्रतिनिधित्व करने के लिए लोअरकेस और अपरकेस अक्षरों का परस्पर विनिमय किया जा सकता है।