क्या हमें UTF-8 अक्षरों का उपयोग ⏰ जैसे bash / शेल स्क्रिप्ट में करना चाहिए?


36

यदि यहां लॉन्च किया गया है तो यहां सरल कोड मेरी मशीन पर अपेक्षित रूप से काम कर रहा है bash:

function ⏰(){
 date
}

क्या इसका उपयोग करने वाले अन्य लोगों के लिए कोई समस्या हो सकती है, या क्या यह सार्वभौमिक है?

मुझे आश्चर्य हो रहा है क्योंकि मैंने अभी तक अन्य स्रोत कोड में ऐसा कुछ नहीं देखा है।

संपादित करें: असीमित संभावनाएं हैं, इसका उपयोग उदाहरण के लिए इमोजी के उपयोग के साथ एक फ़ंक्शन भूमिका को जल्दी से भेद करने के लिए किया जा सकता है।

एक A कुछ के लिए जो फ़ाइलों को संशोधित या निकाल सकता है, एक that यदि यह प्रगति में काम करता है, तो एक इंटरेक्टिव मेनू के लिए ...

मुझे लगता है कि हम सभी के लिए एक मानक बनाना चाहिए, लेकिन यह एक दिलचस्प विचार है।
शायद ~ 5 वर्णों की एक यादृच्छिक रेखा हमें यह समझने में बहुत मदद कर सकती है कि कोड क्या कर रहा है। (बेशक हमें उन्हें पढ़ना सीखना होगा।)

अधिक संपादित करें: मैं इसे एक शॉट दे रहा हूं। अभी के लिए, यदि मैं अपने सभी कार्यों को अपने संपादक (या cat myscript.sh|grep function) में मोड़ता हूं तो वे इस तरह दिखते हैं। (मेरा यूनिकोड geanyयहाँ की तुलना में या मेरे टर्मिनल में बहुत बेहतर दिखता है।)

