Se você usar diretamente strings sob um loop for
, ele funcionará por palavra (aqui em uma palavra: todo o conteúdo de $test
desde sua citação), não por caractere . Você precisa usar um while
loop com read
para analisar letra por letra ou para introduzir um parâmetro numérico que interaja sobre a string.
Além disso, ao usar read
, você precisa garantir que novas linhas e espaços em branco não sejam interpretados como delimitadores e forçar read
a ler um caractere por vez.
Aqui está uma versão de trabalho:
#!/bin/bash
test="this is a
test"
printf %s "$test" | while IFS= read -r -N 1 a; do
if [[ "$a" == $'\n' ]] ; then
echo "FOUND NEWLINE"
fi
printf %s "$a"
done
Você pode substituir $'\n'
por $'2'
ou $'\x0a'
, pois todos eles representam o mesmo código de nova linha. Mas não é o mesmo que 5
ou \r
- isso significa retorno de carro (retorno ao início da linha). Nos sistemas Linux, as novas linhas são representadas usando \n
, mas no Windows, por exemplo, elas são representadas por uma sequência de \r\n
. É por isso que, se você tivesse um arquivo de texto do Windows, também poderia detectar novas linhas pesquisando \r
.