Arreglos y bucles en zsh


9

Estoy tratando de aprender bucles y manipulación de matrices en zsh.

Digamos que tengo dos matrices en zsh con el mismo número desconocido de elementos y cada uno de ellos contiene una lista de rutas, por ejemplo

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

Me gustaría iterar a través de ambas matrices simultáneamente con un índice común, para que pueda hacer algo como:

cd $LOCAL_PATH_i
hg pull $REMOTE_PATH_i

en cada iteración ¿Cómo puedo hacer esto en zsh?

Además, he buscado control de bucle y matrices en la documentación de zsh, pero tuve poco éxito. ¿Hay un buen tutorial que presente los conceptos básicos de bucles , matrices , etc. en zsh? ¿Algo para personas con poca experiencia en bash o scripts de shell pero con experiencia en programación?

Respuestas:


13

La Sección 15.2.1 "Subíndices de matriz" dice que las matrices pueden indexarse ​​con [exp](donde expes una expresión numérica) y que los elementos comienzan en el índice 1 (0 si KSH_ARRAYSestá configurado).

La Sección 14.3 "Expansión de parámetros" dice que la sintaxis ${#array_name}se expandirá al número de elementos de una matriz.

Sección 6.3 “Complex Comandos” da la sintaxis de una numérico forbucle (como en C):
for (( initExpr ; testExpr ; stepExpr )) do … done.

Poniéndolos a todos juntos:

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

O, si está usando KSH_ARRAYS, entonces esto:

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

El uso KSH_ARRAYShace que las matrices comiencen con el índice 0, requiere el uso de llaves para las expresiones de la matriz e interpreta $arraycomo $array[0](que requiere un cambio en la expresión de longitud de la matriz). Los cambios de sintaxis requeridos por KSH_ARRAYtambién funcionarán sin KSH_ARRAY, pero aún debe ajustar la lógica para el rango de índice diferente (1 a N versus 0 a N-1).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.