배열에서 문자열을 추출할 수 있는 bash 스크립트를 어떻게 생성합니까?

배열에서 문자열을 추출할 수 있는 bash 스크립트를 어떻게 생성합니까?

딜레마에 빠졌습니다. 배열에서 각 문자열을 추출하고 결과를 처리하도록 Linux bash 스크립트를 작성하려고 합니다.

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.

관련 정보