Eu quero dividir 'hello'
em h e l l o
em uma matriz usando apenas bash, eu poderia fazê-lo em sed com sed 's/./& /g'
mas eu quero saber como dividir uma string em um array em Bash quando eu não sei o que o delimitador seria, ou o delimitador é qualquer caractere único. Acho que não posso usar ${i// /}
sem criatividade, porque o delimitador é desconhecido e não acho que essa expressão aceite regex. Eu tentei usar BASH_REMATCH com [[string = ~ ([az].). *]] Mas não funciona como eu esperava. Qual é a maneira correta de usar apenas o bash para realizar um string.split()
tipo de comportamento? A razão é que eu estou tentando escrever o utilitário rev em todos os bash:
while read data; do
word=($(echo $data|tr ' ' '_'|sed 's/./& /g'))
new=()
i=$((${#word[@]} - 1))
while [[ $i -ge 0 ]]; do
new+=(${word[$i]})
(( i-- ))
done
echo ${new[@]}|tr -d ' '|tr '_' ' '
done
Mas eu usei tr e sed, quero saber como fazer a divisão corretamente e depois vou consertar tudo. Apenas por diversão.
[[ $string =~ ${string//?/(.)} ]]
definidoBASH_REMATCH[]
como necessário, veja minha resposta à pergunta a que Peter Mortensen vincula para obter uma explicação.Respostas:
Resultado:
ou (observe os comentários)
Resultado:
fonte
while read -N 1 c; do a+=("$c"); done <<< "$s"
. O-N
permite ler até mesmo novas linhas, e as aspas("$c")
evitam a expansão do nome do caminho (e alguns outros problemas).while read -N 1 c; do a+=("$c"); done <<< "$s"x
e, em seguida, apagar a última nova linha ea x acrescentou:unset a[${#a[@]}-1]; unset a[${#a[@]}-1]
.Para dividir a string em uma matriz de caracteres, com delimitador nulo, você pode:
Com delimitador diferente de nulo, você pode:
fonte
IFS
pode ser definido, então você pode apenas fazer:IFS=',' arr=($str)
.Apenas por diversão (e outras conchas) outra variante:
E verifique
irá imprimir
fonte
Método 1:
Oneliner:
Código expandido:
Método 2:
Oneliner:
Código expandido:
Graças a @cuonglm por sua sugestão.
Efetivamente, você pode usar
$REPLY
essa é a variável padrão onderead
lê a entrada.fonte
$REPLY
vez dechar
variável.