Estou com um dilema: estou tentando escrever um script bash do Linux para extrair cada string de um array e processar o resultado.
Ou seja
var=("string one" "string two" "string three")
Como eu usaria um loop for para extrair cada string, tendo em mente que as strings têm espaços, então eu precisaria extrair a string inteira, ou seja, "string três", então dentro desse loop fo, ele processaria o resultado.
POR EXEMPLO
#! /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.
No BASIC é simples:
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
Responder1
A sintaxe é
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
A aspas duplas de "${arr[@]}"
é o que faz com que ele lide corretamente com elementos que contêm espaços em branco (ou, mais geralmente, caracteres do atual 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.