$PATH vs. $con đường
Tôi không thể nhớ tại sao, nhưng cách đây đã lâu, tôi thấy rằng vì lý do nào đó, tôi cần đặt cả hai biến này. Nó không gây ra vấn đề gì trong bash, nhưng bây giờ trong zsh, khi tôi đặt
export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH
(cùng một thứ tôi đã sử dụng trong .bashrc) khi khởi tạo, tôi nhận được
/Users/…/.zshenv:export:7: path: inconsistent type for assignment
Chúng có nghĩa là gì bởi "loại" và $ path được sử dụng để làm gì?
Trả lời
Lỗi đề cập đến 'kiểu' đề cập đến kiểu dữ liệu của biến, chẳng hạn như chuỗi hoặc mảng.
$PATHlà một chuỗi, $pathlà một mảng. Bạn không thể gán một chuỗi, cho dù theo biến hay theo nghĩa đen, cho một biến được nhập để chứa một mảng, vì các kiểu không khớp.
Đối với sự khác biệt giữa hai biến là gì: chúng có nghĩa là đại diện cho cùng một danh sách các thư mục, nhưng ở các định dạng khác nhau. $PATHchứa /path/to/one:/path/to/twosẽ có nghĩa là $pathphần tử đầu tiên là /path/to/onevà phần tử thứ hai là /path/to/two.
Bạn không cần phải quản lý hai biến (và việc gán một biến này cho biến kia sẽ không hoạt động vì các kiểu không khớp) - shell sẽ xử lý nó cho bạn. Chỉ cần thêm vào $PATHchuỗi và đường dẫn bạn thêm phải tồn tại dưới dạng một phần tử $path.
Điều này chỉ áp dụng trong zsh, kế thừa từ *csh. Bạn có thể thấy 'ràng buộc' giữa hai biến với typeset -p PATH.
$path là một mảng thực sự thuận tiện:
nối và thay đổi đường dẫn có thể được thực hiện với các thao tác mảng như nối thêm chứ không phải thao tác chuỗi (yêu cầu tách và nối trong trường hợp chỉnh sửa ở đâu đó ở giữa).
lặp lại đơn giản là
for i ($path) { … }không cần phải xử lý việc thiết lập ký tự phân chia phù hợp.
PATH là một giá trị vô hướng - một chuỗi liên tục các đường dẫn tìm kiếm được phân tách bằng dấu hai chấm và đường dẫn là một mảng các đường dẫn tìm kiếm. zshsẽ đồng bộ hóa cả đường dẫn và PATH. Bạn không cần phải làm như vậy.