[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: More fun with IFS
From: |
Dan Douglas |
Subject: |
Re: More fun with IFS |
Date: |
Fri, 01 Mar 2013 01:11:15 -0600 |
User-agent: |
KMail/4.8.3 (Linux/3.4.6-pf+; KDE/4.8.3; x86_64; ; ) |
On Wednesday, February 27, 2013 01:31:58 PM Thorsten Glaser wrote:
> Why whitespace? $IFS certainly contains none. And the usual
> insertion rules all specify the first character of $IFS and
> specify what to do if $IFS is empty or unset (which it isn’t
> in these examples).
Well, ok then. I'm just nitpicking here. I think this makes sense because it
distinguishes between $@ and $* when assigning to a scalar, so that the end
result of $@ is always space-separated, as spaces delimit words during command
parsing. Your way would make more sense to me if this were the Bourne shell
where IFS is in charge of both the initial argument splitting and field
splitting. In this case though it seems strange to use IFS to represent
separate words.
Consider for example if you ever implement "${@@Q}". Because of this behavior,
the integrity of the result can only be guaranteed with a default IFS during
assignment. This can be demonstrated with zsh which implements the same
expansion (with different syntax) and uses the same assignment rules as mksh.
$ zsh -s <<\EOF
emulate ksh
typeset -a cmd
cmd=(echo w:x y:z)
IFS=: x=${(q)cmd[@]} # Now we're in trouble
typeset -p x
unset -v IFS # Different problem whether or not we go back to default.
eval $x
EOF
typeset x=echo:w:x:y:z
zsh:1: command not found: echo:w:x:y:z
> Yeah, of course, it’s the only way to do some things… I personally
> usually abstract everything eval into little functions of their
> own and then just use those.
>
I agree that's an excellent strategy. :)
--
Dan Douglas
- Re: More fun with IFS,
Dan Douglas <=