Eu gostaria de processar uma string de várias linhas e iterar linha por linha, em um shell POSIX ( /bin/sh
) em uma plataforma BSD. O Bash não está incluído na distribuição BSD básica e tem uma licença GPL - então estou tentando fazê-lo funcionar universalmente /bin/sh
.
Eu encontrei uma solução usando um pipe, no entanto, no /bin/sh
shell regular, eles são processados em um processo separado, o que significa que o seguinte não funciona:
MULTILINE="`cat ${SOMEFILE}`"
SOMEVAR="original value"
echo "${MULTILINE}" | while IFS= read -r SINGLELINE
do
SOMEVAR="updated value"
echo "this is a single line: ${SINGLELINE}"
echo "SOMEVAR is now: ${SOMEVAR}"
done
echo "Final SOMEVAR is unchanged: ${SOMEVAR}"
No exemplo acima, ele realiza o que eu quero, exceto pelo fato de que as alterações em variáveis como ${SOMEVAR}
não são acessíveis fora do loop while.
Minha pergunta: como posso realizar algo como o acima sem essa restrição? Observe que muitas soluções exigem Bash, enquanto estou usando o POSIX-shell padrão /bin/sh
.