Per Greg's Wiki the IFS variable is used:

  • In the read command, if multiple variable-name arguments are specified, IFS is used to split the line of input so that each variable gets a single field of the input.
  • When performing WordSplitting on an unquoted expansion, IFS is used to split the value of the expansion into multiple words.
  • When performing the "$*" or "${array[*]}" expansion,the first character of IFS is placed between the elements in order to construct the final output string.
  • When doing "${!prefix*}", the first character of IFS is placed between the variable names to make the output string.
  • IFS is used by complete -W under programmable completion

So my question is, why should IFS have to come into play in variable assignment? Per the below, bash is applying word-splitting on the string on the right(a:b:c:d).

$ IFS=: s=a:b:c:d
$ echo $s
a b c d

1 Answer 1


It doesn't. You need to quote properly. Word splitting is applied to unquoted expansions according to the value of IFS. The problem is your echo command, not the assignment.

 $ ( IFS=: s=a:b:c:d typeset -p s )
declare -- s="a:b:c:d"

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .