มีเหตุผลทางเทคนิคใดบ้างที่ไม่ได้ใช้อักขระเว้นวรรคในชื่อไฟล์


75

ใครบางคนที่ฉันรู้จักแสดงความรำคาญในวันนี้เกี่ยวกับพวกเราที่มักจะไม่ใช้ช่องว่างในชื่อไฟล์ของเราเช่นNamingThingsLikeThis.txt- แม้ว่าระบบปฏิบัติการที่ทันสมัยที่สุดจะรองรับช่องว่างในชื่อไฟล์

มีเหตุผลทางเทคนิคหรือไม่ที่จะเห็นชื่อไฟล์ที่ไม่มีเว้นวรรค (เหมาะสม)? ถ้าใช่เหตุผลทางเทคนิคเหล่านี้ที่ช่องว่างในชื่อไฟล์จะถูกหลีกเลี่ยงหรือท้อแท้และในกรณีใดบ้างที่เกี่ยวข้อง

เหตุผลที่ชัดเจนที่สุดที่ฉันคิดได้และทำไมฉันมักจะหลีกเลี่ยงมันเป็นคำพูดพิเศษที่จำเป็นในบรรทัดคำสั่งเมื่อจัดการกับไฟล์ดังกล่าว มีเหตุผลทางเทคนิคที่สำคัญอื่น ๆ อีกไหม?


อย่างที่คุณพูดพวกเขาจัดการกับบรรทัดคำสั่งได้ง่ายกว่ามาก และสำหรับการเขียนโปรแกรมฉันไม่แน่ใจว่าเป็นไปได้หรือเป็นไปได้ที่จะใช้ช่องว่างในชื่อไฟล์
Alvin Row

คำตอบ:


66

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

ปลอดภัยกว่าที่จะไม่มีที่นั่นแม้ว่าคุณจะแน่ใจว่าไฟล์ / dir / what-ever จะไม่ถูกใช้ในบริบทดังกล่าว

นั่นและนิสัยเก่าตายยาก


พวกเขายังเป็นความเจ็บปวดของราชวงศ์ที่ถูกต้องที่จะจัดการกับมันดังนั้นคุณต้องเขียนเส้นทางและดัดแปลงมัน ตรวจสอบให้แน่ใจว่าไม่มีการอ้างอิงคอมโพเนนต์และไม่ใช้ Escape สำหรับการแก้ไขก่อนที่จะหลบหนี / การอ้างอีกครั้งโดยเฉพาะอย่างยิ่งถ้าชิ้นส่วนถูกส่งไปยังบิตของโค้ดอื่น ๆ เพื่อทำการจัดการ
afrazier

2
หากคุณคิดว่าช่องว่างไม่ดีลองจัดการกับไฟล์ด้วยการขึ้นบรรทัดใหม่ ( '\n') ในชื่อของพวกเขา (ระบบที่เหมือนระบบยูนิกซ์อนุญาตให้ใช้สิ่งนี้จริง ๆ แล้ว Windows โดยทั่วไปหรืออย่างน้อยก็ทำให้มันยาก)
Keith Thompson

31

นอกเหนือจากคำตอบอื่น ๆ เกี่ยวกับบรรทัดคำสั่งและนิสัยเก่าแล้วยังมีโปรโตคอลเครือข่ายจำนวนมากที่ต้องการการดูแลเป็นพิเศษเมื่อจัดการกับชื่อไฟล์ที่มีช่องว่าง

(หากคุณเคยลองดาวน์โหลด "Product List.pdf" จากเว็บไซต์และจบลงด้วยไฟล์ที่เรียกว่า "ผลิตภัณฑ์" คุณจะถูกกัดเพราะสิ่งนี้โปรแกรมเมอร์ไม่รู้จักหรือไม่สามารถ ไม่เข้าใจกฎการอ้างอิงสำหรับส่วนหัว HTTP Content-Disposition)


