문자열에서 각 항목이 해당 문자열의 각 단어 인 배열로 이동해야합니다. 예를 들어 다음과 같이 시작하십시오.
VotePedro="Vote for Pedro"
배열이 필요합니다.
Vote
For
Pedro
그러면 다음과 같이 반복 할 수 있어야합니다.
for i in "${votePedroArray[@]}"
do
## Do something
done
답변
VotePedro="Vote for Pedro"
votePedroArray=(${VotePedro})
답변
예를 들어 변수 확장을 인용 부호없이 그대로두면 $VotePedro
다음 단계가 수행됩니다.
- 변수의 값을 찾으십시오.
- 각 공백 블록의 값을 문자열 목록으로 분할하십시오. 보다 일반적으로 구분 기호는
IFS
변수 값의 문자입니다 . 기본적으로 공백, 탭 및 줄 바꿈입니다. - 목록의 각 요소를 와일드 카드 패턴으로 해석하십시오. 패턴이 일부 파일과 일치하면 각 요소에 대해 해당 요소를 일치하는 파일 이름 목록으로 바꿉니다.
따라서 IFS
와일드 카드 확장을 끄고 값이 따옴표 이외의 문자열 인 변수를 확장 하여 문자열을 공백으로 구분 된 요소 (기본값 인 ) 로 분할 할 수 있습니다 .
VotePedro="Vote for Pedro"
set -f
votePedroArray=($VotePedro)
set +f
for i in "${votePedroArray[@]}"; do …
사용 시점에서 직접 분할을 수행 할 수 있습니다. 이것은 배열이없는 sh와 같은 쉘에서도 작동합니다.
VotePedro="Vote for Pedro"
set -f
for i in ${votePedro}; do
set +f
…
done
set +f
답변
깨는 것 외에도 $IFS
원하는대로 깨뜨릴 수 있습니다.
set ''
while case $var in
(* *) ;; (*)
! a=("$var$@")
esac
do set '' "${var##* }$@"
var=${var% "$2"}
done
… 공백으로 구분 된 null 필드를 허용합니다.