文字列内の各項目は、その文字列の各単語である配列に移動する必要があります。たとえば、次のように起動します。
VotePedro="Vote for Pedro"
配列が必要です。
Vote
For
Pedro
その後、次のように繰り返すことができます。
for i in "${votePedroArray[@]}"
do
## Do something
done
答え1
VotePedro="Vote for Pedro"
votePedroArray=(${VotePedro})
説明する:
配列は通常括弧を使用して宣言されます。たとえば、votePedroArray=("Vote" "For" "Pedro")
長さ3の配列があります。${VotePedro}
この場合、$ VotePedroと同じです。個々の配列要素にアクセスするには、質問のforループに似た括弧を使用できます。例:${votePedroArray[0]}
配列の最初の要素(この場合は「vote」)
答え2
他のほとんどのBourne様シェルでは、bash
変数拡張を引用符なしで置くと(たとえば)、次の$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
答え3
壊すだけでなく、$IFS
好きなところどこでも壊すことができます。
set ''
while case $var in
(* *) ;; (*)
! a=("$var$@")
esac
do set '' "${var##* }$@"
var=${var% "$2"}
done
...空白で区切られた空のフィールドも許可されます。