11
+1 HTTP สำหรับการเริ่มต้น ช่องว่างใน URL (สำหรับโปรโตคอลใด ๆ ไม่ใช่เฉพาะ HTTP) ควรถูกหลีกหนีไปที่% 20 หรือ + ความสับสนสามารถเกิดขึ้นได้เมื่อพวกเขาไม่ได้เข้ารหัสตามที่ควรจะเป็น สำหรับหน้าเว็บมีเหตุผลที่ชัดเจนในการหลีกเลี่ยงช่องว่างและขีดล่าง ("_") ที่ใช้กันทั่วไปเพื่อแทนที่หน้าเว็บ - พวกเขาอาจมีลักษณะเหมือนกันในลิงก์ที่ขีดเส้นใต้ดังนั้นผู้ใช้จึงสามารถคัดลอกลิงก์ด้วยตนเอง มันผิด
David Spillett

5
หนึ่งในสิ่งที่น่ารำคาญที่สุดเกี่ยวกับช่องว่างที่จำเป็นต้องเข้ารหัสใน URL คือแนวโน้มของซอฟต์แวร์บางอย่างที่จะสิ้นสุดการรักษาช่องว่างที่เข้ารหัส ...
SamB

มันเป็นเรื่องจริงเหรอ? ในปี 2018 สิ่งนี้เกิดขึ้น?
Chris Calo

@ChrisCalo คุณอาจสังเกตเห็นว่าคำตอบนี้ได้รับในปี 2009 ไม่ใช่ปี 2018 แต่ใช่ยังคงเกิดขึ้นในปี 2018 อาจเป็นไปได้น้อยกว่าตอนนี้ผู้พัฒนามือใหม่ส่วนใหญ่ใช้เฟรมเวิร์กในการสร้างเว็บไซต์มากกว่าการทำทุกอย่าง ปัญหา
Stobor

28

เหตุผลมากมายเป็นเรื่องเกี่ยวกับประวัติศาสตร์ ไม่ได้หมายความว่าวันนี้พวกเขาไม่เข้าท่า

ปัญหาในการพกพา

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

ดังนั้นตราบใดที่มีความเป็นไปได้เพียงเล็กน้อยที่คุณอาจต้องการเข้าถึงไฟล์ได้อย่างง่ายดายจากระบบเก่าคุณจะต้องเลือกตัวละครที่ปลอดภัยเท่านั้น ซึ่งอาจรวมถึงการบูทในระบบกู้คืนเก่าที่คุณเก็บไว้หรือกลัวว่า Windows รุ่นล่าสุดจะยังคงใช้ MS-DOS อยู่

ความยาว

ระบบไฟล์อาจจำกัดความยาวของไฟล์ นี้ก็ยิ่งรุนแรงมากขึ้นในช่วงวันที่เมื่อ MS-DOS ถูก จำกัด8.3 ชื่อไฟล์ ดังนั้นการเว้นช่องว่างทำให้คุณสามารถใส่อักขระที่มีความหมายมากขึ้นในชื่อ

ระบบไฟล์อื่น ๆ หลายแห่งยังกำหนดข้อ จำกัด ที่เข้มงวดเกี่ยวกับความยาวชื่อไฟล์ Wikipedia มีตารางในบทความเกี่ยวกับการเปรียบเทียบระบบไฟล์สำหรับผู้ที่ต้องการรายละเอียด

อักขระที่จองไว้

MS-DOS ยังกำหนดอักขระช่องว่างเป็นอักขระที่สงวนไว้ เพราะนี่คือความจริงที่ว่าตัวละครของพื้นที่ที่ใช้สำหรับการขยายไขมัน นอกจากนี้ MS-DOS ไม่ได้จัดเตรียมระบบการหลบหนีไว้ในเชลล์

การตีความบรรทัดคำสั่ง

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

พิจารณาความแตกต่างระหว่าง

rm foo bar

และ

rm "foo bar"

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

