On 5/12/14, 9:33 AM, Geir Hauge wrote:
> 2014-05-12 14:11 GMT+02:00 Greg Wooledge <wool...@eeg.ccf.org>:
> 
>> On Sat, May 10, 2014 at 12:22:40PM +0200, thioroup8 wrote:
>>> Now, I source it from inside a function: I obtain following error
>> message:
>>> bash: declare: tmp: not found
>>> I think this problem raises in the particular case of involving array
>>> variables definitions inside sourced bash script file...
>>
>>>   cat << "EOF" > "${file_to_be_sourced}"
>>> declare -a tmp='([0]="1" [1]="2")'
>>> EOF
>>
>> The problem is that you are using "declare" within the file-to-be-sourced.
>> When you source the file inside a function, Bash runs the declare command
>> within the context of the function, where declare has the same meaning as
>> "local".  Thus, it makes the variable local to the function.
> 
> 
> There really is a bug here, a weird one. Using a simplified script, we
> see that this works as expected:

Yep. Thanks for the report.  The issue is that the `placeholder' attribute
doesn't get unset when the argument is quoted -- it takes a different code
path than when it's unquoted.  I've attached a patch for people to
experiment with.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    c...@case.edu    http://cnswww.cns.cwru.edu/~chet/
*** ../bash-4.3-patched/arrayfunc.c	2014-03-28 10:54:21.000000000 -0400
--- arrayfunc.c	2014-05-12 11:19:00.000000000 -0400
***************
*** 180,183 ****
--- 180,184 ----
    FREE (newval);
  
+   VUNSETATTR (entry, att_invisible);	/* no longer invisible */
    return (entry);
  }

Reply via email to