esx busyboxシェルスクリプト、whileを使用して変数から1行ずつ読み込む

esx busyboxシェルスクリプト、whileを使用して変数から1行ずつ読み込む

file1ESX ホストには大きな名前のファイルがあります。ファイルに対していくつかのコマンドを実行し、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つの「読み込み中」ループではローカルですが、一見似ている他のループではローカルではないのはなぜですか?最初のものを使用する場合。

おすすめ記事