$PATH vs. $jalan

Sep 06 2020

Saya tidak dapat mengingat mengapa, tetapi dahulu kala, saya menemukan bahwa untuk beberapa alasan, saya perlu menetapkan kedua variabel ini. Itu tidak menyebabkan masalah di bash, tapi sekarang di zsh, saat saya pasang

export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH

(Hal yang sama yang saya gunakan di .bashrc) dalam inisialisasi saya, saya mengerti

/Users/…/.zshenv:export:7: path: inconsistent type for assignment

Apa yang mereka maksud dengan "type", dan untuk apa $ path digunakan?

Jawaban

8 grg Sep 06 2020 at 04:09

Kesalahan menyebutkan 'type' mengacu pada tipe data variabel, seperti string atau array.

$PATHadalah string, $pathadalah array. Anda tidak dapat menetapkan string, baik dengan variabel atau literal, ke variabel yang diketik untuk memuat larik, karena jenisnya tidak cocok.

Adapun perbedaan antara kedua variabel ini: mereka dimaksudkan untuk mewakili daftar folder yang sama, tetapi dalam format yang berbeda. $PATHmengandung /path/to/one:/path/to/twoakan berarti bahwa $pathelemen pertama adalah /path/to/onedan yang kedua adalah /path/to/two.

Anda tidak perlu mengelola dua variabel (dan menetapkan satu variabel ke variabel lain tidak akan berfungsi karena jenisnya tidak cocok) - shell harus menanganinya untuk Anda. Cukup tambahkan ke $PATHstring dan jalur yang Anda tambahkan harus ada sebagai elemen $path.

Ini hanya berlaku di zsh, diwarisi dari *csh. Anda dapat melihat 'pengikatan' antara dua variabel dengan typeset -p PATH.

$path menjadi sebuah array sangat nyaman:

  • menambahkan dan mengubah jalur dapat dilakukan dengan operasi array seperti menambahkan daripada manipulasi string (memerlukan pemisahan dan penggabungan dalam kasus pengeditan di suatu tempat di tengah).

  • perulangan hanya for i ($path) { … }tanpa perlu berurusan dengan pengaturan karakter split yang tepat.

3 fd0 Sep 06 2020 at 04:04

PATH adalah nilai skalar- string jalur pencarian kontinu yang dipisahkan oleh titik dua dan jalur adalah larik jalur pencarian. zshakan menyinkronkan jalur dan PATH. Anda tidak perlu melakukannya.