read
é um shell embutido (não poderia definir uma variável de shell se não fosse).
Então, se o seu busybox sh
for baseado em ash
, é:
while IFS= read -r line <&3; do
printf '%s\n' "$line"
done 3< "$InputFile"
Como em qualquer shell POSIX. Mas, como acontece com qualquer shell, o uso de while read
loops para processar texto é geralmente uma prática ruim de script de shell .
Acima, você precisa:
-
IFS=
, caso contrário, os espaços e as guias sem escape e principais são removidos das linhas -
-r
, caso contrário, as barras invertidas serão tratadas como um caractere de escape e removidas (a menos que tenham escapado) -
printf
, nãoecho
que não funcionaria para linhas que são, por exemplo,-nene
-
"$line"
entre aspas (não$line
), caso contrário, o conteúdo da linha será dividido em espaços e tabulações e os padrões de distribuição serão expandidos. -
<&3
e3< ...
, se você precisar acessar o stdin original dentro do loop.
Se o arquivo contiver caracteres após a última linha e você quiser exibi-los, você poderá adicionar após o loop:
[ -z "$line" ] || printf %s "$line"
Observe que esse loop não pode manipular dados binários (o caractere NUL
).