$PATH vs. $เส้นทาง

Sep 06 2020

ฉันจำไม่ได้ว่าทำไม แต่นานมาแล้วฉันพบว่าด้วยเหตุผลบางอย่างฉันต้องตั้งค่าตัวแปรทั้งสองนี้ มันไม่มีปัญหาในการทุบตี แต่ตอนนี้ใน 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 ใช้สำหรับอะไร

คำตอบ

8 grg Sep 06 2020 at 04:09

ข้อผิดพลาดที่กล่าวถึง '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) { … }โดยไม่จำเป็นต้องจัดการกับการตั้งค่าของอักขระแยกด้านขวา

3 fd0 Sep 06 2020 at 04:04

PATH คือค่าสเกลาร์ซึ่งเป็นสตริงของเส้นทางการค้นหาที่ต่อเนื่องซึ่งคั่นด้วยเครื่องหมายทวิภาคและพา ธ คืออาร์เรย์ของเส้นทางการค้นหา zshจะซิงค์ทั้งเส้นทางและ PATH คุณไม่จำเป็นต้องทำเช่นนั้น