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
up vote 4 down vote accepted

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"

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.