Matrici e loop in zsh


9

Sto cercando di imparare loop e manipolazione di array in zsh.

Supponiamo di avere due matrici in zsh con lo stesso numero sconosciuto di elementi e ognuna contenente un elenco di percorsi, ad es

LOCAL_ARRAY=($LOCAL_PATH_1 $LOCAL_PATH_2 $LOCAL_PATH_3)
REMOTE_ARRAY=($REMOTE_PATH_1 $REMOTE_PATH_2 $REMOTE_PATH_3)

Vorrei scorrere contemporaneamente entrambe le matrici con un indice comune, in modo da poter fare qualcosa del tipo:

cd $LOCAL_PATH_i
hg pull $REMOTE_PATH_i

in ogni iterazione. Come posso farlo in zsh?

Inoltre, ho cercato il controllo di loop e gli array nella documentazione di zsh ma ho avuto scarso successo. Esiste un buon tutorial che introduce le basi di loop , array , ecc. In zsh? Qualcosa per le persone con poca esperienza bash o shell-scripting ma con un background nella programmazione?

Risposte:


13

La Sezione 15.2.1 "Sottoscrizioni di array" dice che gli array possono essere indicizzati con [exp](dove si exptrova un'espressione numerica) e che gli elementi iniziano con l'indice 1 (0 se KSH_ARRAYSimpostato).

La sezione 14.3 "Espansione dei parametri" dice che la sintassi ${#array_name}si espanderà al numero di elementi di un array.

Sezione 6.3 “Complesso comandi” dà la sintassi per un numerica forciclo (come in C):
for (( initExpr ; testExpr ; stepExpr )) do … done.

Mettendoli tutti insieme:

for (( i = 1; i <= $#LOCAL_PATH; i++ )) do
    ( # subshell to contain the effect of the chdir
        cd $LOCAL_PATH[i]
        hg pull $REMOTE_PATH[i]
    )
done

Oppure, se si utilizza KSH_ARRAYS, quindi questo:

for (( i = 0; i < ${#LOCAL_PATH[@]}; i++ )) do
    ( # subshell to contain the effect of the chdir
        cd ${LOCAL_PATH[i]}
        hg pull ${REMOTE_PATH[i]}
    )
done

L'uso di KSH_ARRAYSfa iniziare le matrici con l'indice 0, richiede l'uso di parentesi graffe per le espressioni di matrice e interpreta $arraycome $array[0](che richiede una modifica dell'espressione di lunghezza della matrice). Anche le modifiche alla sintassi richieste da KSH_ARRAYfunzioneranno senza KSH_ARRAY, ma è comunque necessario regolare la logica per il diverso intervallo di indici (da 1 a N contro 0 a N-1).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.