มีวิธีที่สวยงามในการตั้งค่าตัวแปรเชลล์ให้กับเนื้อหาของไฟล์หรือไม่?


11

configว่าฉันมีข้อมูลการกำหนดค่าบางอย่างในแฟ้ม ฉันต้องการโหลดข้อมูลนี้ลงในตัวแปรเชลล์เพื่อความCONFIG_DATAสะดวก

เห็นได้ชัดว่าฉันสามารถทำ:

CONFIG_DATA="$(cat config)"

แต่ความรู้สึกแบบนี้ไม่มีประโยชน์catกับฉัน นี่เป็นวิธีเดียวที่จะทำเช่นนี้? หรือมีวิธีที่สง่างามกว่าที่จะทำหรือไม่

รู้รอบควรเลือก POSIX แต่อาจใช้เชลล์ใดก็ได้


2
การอ่านไฟล์ทั้งหมดในหน่วยความจำเช่นนี้เป็นความคิดที่ดีเสมอไม่ว่าคุณจะเขียนมันอย่างไร
Satō Katsura

2
@SatoKatsura ในบางกรณีจริงมาก อย่างไรก็ตามสำหรับวัตถุประสงค์ของคำถามนี้คุณอาจคิดว่าไฟล์นั้นเล็กมากดังนั้นจึงไม่ใช่ปัญหาใหญ่
strugee

1
@SatoKatsura: ทำไม
RemcoGerlich

คำตอบ:


23

อย่างน้อยใน Bash และ Z shell มีวิธีที่เร็วกว่า:

CONFIG_DATA=$(<config)

หากต้องการอ้างอิงจากหน้า man ของเชลล์ Bourne Again:

การแทนที่คำสั่ง $ (ไฟล์ cat) สามารถแทนที่ได้ด้วยการเทียบเท่า แต่เร็วกว่า $ (ไฟล์ <)


1
ฉันไม่คิดว่านี่เป็นตัวเลือกที่ดี อะไรก็ตามที่เป็นความรู้สึกของ OP ต่อการใช้แมวที่ไร้ประโยชน์ตัวอย่างของ OP นั้นง่ายพอที่ผู้ใช้ Bash ส่วนใหญ่จะเข้าใจ มันยังพกพาได้ค่อนข้าง ตอนนี้$(<file)เป็นเรื่องธรรมดาน้อยมากดังนั้นมันอาจส่งผลให้ WTF มากขึ้น และความเร็วที่เพิ่มขึ้นจากการดำเนินการนี้หากการกำหนดค่าดังกล่าวจะถูกโหลดเข้ากับตัวแปรอาจไม่มีความสำคัญ
MatthewRock

6
@MatthewRock โปรดทราบว่าการปฏิบัติที่เลวร้ายเป็นเรื่องธรรมดาและคุ้นเคย การใช้แมวที่ไร้ประโยชน์เป็นอีกตัวอย่างfor i in $(cat file); do ...หนึ่ง สิ่งเหล่านี้เป็นเรื่องปกติไม่มีเหตุผลที่จะใช้เครื่องมือที่ไม่ดีต่อไป ซึ่งไม่ได้บอกว่าการใช้แมวโดยเฉพาะนี้นั้นแย่เกินไปฉันไม่แน่ใจว่ามีวิธีพกพามากกว่านี้หรือไม่ แค่พูดแบบนั้นธรรมดา & คุ้นเคย! = ดี
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.