Ich stehe vor einem Dilemma: Ich versuche, ein Linux-Bash-Skript zu schreiben, das jeden String aus einem Array extrahiert und das Ergebnis verarbeitet.
IE
var=("string one" "string two" "string three")
Wie würde ich eine For-Schleife verwenden, um jeden String zu extrahieren, wobei ich bedenken muss, dass die Strings Leerzeichen enthalten. Daher müsste ich den gesamten String extrahieren, also „String drei“, und dann würde das Ergebnis innerhalb dieser For-Schleife verarbeitet.
Z.B
#! /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.
In BASIC ist es einfach:
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
Antwort1
Die Syntax ist
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
Die doppelten Anführungszeichen "${arr[@]}"
sorgen dafür, dass Elemente mit Leerzeichen (oder allgemeiner Zeichen aus dem aktuellen IFS
) korrekt verarbeitet werden. Von 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.