$PATH vs. $เส้นทาง
ฉันจำไม่ได้ว่าทำไม แต่นานมาแล้วฉันพบว่าด้วยเหตุผลบางอย่างฉันต้องตั้งค่าตัวแปรทั้งสองนี้ มันไม่มีปัญหาในการทุบตี แต่ตอนนี้ใน zsh เมื่อฉันใส่
export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH
(สิ่งเดียวกับที่ฉันใช้ใน. bashrc) ในการเริ่มต้นฉันได้รับ
/Users/…/.zshenv:export:7: path: inconsistent type for assignment
คำว่า "type" หมายถึงอะไรและ $ path ใช้สำหรับอะไร
คำตอบ
ข้อผิดพลาดที่กล่าวถึง 'type' หมายถึงชนิดข้อมูลของตัวแปรเช่นสตริงหรืออาร์เรย์
$PATHคือสตริง$pathเป็นอาร์เรย์ คุณไม่สามารถกำหนดสตริงไม่ว่าจะตามตัวแปรหรือตามตัวอักษรให้กับตัวแปรที่พิมพ์เพื่อให้มีอาร์เรย์เนื่องจากประเภทไม่ตรงกัน
ความแตกต่างระหว่างตัวแปรทั้งสองคืออะไร: มีขึ้นเพื่อแสดงรายการโฟลเดอร์เดียวกัน แต่อยู่ในรูปแบบที่แตกต่างกัน $PATHที่มี/path/to/one:/path/to/twoจะหมายถึงว่า$pathองค์ประกอบแรกก็คือและเป็นคนที่สองคือ/path/to/one/path/to/two
คุณไม่จำเป็นต้องจัดการตัวแปรทั้งสอง (และการกำหนดตัวแปรหนึ่งให้กับตัวแปรอื่นจะไม่ทำงานเนื่องจากประเภทไม่ตรงกัน) เชลล์ควรจัดการให้คุณ เพียงผนวกกับสตริงและเส้นทางที่คุณควรมีอยู่เพิ่มเป็นองค์ประกอบของ$PATH$path
นี้จะใช้ในการรับมรดกมาจากzsh *cshคุณสามารถดู 'การผูก' ระหว่างสองตัวแปรด้วยtypeset -p PATH.
$path การเป็นอาร์เรย์นั้นสะดวกมาก:
การต่อท้ายและแก้ไขเส้นทางสามารถทำได้ด้วยการดำเนินการของอาร์เรย์เช่นการผนวกแทนการจัดการสตริง (ต้องมีการแยกและการรวมในกรณีที่แก้ไขตรงกลาง)
การวนซ้ำเป็นเพียง
for i ($path) { … }โดยไม่จำเป็นต้องจัดการกับการตั้งค่าของอักขระแยกด้านขวา
PATH คือค่าสเกลาร์ซึ่งเป็นสตริงของเส้นทางการค้นหาที่ต่อเนื่องซึ่งคั่นด้วยเครื่องหมายทวิภาคและพา ธ คืออาร์เรย์ของเส้นทางการค้นหา zshจะซิงค์ทั้งเส้นทางและ PATH คุณไม่จำเป็นต้องทำเช่นนั้น