Impresión de elementos de un array línea por línea
En este paso, nos centraremos en el tema principal de nuestro laboratorio: imprimir los elementos de un array línea por línea. Exploraremos diferentes métodos para lograr esto en Bash.
Método 1: Utilizando un bucle for
La forma más directa de imprimir los elementos de un array línea por línea es utilizando un bucle for:
- Crea un nuevo archivo llamado
print_array_loop.sh:
#!/bin/bash
## Create a sample array
planets=("Mercury" "Venus" "Earth" "Mars" "Jupiter" "Saturn" "Uranus" "Neptune")
echo "Printing planets using a for loop:"
for planet in "${planets[@]}"; do
echo "$planet"
done
- Guarda el archivo y hazlo ejecutable:
chmod +x /home/labex/project/print_array_loop.sh
- Ejecuta el script:
./print_array_loop.sh
La salida mostrará cada planeta en una línea separada:
Printing planets using a for loop:
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Método 2: Utilizando el comando printf
El comando printf suele ser más eficiente que utilizar un bucle con echo:
- Crea un nuevo archivo llamado
print_array_printf.sh:
#!/bin/bash
## Create a sample array
planets=("Mercury" "Venus" "Earth" "Mars" "Jupiter" "Saturn" "Uranus" "Neptune")
echo "Printing planets using printf:"
printf "%s\n" "${planets[@]}"
- Guarda el archivo y hazlo ejecutable:
chmod +x /home/labex/project/print_array_printf.sh
- Ejecuta el script:
./print_array_printf.sh
La salida será la misma que en el método anterior:
Printing planets using printf:
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Método 3: Utilizando la variable IFS
La variable Internal Field Separator (IFS, Separador de Campos Interno) se puede utilizar para controlar cómo se imprimen los elementos de un array:
- Crea un nuevo archivo llamado
print_array_ifs.sh:
#!/bin/bash
## Create a sample array
planets=("Mercury" "Venus" "Earth" "Mars" "Jupiter" "Saturn" "Uranus" "Neptune")
echo "Printing planets using IFS:"
## Temporarily change IFS to newline
old_IFS="$IFS"
IFS=$'\n'
echo "${planets[*]}" ## Note: using * instead of @ with IFS
IFS="$old_IFS" ## Restore original IFS
- Guarda el archivo y hazlo ejecutable:
chmod +x /home/labex/project/print_array_ifs.sh
- Ejecuta el script:
./print_array_ifs.sh
La salida mostrará una vez más cada planeta en una línea separada:
Printing planets using IFS:
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Método 4: Combinación de múltiples técnicas
Combinemos estas técnicas en un ejemplo más completo:
- Crea un nuevo archivo llamado
print_array_combined.sh:
#!/bin/bash
## Create a sample array
planets=("Mercury" "Venus" "Earth" "Mars" "Jupiter" "Saturn" "Uranus" "Neptune")
echo "Using a for loop with index:"
for i in "${!planets[@]}"; do
echo "Planet $i: ${planets[$i]}"
done
echo -e "\nUsing printf with formatting:"
printf "Planet: %s - %d letters\n" "${planets[@]}" "${#planets[@]}"
echo -e "\nSorted planets:"
printf "%s\n" "${planets[@]}" | sort
- Guarda el archivo y hazlo ejecutable:
chmod +x /home/labex/project/print_array_combined.sh
- Ejecuta el script:
./print_array_combined.sh
La salida mostrará diferentes formas de formatear e imprimir los elementos de un array:
Using a for loop with index:
Planet 0: Mercury
Planet 1: Venus
Planet 2: Earth
Planet 3: Mars
Planet 4: Jupiter
Planet 5: Saturn
Planet 6: Uranus
Planet 7: Neptune
Using printf with formatting:
Planet: Mercury - 8 letters
Planet: Venus - 5 letters
Planet: Earth - 5 letters
Planet: Mars - 4 letters
Planet: Jupiter - 7 letters
Planet: Saturn - 6 letters
Planet: Uranus - 7 letters
Planet: Neptune - 7 letters
Sorted planets:
Earth
Jupiter
Mars
Mercury
Neptune
Saturn
Uranus
Venus
Cada uno de estos métodos tiene sus ventajas:
- El bucle for es más legible para los principiantes.
- El método de printf es más eficiente para arrays grandes.
- El método de IFS es compacto pero puede ser menos intuitivo.
- Las técnicas combinadas pueden proporcionar opciones de formato más ricas.
Elige el método que mejor se adapte a tu caso de uso específico y a tu estilo de codificación.