เราควรใช้อักขระ UTF-8 อย่าง⏰ใน bash / shell script หรือไม่?


36

รหัสง่าย ๆ ที่นี่ทำงานตามที่คาดไว้ในเครื่องของฉันหากเปิดตัวด้วยbash:

function ⏰(){
 date
}

มีปัญหาสำหรับคนอื่นที่ใช้สิ่งนี้หรือเป็นสากลหรือไม่?

ฉันสงสัยเพราะฉันไม่เคยเห็นอะไรแบบนี้ในซอร์สโค้ดอื่นในตอนนี้

แก้ไข: มีความเป็นไปได้ไม่ จำกัด สามารถใช้เพื่อแยกแยะบทบาทของฟังก์ชันกับการใช้อีโมจิได้อย่างรวดเร็ว

A 💣สำหรับบางสิ่งที่สามารถแก้ไขหรือลบไฟล์ได้ a หากอยู่ในระหว่างดำเนินการ📃สำหรับเมนูแบบโต้ตอบ ...

ฉันเดาว่าเราควรสร้างมาตรฐานสำหรับสิ่งเหล่านั้น แต่ดูเหมือนจะเป็นแนวคิดที่น่าสนใจ
บางทีการสุ่มบรรทัดของอักขระ 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(){

ฉันใช้การเยื้องที่แปลกเพื่อแสดงว่าฟังก์ชั่นนั้นเกี่ยวข้องกันอย่างไรและสัญลักษณ์📃 / ❓เพื่อแยกแยะบทบาทของพวกเขาอย่างชัดเจน (แน่นอนว่านี่ไม่ใช่ชื่อฟังก์ชั่นที่แท้จริงของฉันฉันเพิ่งใส่ตัวอักษรแบบสุ่มในตอนท้าย แต่แม้จะไม่มีพวกเขาเราก็สามารถเห็นความสัมพันธ์ได้อย่างชัดเจน)


8
ฉันว่ามันไม่ปลอดภัยด้วยเหตุผลที่เข้ากันไม่ได้ย้อนหลังถ้าคุณต้องใช้สคริปต์ของคุณบนเซิร์ฟเวอร์เก่าสิ่งนี้ไม่สามารถใช้งานได้เนื่องจาก bash emoji support เป็นรุ่นล่าสุด แต่มันก็โอเคกับลีนุกซ์รุ่นล่าสุด
กีวี

18
@Ipor no มันหมายถึง Unicode (และ“ Uni” ใน Unicode หมายถึง universal)
Stephen Kitt

5
"สากล" คุณต้องการให้สากลเป็นอย่างไร ใช้งานได้กับ Cygwin โดยมีปัญหา UTF-8 กับ UTF-16 ตามปกติหรือไม่ เกี่ยวกับบริการระบบ IBM z / OS ที่ทันสมัยซึ่งยังต้องจัดการกับชุดอักขระ EBCDIC สำหรับคอมพิวเตอร์ Unix ที่ไม่ได้ใช้ไบต์ขนาด 8 บิตเป็นหน่วยที่เล็กที่สุด? ข้อ จำกัด POSIX อยู่ที่นั่นด้วยเหตุผล ...
dirkt

6
ชื่อของฟังก์ชันต้องประกอบด้วยอักขระจากชุดอักขระแบบพกพาอ้างอิงจาก POSIX หาก "universal" หมายถึง "เชลล์ใด ๆ " ก็จะไม่เป็นสากลในแง่นี้
Kusalananda

6
หากคุณพบว่าตัวเองถามว่าปลอดภัยหรือไม่ที่จะทำอะไรในเชลล์สคริปต์คำตอบนั้นอาจไม่ใช่ Heck ไม่ได้ทำecho $fooมีความปลอดภัย
Matteo Italia

คำตอบ:


55

แนวทางที่มีประโยชน์สำหรับสิ่งนี้คือ "ส่วนต่อประสานระบบปฏิบัติการพกพา" (POSIX) ตระกูลมาตรฐานที่ใช้งานโดยระบบที่มีลักษณะคล้าย Unix ส่วนใหญ่ เป็นความคิดที่ดีที่จะ จำกัด เชลล์สคริปต์ไว้ที่ฟีเจอร์ที่ได้รับคำสั่งจาก POSIX เพื่อให้แน่ใจว่าจะสามารถใช้งานได้กับเชลล์และแพลตฟอร์มที่แตกต่างกัน

ตามข้อกำหนด POSIX ของนิยามฟังก์ชันใน "ภาษาคำสั่งเชลล์" :

ฟังก์ชั่นชื่อ fname; แอปพลิเคชันจะต้องตรวจสอบให้แน่ใจว่าเป็นชื่อ (ดูปริมาณคำจำกัดความฐานของ IEEE Std 1003.1-2001, ส่วน 3.230, ชื่อ ) การใช้งานอาจอนุญาตให้ตัวละครอื่น ๆ ในชื่อฟังก์ชั่นเป็นส่วนขยาย

ตามลิงค์ไปยังคำจำกัดความของ "ชื่อ" :

ในภาษาคำสั่งเปลือกคำประกอบด้วย แต่เพียงผู้เดียวของขีดตัวเลขและ alphabetics จากชุดตัวอักษรแบบพกพา

ชุดอักขระนั้นมีอักขระระหว่าง U0000 ถึง U007E เท่านั้น
ดังนั้นตัวอักษรเช่น "⏰" (U23F0) จึงไม่ถูกต้องในตัวระบุที่สอดคล้องกับ POSIX

เปลือกของคุณอาจยอมรับพวกเขา แต่นั่นไม่ได้รับประกันว่าคนอื่นจะทำเช่นกัน
เพื่อให้สามารถใช้สคริปต์ของคุณกับแพลตฟอร์มและเวอร์ชั่นซอฟต์แวร์ต่าง ๆ ได้คุณควรหลีกเลี่ยงการใช้ตัวระบุที่ไม่สอดคล้องเช่นนี้


18
กฎง่ายๆ ... ถ้าแป้นพิมพ์มาตรฐานของคุณไม่มีกุญแจอยู่ ... อย่าใช้มัน
SnakeDoc

6
@SnakeDoc youtube.com/watch?v=3AtBE9BOvvk "มาตรฐาน" คีย์บอร์ดอิโมจิ;)
Jorn

9
@ จอนบางทีฉันควรจะพูดว่า "ถ้าคุณไม่สามารถซื้อแป้นพิมพ์จากร้านค้าปลีกทั่วไป" ... lol
SnakeDoc

4
@SnakeDoc มันเป็นการเริ่มต้นที่ดี - แต่คีย์บอร์ดที่ฉันพิมพ์บนนี้มีคีย์สำหรับ£, €, และ¬ซึ่งทั้งหมดอยู่นอกชุดอักขระแบบพกพา เพื่อนร่วมงานบางคนมีแป้นพิมพ์ที่มีä, ö, ü, è, éและß เป็นตัวอักษรทั้งหมด แต่ไม่เหมาะสำหรับชื่อฟังก์ชั่นพกพา
Martin Bonner สนับสนุนโมนิก้า

2
เป็นไปตาม POSIX แต่ไม่ จำกัด POSIX?
bob dylan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.