On Sun, Jan 12, 2025 at 16:10:03 -0500, Chet Ramey wrote: > This is a combination of two rules: characters in IFS are field > terminators, not separators, and when `read' is supplied fewer > variables than fields, > > "Any remaining input in the original field being processed shall be > returned to the read utility "unsplit"; that is, unmodified except that any > leading or trailing IFS white space, as defined in 2.6.5 Field Splitting > shall be removed." > > Which basically means that the last variable gets everything else on > the line, including non-whitespace IFS characters.
Part of the pitfall is that this isn't always true. In this case, we get the "expected" result: hobbit:~$ IFS=, read -r field1 rest <<< 'ab,cd,ef,' hobbit:~$ declare -p field1 rest declare -- field1="ab" declare -- rest="cd,ef," In this case, we don't: hobbit:~$ IFS=, read -r field1 rest <<< 'ab,ef,' hobbit:~$ declare -p field1 rest declare -- field1="ab" declare -- rest="ef"