Date: Sun, 12 Aug 2007 22:09:24 +0300 From: Manolis Kiagias <sonicy@otenet.gr> To: Rakhesh Sasidharan <rakhesh@rakhesh.com> Cc: freebsd-questions@freebsd.org Subject: Re: Question on the IFS variable (not a FreeBSD question) Message-ID: <46BF5AE4.2010206@otenet.gr> In-Reply-To: <20070812195535.V86618@obelix.home.rakhesh.com> References: <20070812195535.V86618@obelix.home.rakhesh.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Rakhesh Sasidharan wrote: > > Hi, > > This isn't really a FreeBSD question. But I figure most people on this > list would know the answer and so I'm asking. I've tried to get the > answer out of Google, but I guess I am not asking it the right > question and so not getting much hits. > > I understand that the default value of the IFS variable in bash is > "space, tab, newline". For a script I am playing around with, I want > to change IFS to be just newline. I tried the obvious like > > IFS="\n" > -or- > IFS='\n' > > but that doesn't seem to do the trick coz then the letter "n" ends up > being the separator. > > A bit of Google searching got me the solution too. That I must set IFS > this way: > > IFS=$'\n' > > I did that, and sure enough things work the way I want! > > So my question is this: how come things work when I set IFS to $'\n' > instead of just plain '\n'? I don't recollect seeing such a way of > setting variables before, and so I'm curious about it. > > TIA, > Rakhesh > _______________________________________________ > freebsd-questions@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-questions > To unsubscribe, send any mail to > "freebsd-questions-unsubscribe@freebsd.org" > The IFS=$'\n' is, as you found, correct for bash. See some details for this in the following post: http://osdir.com/ml/shells.bash.bugs/2004-10/msg00104.html Do a little experiment (inspired from the post stated above): #export IFS="\n" #printf '<%s>\n' "$IFS" | cat -vt will give <\n> ==> not what you expect #export IFS='\n' #printf '<%s>\n' "$IFS" | cat -vt will give <\n> ==> again, not what you expect #export IFS=$'\n' #printf '<%s>\n' "$IFS" | cat -vt will give < > definitely a new line character (finally...) I am not certain of the explanation, but from the above it seems to me the IFS does not evaluate special '\something' characters unless there is a $ in front. That is, of course, what you would do to get the value of a shell variable. It seems then these characters need to be evaluated in the same way.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46BF5AE4.2010206>