$ 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
您正在阅读三行,这意味着调用read
三次:
{
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
(默认为空格)分隔的所有位置参数。