file1
ESX ホストには大きな名前のファイルがあります。ファイルに対していくつかのコマンドを実行し、awk
便利なデータの塊を変数として抽出しましたが、これはビジボックスシェルでうまく機能しました。
info
さて、その変数()を1行ずつ読み、何かを変更し、別のファイルに書きたいと思います。
info=$(awk '/pat1/{flag=1}/pat2/{flag=0}flag' file1) -> works fine
while IFS= read -r line; do
printf '%s\n' "$line"
done <<< "$info"
しかし、whileループは機能しません。 「予期しないリダイレクト」エラーが発生します。私も`done << "$ info"を試しました。その後、エラーが発生します。
構文エラー:予期しないファイルの終わり(「}」が必要)
それでは、基本的に変数を1行ずつ読み込む方法は何ですか?
ありがとうございます。返信ありがとうございます。
答え1
ここで、文字列リダイレクトは<<<
標準機能ではなく、Busyboxのshはそれをサポートしません。エラーメッセージは少し以上ですが、<<
おそらく<
。<<
あなたは次のことをする必要があります
echo "$info" | while IFS= read -r line; do
printf '%s\n' "$line"
done
または、一時ファイルを介してデータを渡します。
tmpfile=$(mktemp)
awk '/pat1/{flag=1}/pat2/{flag=0}flag' file1 > "$tmpfile"
while IFS= read -r line; do
printf '%s\n' "$line"
done < "$tmpfile"
rm "$tmpfile"
しかし見てください私の変数が1つの「読み込み中」ループではローカルですが、一見似ている他のループではローカルではないのはなぜですか?最初のものを使用する場合。