GNU/Linux >> Tutoriales Linux >  >> Linux

Comportamiento de Arrays en bash scripting y zsh shell (¿Índice de inicio 0 o 1?)

TL;DR:

  • bash la indexación de matrices comienza en 0 (siempre)
  • zsh la indexación de matrices comienza en 1 (a menos que la opción KSH_ARRAYS está configurado)

Para obtener siempre un comportamiento coherente, utilice:

${array[@]:offset:length}

Explicación

Para código que funciona en ambos bash y zsh , necesitas usar el offset:length sintaxis en lugar de [subscript] sintaxis.

Incluso para zsh -solo código, aún deberá hacer esto (o usar emulate -LR zsh ) desde zsh La base de subíndice de la matriz está determinada por el KSH_ARRAYS opción.

Por ejemplo, para hacer referencia al primer elemento de una matriz:

${array[@]:0:1}

Aquí, array[@] son todos los elementos, 0 es el desplazamiento (que siempre está basado en 0) y 1 es el número de elementos deseado.


Las matrices en Bash se indexan desde cero y en zsh se indexan desde uno.

Pero no necesita los índices para un caso de uso simple como este. Bucle sobre ${array[@]} funciona en ambos:

files=(file*)
for f in "${files[@]}"; do
    echo "$f"
done

En zsh también podrías usar $files en lugar de "${files[@]}" , pero eso no funciona en Bash. (Y existe la ligera diferencia de que elimina elementos de matriz vacíos, pero no obtendrá ninguno de los nombres de archivo).

Además, no uses $(ls file*) , se romperá si tiene nombres de archivo con espacios (consulte WordSpliting en BashGuide) y, para empezar, es completamente inútil.

El shell es perfectamente capaz de generar nombres de archivo por sí mismo. Eso es realmente lo que sucederá allí, el shell encuentra todos los archivos con nombres que coincidan con file* , los pasa a ls y ls simplemente los imprime de nuevo para que el shell los lea y los procese.


Linux
  1. Cómo programar con Bash:Sintaxis y herramientas

  2. Matrices bash con ejemplos

  3. Buscar y reemplazar en secuencias de comandos de shell

  4. bash:establece la variable env de la matriz y falla la desreferenciación de cualquier script de shell

  5. Arrays bash y subíndices negativos, ¿sí o no?

Bash Scripting:matriz indexada explicada con ejemplos

Cómo instalar y usar ZSH Shell en Linux

Instale Awesome Zsh y conviértalo en el shell predeterminado

Bash Beginner Series #4:Uso de arreglos en Bash

Shell Scripting Parte 4:entrada, salida y redirección

Bash Scripting:cómo generar y formatear texto en Linux Shell