A resposta de Goro funcionará, mas deve-se notar que substituição de comando remove novas linhas à direita conforme especificado pelo padrão POSIX . Assim, pode não ser desejável onde você deseja realmente fazer iterações em todos os caracteres, mesmo os não imprimíveis. Outra questão é que o loop de estilo C é usado no bash e no ksh93, mas não no padrão (também conhecido como POSIX-comliant) /bin/sh
. A forma ${variable:index:offset}
de expansão de parâmetro também é do tipo bashism e não é especificada por POSIX definições de expansão de parâmetro (embora suportadas por ksh93
e zsh
).
No entanto, há uma maneira de iterar todos os caracteres no arquivo de forma portável e de uma forma muito mais prática . Isso é para usar awk
:
# all characters on the same line
$ awk '{for(i=1;i<=length;i++){ printf "%c",substr($0,i,1); system("sleep 1");}; print}' input.txt
# all characters on separate lines
$ awk '{for(i=1;i<=length;i++){ print substr($0, i, 1); system("sleep 1"); }}' input.txt
Com este comando, substr()
e system()
são especificados em POSIX awk e vai, de fato, iterar sobre todos os personagens.