ความกำกวมสามารถป้องกันได้โดยการห้ามเว้นวรรคที่ฝังตัวในชื่อไฟล์และไดเรกทอรีในสถานที่แรก (ตัวอย่างเช่นโดยการแทนที่ด้วยขีดล่าง '_') หรือหากได้รับการสนับสนุนจากล่ามบรรทัดคำสั่งและโปรแกรมที่รับพารามิเตอร์เหล่านี้ อาร์กิวเมนต์โดยใส่ชื่อด้วยช่องว่างที่ฝังอยู่ระหว่างอักขระเครื่องหมายคำพูดหรือใช้อักขระเลี่ยงหน้าช่องว่างมักเป็นเครื่องหมายแบ็กสแลช ('\') ตัวอย่างเช่น

Long path/Long program name Parameter one Parameter two ...

คลุมเครือ (คือ "ชื่อโปรแกรม" เป็นส่วนหนึ่งของชื่อโปรแกรมหรือพารามิเตอร์สองตัว?); อย่างไรก็ตาม

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

และ Long \ path / Long \ program \ name พารามิเตอร์ \ หนึ่งพารามิเตอร์ \ สอง ...

ไม่คลุมเครือ

Uniform Resource Locators (URL)

เมื่อพยายามอธิบายตำแหน่งของไฟล์โดยใช้ URL จะต้องเว้นช่องว่าง

ตัวละครอาจไม่ปลอดภัยด้วยเหตุผลหลายประการ อักขระช่องว่างไม่ปลอดภัยเนื่องจากช่องว่างที่สำคัญอาจหายไปและอาจมีช่องว่างที่ไม่สำคัญเมื่อมีการคัดลอก URL หรือเรียงพิมพ์หรืออยู่ภายใต้การดูแลของโปรแกรมประมวลผลคำ

ที่มา: RFC1738

ดังนั้นพื้นที่จะต้องถูกแทนที่ด้วย%20แทน สิ่งนี้ทำให้ส่วนชื่อไฟล์ของ URL อ่านได้น้อยลงและทำให้ผู้คนหลีกเลี่ยงได้ตั้งแต่แรก


25

ช่องว่างถูกเข้ารหัสหรือแปลงเป็น%20ชื่อไฟล์บนเว็บซึ่งอาจทำให้การจัดการเนื้อหาของไซต์ทำได้ยากขึ้น

มีImage 1.pngและImage%201.pngกำลังสับสน ใช้ง่ายกว่าImage001.pngแทน

สิ่งนี้อยู่ภายใต้หมวดหมู่เดียวกันกับ escape sequences สำหรับบรรทัดคำสั่ง


5

บางครั้งช่องว่างสามารถแสดงปัญหาเมื่อจัดการกับบรรทัดคำสั่งหรือเมื่อใช้ระบบปฏิบัติการรุ่นเก่าหรือเมื่อเขียนโปรแกรมซึ่งจะถูกรวบรวมในระบบปฏิบัติการที่แตกต่างกันหรือเมื่อ ... มีหลายสาเหตุที่ทำให้เกิดปัญหา จริงๆรู้สึกว่ามันเป็นเช่นปัญหาในการเขียนแฟ้มเป็น: ไฟล์โดยไม่ต้อง blanks.txtหรือfile_without_blanks.txt ฉันชอบ dask เพราะบางครั้งขีดเส้นใต้อาจมองไม่เห็นเมื่อต้องจัดการกับตัวอย่างเช่นตัวอักษรที่ขีดเส้นใต้

แต่ส่วนใหญ่มันเป็นเรื่องของนิสัยตั้งแต่อายุ ซึ่งผมไม่รู้สึกว่ามีเพียงพอโปรเหตุผลที่จะละทิ้ง


หมายเหตุเพิ่มเติมอาจไม่เกี่ยวข้อง แต่อย่างไรก็ตามฉันจะใส่ไว้ที่นี่ คนที่ตั้งชื่อไฟล์ด้วยช่องว่างมักไม่ได้คิดอะไรมาก คนที่ไม่รู้บ่อยว่าทำไมจึงเป็นการดีที่จะหลีกเลี่ยงพวกเขาในชื่อไฟล์
และเราทุกคนสามารถตกลงกันได้ไม่มีอะไรเลวร้ายไปกว่าไฟล์ที่ชื่อ "Dear Sir or Madam ฉันเขียนจดหมายนี้ถึงคุณเพื่อแจ้งให้คุณทราบถึง yo.doc"

ไม่เพียงแค่การเว้นวรรค - ความยาวของไฟล์ยังรวมถึงบางสิ่งบางอย่างและ IMHO ก็ไม่ควรยาวเกิน 30 ตัวอักษร สำหรับชื่อไฟล์แบบยาวที่มีช่องว่างภายในยังเป็นพรเมื่อบันทึกซีดีดีวีดีและอื่น ๆ ซึ่งจำเป็นต้องอ่านภายใต้ระบบปฏิบัติการรุ่นเก่าและอยู่ระหว่าง Win และ * nix plaforms


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