Hi,
Current shells differ in how they split words in the arguments to
'export' and similar builtins:
A. Costa wrote:
> % foo() { export x="$@" ; }
> % foo -f --c
> export: 4: --c: bad variable name
> % echo $?
> 2
>
> It seems like it should be standard code.
>
> Remove 'export' from 'foo()' and there's no error:
>
> % foo() { x="$@" ; } ; foo -f --c ; echo $?
> 0
>
> I just tested the code in 'bash', 'ksh' and 'pdksh'; it works with no
> errors. Yet in 'posh' it gives a different error:
"$@" can be a pain, so for avoidance of confusion let's take another
example.
$ foo() { export x=$1; }; foo "-f --c"
export: 1: --c: bad variable name
The split in behaviors between shells for this construct is the same.
1. Variable expansions in what is grammatically a variable assignment
or redirection do not undergo word splitting. Variable expansions
in command names and parameters do.[1]
2. According to the grammar, variable assignments must come before the
command name.[2]
3. "export" is a special builtin, not a keyword, so grammatically it
behaves just like any other command.[3]
So posh and dash would seem to be correct, and the foo=bar arguments
to 'export' should be split.
On the other hand, the suppression of word splitting in export, local,
and readonly arguments by bash, ksh, and pdksh is a nice behavior that
is not likely to break current scripts. Would it make sense to tweak
the word splitting rules[1] to allow this behavior?
Looking forward to your thoughts,
Jonathan
[1]
http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_01
[2]
http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10_02
[3]
http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_14
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]