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


Groups > gnu.bash.bug > #15878

Lack of documentation about mapfile callback

From Léa Gris <lea.gris@noiraude.net>
Newsgroups gnu.bash.bug
Subject Lack of documentation about mapfile callback
Date 2020-02-09 03:04 +0100
Message-ID <mailman.533.1581213907.2412.bug-bash@gnu.org> (permalink)
References <ec577c4e-963c-26b0-94d2-0c8113e4c09c@noiraude.net>

Show all headers | View raw


man bash.1
> When callback is evaluated, it is supplied the index of the next 
> array element to be assigned and the line to be assigned to that 
> element as additional arguments. callback is evaluated after the
> line is read but before the array element is assigned.

I can not find real-life implementation example of the mapfile callback
that fit the implied scenario of this behavior of invoking the callback
before the last array entry is assigned.

What I figured out by experimentation, is that while the last element is
not assigned to MAPFILE as seen from the callback context, the
assignment is effective after the callback returns.

Example:

----- BEGIN BASH
#!/usr/bin/env bash

callback() {
  echo "Entering Callback"
  printf 'Next index is: %d\n' $1
  printf 'Next entry is: %q\n' "$2"
  printf 'MAPFILE size: %d\n' "${#MAPFILE[@]}"
  typeset -p MAPFILE
  echo "Exiting Callback"
}

mapfile -t -C callback -c 3 <<'EOF'
Entry0
Entry1
Entry2
Entry3
Entry4
Entry5
Entry6
Entry7
Entry8
EOF
----- END BASH

And then the output:
----- BEGIN OUTPUT
Entering Callback
Next index is: 2
Next entry is: Entry2
MAPFILE size: 2
declare -a MAPFILE=([0]="Entry0" [1]="Entry1")
Exiting Callback
Entering Callback
Next index is: 5
Next entry is: Entry5
MAPFILE size: 5
declare -a MAPFILE=([0]="Entry0" [1]="Entry1" [2]="Entry2" [3]="Entry3"
[4]="Entry4")
Exiting Callback
Entering Callback
Next index is: 8
Next entry is: Entry8
MAPFILE size: 8
declare -a MAPFILE=([0]="Entry0" [1]="Entry1" [2]="Entry2" [3]="Entry3"
[4]="Entry4" [5]="Entry5" [6]="Entry6" [7]="Entry7")
Exiting Callback
----- END OUTPUT


It reveals the weirdness of running the callback before the last
assignment from the quantum.
First call to callback has a MAPFILE with 2 entries, while the next two
have 3 entries.
There must be a reason or an intended scenario for this implementation,
but with so few documentation and no real-world usage example, it is
unclear to me.

-- 
Lea Gris

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


Thread

Lack of documentation about mapfile callback Léa Gris <lea.gris@noiraude.net> - 2020-02-09 03:04 +0100

csiph-web