ฉันสงสัยว่าคุณพยายามทำสิ่งที่สาม แต่ใช้ไวยากรณ์ผิด ข้อผิดพลาดทั่วไปห้าประการที่อาจทำให้เกิดข้อผิดพลาดเหมือนกับที่คุณเห็นคือ:
=พื้นที่ใช้แทน export NAME valueไม่ถูกต้อง valueถูกตีความแล้วว่าเป็นชื่อของตัวแปรที่ตามมาเพื่อการส่งออก
(สิ่งนี้เกิดขึ้นเพราะexport NAME1 NAME2 เป็นไวยากรณ์ที่ถูกต้องสำหรับการส่งออกตัวแปรหลายตัว)
=วางพื้นที่รอบ ๆ ในภาษาการเขียนโปรแกรมหลายภาษาทั้งที่ถูกต้องและเหมาะสมกว่าสำหรับผู้ประกอบการแผ่นที่มีช่องว่างส่วนใหญ่ แต่เพื่อกำหนดค่าให้กับตัวแปรในเชลล์สคริปต์ (หรือสถานการณ์อื่น ๆ ที่คุณกำลังใช้คำสั่งเชลล์) สิ่งนี้ไม่ได้รับอนุญาต NAME = value(ในexportคำสั่งหรืออย่างอื่น) จะไม่ทำงาน NAME=valueคุณต้องใช้
( export NAME = valueพยายามที่จะส่งออกตัวแปรชื่อNAME, =และvalue. โชคดีที่เรื่องนี้ไม่เคยปรากฏขึ้นจะประสบความสำเร็จอย่างเงียบ ๆ เพราะความพยายามที่จะส่งออกตัวแปรที่เรียกว่า=เป็นข้อผิดพลาดทางไวยากรณ์. ในทางตรงกันข้ามexport NAME= valueจะปรากฏขึ้นเพื่อการทำงาน แต่ไม่ได้กำหนดvalueที่จะNAME--instead ก็มอบหมายให้ว่างเปล่า สตริงที่มีความยาวเป็นศูนย์NAMEและส่งออกและแยกการส่งออกตัวแปรvalueทั้งสองเป็นข้อผิดพลาดทั่วไป)
การแยกส่วนของค่าของตัวแปรด้วยช่องว่าง ตัวแปรสภาพแวดล้อมสามารถมีช่องว่าง แต่ในทางปฏิบัติพวกเขามักไม่ค่อยใช้เป็นตัวคั่นฟิลด์ในตัวแปรสภาพแวดล้อม เมื่อตัวแปรเดียวมีหลายเส้นทางโดยเจตนาจะ:ใช้เพื่อแยกพวกเขา
ไม่ต้องระบุช่องว่างเมื่อกำหนดให้กับตัวแปร บางครั้งค่าของตัวแปรสภาพแวดล้อมควรจะมีช่องว่าง ตัวอย่างเช่นอาจเป็นชื่อของไดเรกทอรีที่มีช่องว่าง ในกรณีนี้จำเป็นต้องอ้างอิงช่องว่างใด ๆ
\วิธีหนึ่งที่จะทำเช่นนี้จะนำหน้าพวกเขาด้วย ดูฉันจะป้องกันวงเล็บที่ส่งผ่านไปยังคำสั่ง cd ได้อย่างไร และไม่สามารถลบไฟล์สำหรับข้อมูลเกี่ยวกับวิธีอื่น ๆ ได้ - วิธีการที่นำเสนอในคำตอบจะมีผลแม้ว่าจะไม่มีคำถามใดเกี่ยวกับการกำหนดให้กับตัวแปรสภาพแวดล้อมโดยเฉพาะ
ตัวอย่างเช่นต่อไปนี้เป็นวิธีการส่งออกตัวแปรสภาพแวดล้อมSILLYPATHด้วยค่า/home/ek/silly name/bin:
export SILLYPATH=/home/ek/silly\ name/bin
export SILLYPATH='/home/ek/silly name/bin'
export SILLYPATH="/home/ek/silly name/bin"
บ่อยครั้งเมื่อโฟลเดอร์ที่คุณต้องใช้ในเชลล์หรือกำหนดให้กับตัวแปรสภาพแวดล้อมที่ใช้กันอย่างแพร่หลายมีช่องว่างมันอาจได้รับประโยชน์จากการเปลี่ยนชื่อ (แต่บางครั้งก็ใช้งานไม่ได้หรือไม่พึงประสงค์)
การกำหนดและ / หรือการส่งออกตัวแปรเมื่อไม่ต้องทำอะไรเลย นี่เป็นข้อผิดพลาดของเมตา ปัญหาทางเทคนิคที่เฉพาะเจาะจงมักจะเป็นหนึ่งในข้างต้น แต่การแก้ปัญหาคือการกำจัดสายที่กระทำผิดหรือบางส่วนของมันมากกว่าที่จะแก้ไข อย่าซี้ซั้วเอารหัสจาก.bashrcของหลักสูตร แต่exportอาจมีการเพิ่มอาจตั้งใจหรืออาจมีรหัสมากกว่าตั้งใจ ตัวอย่างเช่นสมมติว่าคุณตั้งใจจะเขียน:
echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc
ที่จะผนวกเข้ากับ.bashrcแหล่งที่มานั้นอีกครั้ง แต่สมมติว่าคุณเขียนแทน:
echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc # WRONG!
จากนั้นexportคำสั่งของคุณจะไม่เพียง แต่ส่งออกมูลค่าเพิ่มของPATHแต่จะพยายามส่งออกตัวแปรชื่อ.และซึ่งไม่ใช่สิ่งที่คุณต้องการ เนื่องจากมีอักขระที่ห้ามใช้ในชื่อตัวแปรดังนั้นคุณจะได้รับข้อผิดพลาดทุกครั้งที่คุณเริ่มเชลล์ bash แบบโต้ตอบใหม่/home/your-username/.bashrc
เพื่อหลีกเลี่ยงปัญหานี้ผมขอแนะนำให้แก้ไข.bashrcในโปรแกรมแก้ไข (เช่น, nano ~/.bashrc, gedit ~/.bashrc) >>แทนที่จะเปลี่ยนเส้นทางออกไปยังจุดสิ้นสุดของมันด้วย