Eu preciso ir de uma seqüência de caracteres para uma matriz onde cada entrada é cada palavra nessa seqüência. Por exemplo, começando com:
VotePedro="Vote for Pedro"
Eu preciso da matriz:
Vote
For
Pedro
Que eu deveria ser capaz de iterar como:
for i in "${votePedroArray[@]}"
do
## Do something
done
bash
shell-script
string
array
farid99
fonte
fonte
votePedroArray=("Vote" "For" "Pedro")
, você forneceria uma matriz de comprimento 3. E${VotePedro}
é a mesma que$VotePedro
neste contexto. Para acessar elementos individuais da matriz, você pode usar colchetes semelhantes ao que você tinha para o loop for na sua pergunta. por exemplo,${votePedroArray[0]}
é o primeiro elemento da matriz ( "voto" para este exemplo)Quando você deixa uma expansão variável sem aspas, por exemplo
$VotePedro
, as seguintes etapas são executadas:IFS
variável; por padrão, é espaço, tabulação e nova linha.Assim, você pode dividir uma sequência em elementos delimitados por espaço em branco (assumindo o valor padrão de
IFS
) desativando a expansão de curinga e expandindo uma variável cujo valor é essa sequência fora das aspas.Você pode fazer a divisão diretamente no ponto de uso; isso funcionaria mesmo em shells como sh que não possuem matrizes:
fonte
Além de quebrá-lo
$IFS
, você também pode quebrá-lo como quiser:... que permitiria campos nulos separados por espaços em branco.
fonte