On Thu, Jul 11, 2013 at 12:08 PM, Roland Mainz <[email protected]> wrote:
> On Thu, Jul 11, 2013 at 9:48 AM, Cedric Blancher
> <[email protected]> wrote:
>> On 10 July 2013 22:18, David Korn <[email protected]> wrote:
>>> cc: [email protected]
>>> Subject: Re: ksh93 returns "()" for "${a[@]}" if I clear an array with a=( )
>>> --------
>>>
>>>> ksh93 returns "()" for "${a[@]}" if I clear an array with a=( )
>>>
>>> a=()
>>>
>>> doesn't clear an array, it unsets a and creates an empty compound variable
>>> (
>>> )
>>>
>>> typeset -a a=()
>>>
>>> should clear an array.
>>
>> This is not very intuitive. First variable a has already be declared
>> as an array so the intuitive feeling would be that a=() resets it with
>> an empty array. 2nd your interpretation assumes that the called
>> function knows the array data type to reset it - which becomes a pain
>> if you have hundreds of types defined and try to use a utility
>> function which should reset an array of any of these types.
>>
>> I'd better go for: a=() means reset the variable if variable a is
>> either array or compound. If it isn't already a type of these make it
>> a compound variable. If variable a is of type integer or string throw
>> an error.
>> This should make things more predictable.
>
> Right... I agree with Cedric. It makes IMO more sense that $ a=() #
> declares "a" a compound variable if variable "a" wasn't declared yet
> but if variable "a" was declared as an array then $ a=() # should
> empty/clear the array and not re-declare it as compound variable (see
> Cedrics argumentation about user-defined types vs. helper functions...
> the current behaviour would require that we have to resort to
> something extract the type of the variable and then use "eval" to
> clear the array).
>
> The alternative would be to add a new option ("-c") to clear a
> variable, e.g. $ typeset -a ar ; ... ; unset -c ar # clears an array,
> $ compound c ; ... ; unset -c c # does the same for a compound
> variable etc.
>
> (Slightly) offtopic: How can I clear a plain string array (e.g. $
> typeset -a ar #) via the C API (without having to resort to
> |sh_trap()| to do it...) ?

What happened to the unset -c proposal to "clear" a variable, e.g.
reset an array/type to its default values?

Technically we're more interested in a nv_clear_array() library
function to do the same via libshell API for our builtins, but a
generic unset(1) option would do it too.

Irek
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to