Busy Boxはファイルを1行ずつ読み込みます。

Busy Boxはファイルを1行ずつ読み込みます。

ビジーボックスには読み取りアプレットは含まれていません。

busyboxを使用してtxtファイルを1行ずつ読み込む方法はありますか?

今私が持っているのは

while read line
do
     echo $line
done < "$InputFile"

ベストアンサー1

readシェル組み込み関数です(それ以外の場合はシェル変数を設定できません)。

したがって、あなたのbusyboxshがに基づいている場合は、ash次のようになります。

while IFS= read -r line <&3; do
  printf '%s\n' "$line"
done 3< "$InputFile"

POSIXシェルと同じです。しかし、他の殻と同様にループを使用してwhile readテキストを処理することは、通常、悪いシェルスクリプトの実践です。

上記では、以下が必要です。

  • IFS=それ以外の場合は、エスケープされていない先行スペースと末尾のスペースとタブが行から削除されます。
  • -rそれ以外の場合、バックスラッシュはエスケープ文字として処理され削除されます(エスケープされていない場合)。
  • printfecho、例えば働かない代わりに-nene
  • "$line"引用符で囲みます(いいえ$line)。それ以外の場合、行の内容はスペースとタブに分割され、ワイルドカードパターンが展開されます。
  • <&3そして、3< ...ループ内で生のstdinにアクセスする必要がある場合。

ファイルの最後の行の後に文字が含まれていて、それを表示したい場合は、ループの後に追加できます。

[ -z "$line" ] || printf %s "$line"

このループはバイナリデータ(NUL文字)を処理できません。

おすすめ記事