ファイルの各行を変数として読み込みます。

ファイルの各行を変数として読み込みます。
$ IFS= read a b c << 'EOF'
> line 1
> line 2
> line 3
> EOF

$ printf '<%s> <%s> <%s>\n' "$a" "$b" "$c"
<line 1> <> <>

各行を変数として読みたいです。したがって、<line 1> <line 2> <line 3>例では印刷されます。そしてPOSIXを維持してください。

ファイルにバックスラッシュを追加してIFSを台無しにしようとしました。

ベストアンサー1

3行を読んでいます。これはread3回の呼び出しを意味します。

{
    IFS= read -r a
    IFS= read -r b
    IFS= read -r c
} <<'END_INPUT'
line 1
line 2
line 3
END_INPUT

printf '<%s> <%s> <%s>\n' "$a" "$b" "$c"

これを必要な数の行に一般化します。

set --
while IFS= read -r line; do
   set -- "$@" "<$line>"   # cheating here by adding on the "<...>"
done <<'END_INPUT'
line 1
line 2
line 3
line 4
END_INPUT

printf '%s\n' "$*"

"$*"最初の文字で$IFS区切られたすべての位置パラメータを含む単一引用符文字列に展開されます(デフォルトは空白)。

おすすめ記事