BusyBoxに付属する読み取りアプレットはありません。
busyboxを使用してtxtファイルを1行ずつ読み取る方法はありますか?
私が今持っているのは
while read line
do
echo $line
done < "$InputFile"
承認された回答:
読むコード> はシェルビルトインです(そうでない場合はシェル変数を設定できませんでした)。
つまり、busyboxの sh
ash
に基づいています 、それは:
while IFS= read -r line <&3; do
printf '%sn' "$line"
done 3< "$InputFile"
他のPOSIXシェルと同じように。ただし、他のシェルと同様に、 while read
テキストを処理するためのループは、一般的にシェルスクリプトの不適切な方法です。
上記に必要なもの:
-
IFS =
それ以外の場合は、先頭と末尾のエスケープされていないスペースとタブが行から削除されます -
-r
、それ以外の場合、バックスラッシュはエスケープ文字として扱われ、削除されます(エスケープされていない場合) -
printf
、echo
ではありません これは、たとえば-nene
の行では機能しません -
"$ line"
引用符で囲まれています($ line
ではありません) )それ以外の場合、行の内容はスペースとタブで分割され、グロブパターンが拡張されます。 -
<&3
および3<...
、ループ内の元のstdinにアクセスする必要がある場合。
ファイルの最後の行の後に文字が含まれていて、それらを表示したい場合は、ループの後に追加できます:
[ -z "$line" ] || printf %s "$line"
ループはバイナリデータ( NUL
)を処理できないことに注意してください 文字)。