Posix

將文件的每一行讀入一個變數

  • May 8, 2020
$ 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。

您正在閱讀三行,這意味著呼叫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(預設為空格)。

引用自:https://unix.stackexchange.com/questions/568155