配列から文字列を抽出できる bash スクリプトを作成するにはどうすればよいですか?

配列から文字列を抽出できる bash スクリプトを作成するにはどうすればよいですか?

ジレンマに陥っています。配列から各文字列を抽出し、その結果を処理する Linux bash スクリプトを作成しようとしています。

IE

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

文字列にはスペースが含まれていることを念頭に置き、各文字列を抽出するために for ループを使用するにはどうすればよいでしょうか。つまり、文字列全体、つまり「文字列 3」を抽出し、その fo ループ内で結果を処理する必要があります。

例えば

#! /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.

BASIC では簡単です:

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

答え1

構文は

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

元。

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

を二重引用符で囲むことで、"${arr[@]}"空白 (または、より一般的には、現在の の文字IFS)を含む要素を正しく処理できるようになります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.

関連情報