$PATH vs. $sentiero
Non ricordo perché, ma molto tempo fa ho scoperto che per qualche motivo avevo bisogno di impostare entrambe queste variabili. Non ha causato problemi in bash, ma ora in zsh, quando ho inserito
export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH
(la stessa cosa che ho usato in .bashrc) nella mia inizializzazione, ottengo
/Users/…/.zshenv:export:7: path: inconsistent type for assignment
Cosa intendono per "tipo" e per cosa viene utilizzato $ path?
Risposte
L'errore che menziona "tipo" si riferisce al tipo di dati della variabile, come stringa o matrice.
$PATHè una stringa, $pathè un array. Non è possibile assegnare una stringa, sia per variabile che per letterale, a una variabile tipizzata per contenere un array, poiché i tipi non corrispondono.
Per quanto riguarda la differenza tra le due variabili: hanno lo scopo di rappresentare lo stesso elenco di cartelle, ma in formati diversi. $PATHcontenere /path/to/one:/path/to/twosignificherebbe che $pathil primo elemento è /path/to/onee il secondo è /path/to/two.
Non dovresti aver bisogno di gestire le due variabili (e assegnarne una all'altra non funzionerà poiché i tipi non corrispondono) - la shell dovrebbe gestirlo per te. $PATHAggiungi semplicemente alla stringa e il percorso che aggiungi dovrebbe esistere come elemento di $path.
Questo vale solo in zsh, ereditato da *csh. Puoi vedere il "legame" tra le due variabili con typeset -p PATH.
$path essere un array è davvero conveniente:
l'aggiunta e la modifica del percorso possono essere eseguite con operazioni sugli array come l'aggiunta piuttosto che la manipolazione di stringhe (richiedendo la divisione e l'unione nel caso di modifica da qualche parte nel mezzo).
il looping è semplicemente
for i ($path) { … }senza bisogno di occuparsi dell'impostazione del carattere di divisione destro.
PATH è un valore scalare: una stringa continua di percorsi di ricerca separati da due punti e path è un array di percorsi di ricerca. zshsincronizzerà sia il percorso che il PERCORSO. Non è necessario che tu lo faccia.