¿Cómo creo un script bash que pueda extraer cadenas de una matriz?

¿Cómo creo un script bash que pueda extraer cadenas de una matriz?

Tengo un dilema: estoy intentando escribir un script bash de Linux para que extraiga cada cadena de una matriz y procese el resultado.

ES DECIR

var=("string one" "string two" "string three")

¿Cómo usaría un bucle for para extraer cada cadena, teniendo en cuenta que las cadenas tienen espacios, por lo que necesitaría extraer la cadena completa, es decir, la "cadena tres", luego, dentro de ese bucle fo, procesaría el resultado?

P.EJ

#! /bin/bash

clear
SimName=("Welcome" "Testing Region")
echo
echo
echo
echo
#cd dreamgrid/Opensim/bin

# for loop goes here

# processing below
#screen -S "$SimName" -d -m mono OpenSim.exe -inidirectory="Regions/$SimName"  # Needs altering to process each string
#sleep 2
#screen -r "$SimName"   # Needs chaging to show each string in turn.

# echo $SimName[1]   # something test to it with, but needs changing to show each string in turn.

En BASIC es simple:

DIM A$(2)
A$(1) = "string one"
A$(2) = "string two"
FOR A=1 to 2
C$=A$(A)
FOR DL=1 TO 2000
NEXT
PRINT C$
NEXT

Respuesta1

La sintaxis es

for val in "${arr[@]}"; do 
  # something with "$val"
done

ex.

$ arr=("string one" "string two" "string three")
$ for val in "${arr[@]}"; do printf '%s\n' "$val"; done
string one
string two
string three

Las comillas dobles de "${arr[@]}"es lo que hace que maneje correctamente los elementos que contienen espacios en blanco (o, más generalmente, caracteres del actual IFS). De man bash:

                                                                       If
   the word is double-quoted, ${name[*]} expands to a single word with the
   value of each array member separated by the first character of the  IFS
   special variable, and ${name[@]} expands each element of name to a sep‐
   arate word.

información relacionada