function _1(){
function ⬚⬚_2(){
function ⬚⬚⬚_📃_D(){
function ⬚⬚⬚⬚_📃_X(){
function ⬚⬚⬚⬚⬚_📃_Y(){
function ⬚⬚⬚⬚⬚⬚__P(){
function ⬚⬚⬚⬚_📃_Z(){
function ⬚⬚⬚⬚⬚__U(){
function ⬚⬚⬚⬚⬚__O(){

मैं एक अजीब इंडेंटेशन का उपयोग करता हूं ent यह दिखाने के लिए कि कैसे फ़ंक्शन एक-दूसरे से संबंधित हैं और एक प्रतीक 📃 / ent अपनी भूमिका को स्पष्ट रूप से अलग करने के लिए। (निश्चित रूप से ये मेरे वास्तविक कार्य नाम नहीं हैं, मैं अंत में एक यादृच्छिक पत्र डालता हूं, लेकिन उनके बिना भी हम रिश्तों को स्पष्ट रूप से नहीं देख सकते हैं।)


8
मैं इसे रेट्रो-असंगत कारण के लिए असुरक्षित कहूंगा, यदि आपको अपनी स्क्रिप्ट को पुराने सर्वर पर उपयोग करना है तो यह काम नहीं कर सकता क्योंकि bash इमोजी सपोर्ट हाल ही में है। लेकिन यह शायद हाल ही में लिनक्स पर ठीक है।
कीवी

18
@ नहीं, यह यूनिकोड के लिए खड़ा है (और यूनिकोड में "यूनी" सार्वभौमिक के लिए खड़ा है)।
स्टीफन किट

5
आप "सार्वभौमिक" कैसे सार्वभौमिक होना चाहते हैं? साइगविन पर काम करता है, सामान्य UTF-8 बनाम UTF-16 समस्याओं के साथ? आधुनिक IBM z / OS सिस्टम सेवाओं पर, जिन्हें अभी भी EBCDIC चारसेट से निपटना है? ऐतिहासिक यूनिक्स कंप्यूटरों पर जो 8-बिट बाइट्स को सबसे छोटी इकाई के रूप में उपयोग नहीं करते हैं? POSIX प्रतिबंध एक कारण के लिए है ...
dirkt

6
POSIX के अनुसार, कार्यों के नाम पोर्टेबल वर्ण सेट से वर्णों से बने होने चाहिए। यदि "सार्वभौमिक" का अर्थ है "कोई भी खोल", तो यह इस अर्थ में सार्वभौमिक नहीं होगा।
Kusalananda

6
यदि आप खुद से पूछते हैं कि क्या शेल स्क्रिप्ट में ऐसा करना सुरक्षित है, तो जो भी हो, इसका जवाब शायद सबसे ज्यादा है। हेक, करना भी echo $fooसुरक्षित नहीं है।
माटेओ इटालिया

जवाबों:


55

इसके लिए एक उपयोगी दिशानिर्देश "पोर्टेबल ऑपरेटिंग सिस्टम इंटरफ़ेस" (POSIX) है, मानकों का एक परिवार जो अधिकांश यूनिक्स जैसी प्रणालियों द्वारा कार्यान्वित किया जाता है। आमतौर पर शेल स्क्रिप्ट को POSIX द्वारा अनिवार्य करने की सुविधाओं को सीमित करने के लिए यह एक अच्छा विचार है कि यह सुनिश्चित करने के लिए कि वे विभिन्न शेल और प्लेटफार्मों में उपयोग करने योग्य होंगे।

"शेल कमांड लैंग्वेज" में फ़ंक्शन परिभाषाओं के POSIX विनिर्देश के अनुसार :

फ़ंक्शन का नाम fname है; आवेदन यह सुनिश्चित करेगा कि यह एक नाम है (IEEE Std 1003.1-2001, धारा 3.230, नाम ) का आधार परिभाषा खंड देखें । एक कार्यान्वयन एक फ़ंक्शन नाम में अन्य वर्णों को एक्सटेंशन के रूप में अनुमति दे सकता है।

"नाम" की परिभाषा के लिंक के बाद :

शेल कमांड लैंग्वेज में, एक ऐसा शब्द, जिसमें पोर्टेबल चरित्र सेट से केवल अंडरस्कोर, अंक और वर्णमाला होते हैं ।

उस वर्ण सेट में केवल U0000 और U007E के बीच के वर्ण हैं।
इसलिए "(" (U23F0) जैसे अक्षर POSIX- अनुरूप पहचानकर्ता में मान्य नहीं हैं।

आपका शेल उन्हें स्वीकार कर सकता है, लेकिन यह गारंटी नहीं देता है कि अन्य लोग भी।
विभिन्न प्लेटफार्मों और सॉफ़्टवेयर संस्करणों में अपनी स्क्रिप्ट का उपयोग करने में सक्षम होने के लिए, आपको इस तरह के गैर-अनुपालन वाले पहचानकर्ताओं का उपयोग करने से बचना चाहिए।


18
अंगूठे का अच्छा नियम ... यदि आपके मानक कीबोर्ड में इसके लिए कोई कुंजी नहीं है ... इसका उपयोग न करें।
स्नेकडोक

6
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk "मानक" इमोजी कीबोर्ड;)
Jorn

9
@ जोर्न शायद मुझे कहना चाहिए "अगर आप कीबोर्ड को एक सामान्य रिटेल स्टोर से नहीं खरीद सकते हैं" ... lol
SnakeDoc

4
@SnakeDoc यह एक अच्छी शुरुआत है - लेकिन मैं जिस कीबोर्ड पर यह टाइप कर रहा हूं, उसमें £, € और which के लिए एक कुंजी है, जो पोर्टेबल वर्ण सेट के बाहर हैं। अधिक गंभीरता से, कुछ सहयोगियों के पास उन पर ä, ö, ü, è, é, और ß के साथ कीबोर्ड होते हैं। वे सभी अक्षर हैं लेकिन पोर्टेबल फ़ंक्शन नामों के लिए अच्छे नहीं हैं।
मार्टिन बोनर

2
POSIX- आज्ञाकारी लेकिन POSIX- सीमित नहीं?
बॉब डिलेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.