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.