Converter string em array de caracteres [RESOLVIDO]

1. Converter string em array de caracteres [RESOLVIDO]

Luis Meirelles
luis_gustavo

(usa Kali)

Enviado em 17/06/2018 - 02:38h

Olá, gostaria de saber um método de pegar todos os argumentos que a pessoa inserir quando a mesma executar o script, e transformar a string resultante em uma array onde cada índice contém um, e apenas um caractere, com os espaços incluídos. Por exemplo:

Se eu digitar:

$ ./script.sh luis gustavo 


Quero que crie uma array como se eu fizesse assim:

vetor=("l" "u" "i" "s" " " "g" "u" "s" "t" "a" "v" "o") 


Pois preciso tratar cada caractere individualmente, e a pessoa pode digitar números, letras, espaços e pontuações.

Alguém pode me ajudar por favor??


  


2. MELHOR RESPOSTA


oxidante

(usa Debian)

Enviado em 17/06/2018 - 12:41h


#!/bin/bash

# pega o argumento passado e poe na var $args
args="$@"

vetor=()

# copia cada char do argumento para dentro da var $vetor
for ((i=0;i<${#args};i++)); do
vetor[$i]="${args:i:1}"
done

# exibe os elementos do $vetor
for ((i=0;i<${#vetor[@]};i++));do
echo "${vetor[$i]}"
done



3. Re: Converter string em array de caracteres [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 17/06/2018 - 11:31h

luis_gustavo escreveu:
Se eu digitar:
$ ./script.sh luis gustavo 



campeão, a princípio se vc digitar isso aí vai dar comando inválido.
A chamada da string não pode ser feita através de um "read" não ???

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



4. Re: Converter string em array de caracteres [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/06/2018 - 13:45h

luis_gustavo escreveu:

Olá, gostaria de saber um método de pegar todos os argumentos que a pessoa inserir quando a mesma executar o script, e transformar a string resultante em uma array onde cada índice contém um, e apenas um caractere, com os espaços incluídos. Por exemplo:

Se eu digitar:

$ ./script.sh luis gustavo 


Quero que crie uma array como se eu fizesse assim:

vetor=("l" "u" "i" "s" " " "g" "u" "s" "t" "a" "v" "o") 

Pois preciso tratar cada caractere individualmente, e a pessoa pode digitar números, letras, espaços e pontuações.
Alguém pode me ajudar por favor??

Boa tarde.
Estou sem linux agora, portanto não tenho como testar...
Mas,teste o seguinte comando
Vetor=($(sed 's/ //g' <<< "$@"|sed 's/./& /g'))
Marcelo Oliver


5. Re: Converter string em array de caracteres [RESOLVIDO]


oxidante

(usa Debian)

Enviado em 17/06/2018 - 14:10h

msoliver escreveu:
Boa tarde.
Estou sem linux agora, portanto não tenho como testar...
Mas,teste o seguinte comando
Vetor=($(sed 's/ //g' <<< "$@"|sed 's/./& /g'))
Marcelo Oliver


Boa tarde Marcelo, o teu sed tá quase 100%, só falta pegar os espaços! Podes corrigir?


6. Re: Converter string em array de caracteres [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/06/2018 - 17:17h

oxidante escreveu:

msoliver escreveu:
Boa tarde.
Estou sem linux agora, portanto não tenho como testar...
Mas,teste o seguinte comando
Vetor=($(sed 's/ //g' <<< "$@"|sed 's/./& /g'))
Marcelo Oliver


Boa tarde Marcelo, o teu sed tá quase 100%, só falta pegar os espaços! Podes corrigir?

O primero sed é quem tira os espaços...

Segue:
Vetor=($(sed 's/./\"&\" /g' <<< "$@"))
Marcelo Oliver


7. Re: Converter string em array de caracteres [RESOLVIDO]


oxidante

(usa Debian)

Enviado em 17/06/2018 - 17:45h

msoliver escreveu:
O primero sed é quem tira os espaços...

Segue:
Vetor=($(sed 's/./\"&\" /g' <<< "$@"))
Marcelo Oliver

Eu tinha testado sem o primeiro sed e tb não pegava os espaços.
Com esse seu último código a var vetor fica com 7 elementos em vez de 5 usando a string "a b c".
Output:

./teste.sh a b c
"a"
"
"
"b"
"
"
"c"



8. Re: Converter string em array de caracteres [RESOLVIDO]

Luis Meirelles
luis_gustavo

(usa Kali)

Enviado em 17/06/2018 - 20:50h

oxidante escreveu:


#!/bin/bash

# pega o argumento passado e poe na var $args
args="$@"

vetor=()

# copia cada char do argumento para dentro da var $vetor
for ((i=0;i<${#args};i++)); do
vetor[$i]="${args:i:1}"
done

# exibe os elementos do $vetor
for ((i=0;i<${#vetor[@]};i++));do
echo "${vetor[$i]}"
done



Oxidante, muito obrigado, isso era EXATAMENTE o que eu precisava


9. Re: Converter string em array de caracteres [RESOLVIDO]

Luis Meirelles
luis_gustavo

(usa Kali)

Enviado em 17/06/2018 - 20:53h

Olá, Muito obrigado a TODOS
Todas as soluções foram muito bem boladas, mas a que eu mais me identifiquei foi com a solução do Oxidante. Mesmo assim todos me ajudaram,tenho certeza de que todas as soluções foram muito úteis