Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #16834

Re: Incorrect / Inconsistent behavior with nameref assignments in functions

Path csiph.com!goblin3!goblin1!goblin.stu.neva.ru!usenet.stanford.edu!not-for-mail
From Greg Wooledge <wooledg@eeg.ccf.org>
Newsgroups gnu.bash.bug
Subject Re: Incorrect / Inconsistent behavior with nameref assignments in functions
Date Fri, 28 Aug 2020 13:17:26 -0400
Lines 64
Approved bug-bash@gnu.org
Message-ID <mailman.1624.1598635053.2469.bug-bash@gnu.org> (permalink)
References <a20e4692-69b3-9836-4861-3e822e407ef7@binarus.de> <20200828152846.GI931@eeg.ccf.org> <5ad2613b-c2d4-d774-fbfb-eec77770b014@binarus.de> <20200828171726.GK931@eeg.ccf.org>
NNTP-Posting-Host lists.gnu.org
Mime-Version 1.0
Content-Type text/plain; charset=us-ascii
X-Trace usenet.stanford.edu 1598635053 9860 209.51.188.17 (28 Aug 2020 17:17:33 GMT)
X-Complaints-To action@cs.stanford.edu
To bug-bash@gnu.org
Envelope-to bug-bash@gnu.org
Mail-Followup-To bug-bash@gnu.org
Content-Disposition inline
In-Reply-To <5ad2613b-c2d4-d774-fbfb-eec77770b014@binarus.de>
User-Agent Mutt/1.10.1 (2018-07-13)
Received-SPF none client-ip=139.137.100.1; envelope-from=wooledg@eeg.ccf.org; helo=mail.eeg.ccf.org
X-detected-operating-system by eggs.gnu.org: First seen = 2020/08/28 11:22:53
X-ACL-Warn Detected OS = Linux 2.2.x-3.x [generic] [fuzzy]
X-Spam_score_int -14
X-Spam_score -1.5
X-Spam_bar -
X-Spam_report (-1.5 / 5.0 requ) BAYES_00=-1.9, KHOP_HELO_FCRDNS=0.4, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no
X-Spam_action no action
X-BeenThere bug-bash@gnu.org
X-Mailman-Version 2.1.23
Precedence list
List-Id Bug reports for the GNU Bourne Again SHell <bug-bash.gnu.org>
List-Unsubscribe <https://lists.gnu.org/mailman/options/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=unsubscribe>
List-Archive <https://lists.gnu.org/archive/html/bug-bash>
List-Post <mailto:bug-bash@gnu.org>
List-Help <mailto:bug-bash-request@gnu.org?subject=help>
List-Subscribe <https://lists.gnu.org/mailman/listinfo/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=subscribe>
X-Mailman-Original-Message-ID <20200828171726.GK931@eeg.ccf.org>
X-Mailman-Original-References <a20e4692-69b3-9836-4861-3e822e407ef7@binarus.de> <20200828152846.GI931@eeg.ccf.org> <5ad2613b-c2d4-d774-fbfb-eec77770b014@binarus.de>
Xref csiph.com gnu.bash.bug:16834

Show key headers only | View raw


On Fri, Aug 28, 2020 at 06:20:04PM +0200, Binarus wrote:
> However, the main question is why leaving away the -a and -i in the
> second script makes things work as expected.

I'll leave aside my usual rant about -i for now.  Here's your original
code:

#!/bin/bash

function Dummy() {

  local -n namerefArray="$1"
  local -a -i myArray=("${namerefArray[@]}")

  local -p
}

declare -a -i myArray=('1' '2' '3')

Dummy 'myArray'


Here's a variant of it, to try to figure out what's going on.

unicorn:~$ cat f1
#!/bin/bash

f() {
  local -n ref="$1"
  local -a -i myArray=("${ref[@]}" 420 69)
  local -p
}

declare -a -i myArray=('1' '2' '3')
f 'myArray'
declare -p myArray
unicorn:~$ ./f1
myArray=([0]="420" [1]="69")
ref=myArray
declare -ai myArray=([0]="1" [1]="2" [2]="3")


Here we can see that a local array variable is created, and populated with
our two static elements.  After returning from the function, the caller's
array is still untouched, so we did not trample the global variable.
It was definitely local.

So the "error" here appears to be that the expansion of "${ref[@]}"
results in zero words.

If we take out the -i then we get the same result.

If we put the -i back in and take out the -a, we also get the same result.

If we take out BOTH the -a and the -i, then we get:

unicorn:~$ ./f1
myArray=([0]="1" [1]="2" [2]="3" [3]="420" [4]="69")
ref=myArray
declare -ai myArray=([0]="1" [1]="2" [2]="3")

Your guess is as good as mine what's happening here.  I'll just continue
to stick with my defensive programming.

Back to gnu.bash.bug | Previous | Next | Find similar


Thread

Re: Incorrect / Inconsistent behavior with nameref assignments in functions Greg Wooledge <wooledg@eeg.ccf.org> - 2020-08-28 13:17 -0400

csiph-web