Wie erstelle ich ein Bash-Skript, das Zeichenfolgen aus einem Array extrahieren kann?

Wie erstelle ich ein Bash-Skript, das Zeichenfolgen aus einem Array extrahieren kann?

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.

verwandte Informationen