On Tue, Dec 09, 2008 at 09:14:51AM -0500, Chet Ramey wrote:
> > 
> > Hello i would like to pass an array to my script command line argument, but
> > only the first element of the array is displayed.  Here is my process :
> > 
> > script1:
> > my_array=(el1 el2 el3)
> > script2 -f $my_array
> 
> You're only passing the first element of the array to script2.  An
> unsubscripted word expansion expands to the first element of an array.
[...]

More exactly, an unsubscripted word expansion expands to the
element of subscript 0 or to the empty string if that element is
not defined.

After

a[12]=foo

The first element is "foo", but $a expands to the empty string.

$a is a shortcut for ${a[0]} and a=bar is a shortcut for a[0]=bar 

This is similar to ksh but different from zsh where arrays and
scalars are of different types, and arrays are not scarse arrays
but normal arrays. In zsh, a[12]=foo allocates an array of 12
elements, the first 11 being empty; $a is the same as $a[*] and
is the list of non-empty elements in $a. Doing a=foo, would
change the type of $a to be a scalar, so you'd lose all the
array elements. The OP's code is actually zsh (or rc/es) syntax,
though it would make more sense to do:

scalar -f "[EMAIL PROTECTED]"

which would work the same in bash, ksh93 and zsh (and in zsh, it
wouldn't discard the empty elements, contrary to $my_array).

-- 
Stéphane


Reply via email to