On Fri, Mar 16, 2018 at 09:14:13AM -0400, Boruch Baum wrote:
> In GNU bash, version 4.4.18(1)-release (x86_64-pc-linux-gnu), the first
> line of the documentation for readarray / mapfile states:
> 
>    Read lines from the standard input ...
> 
> However, it doesn't seem to accept input from a pipe. It would be
> helpful to note that.

It does.  What you're running into is the fact that each component of
the pipeline is run in a separate subshell, so any variables assignments
made during the pipeline (including read or mapfile) are lost once the
pipeline is completed.

https://mywiki.wooledge.org/BashFAQ/024

Demonstration:

wooledg:~$ printf %s\\n one two | (mapfile -t array; declare -p array)
declare -a array=([0]="one" [1]="two")
wooledg:~$ declare -p array
bash: declare: array: not found

The "array" variable was created in a subshell, so it's gone once
the pipeline has finished.

Reply via email to