$ 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行を読んでいます。これはread
3回の呼び出しを意味します。
{
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
区切られたすべての位置パラメータを含む単一引用符文字列に展開されます(デフォルトは空白)。