On Thu, Jul 16, 2020 at 03:52:01PM +0200, Thomas Schmitt wrote: > I tried > > echo " 34 + 45 \| abc \| 1 2 3 \| c\|123abc " | \ > sed -e 's/\\|/\n/g' | \ > mapfile -t _S_AR > > with no visible effect on the array _S_AR. bash 4.3.30 and 5.0.11.
You can't use a pipeline, because each command in the pipeline runs in a separate subshell. > This works > > echo " 34 + 45 \| abc \| 1 2 3 \| c\|123abc " | sed -e 's/\\|/\n/g' >/tmp/x > > mapfile -t _S_AR < /tmp/x Yes. Temp files are fine. > A workaround without temporary file would be > > x=" 34 + 45 \| abc \| 1 2 3 \| c\|123abc " > split=$(echo "$x" | sed -e 's/\\|/\n/g') > end=$(echo -n "$x" | sed -e 's/./+/g')"+" > > mapfile -t _S_AR <<$end > $split > $end No... just use the process substitution that I showed you already. mapfile -t myarray < <(some command) Do you need an actual demonstration? unicorn:~$ f() { printf '%s\n' ' one ' 'two' 't h r e e'; } unicorn:~$ mapfile -t a < <(f) unicorn:~$ declare -p a declare -a a=([0]=" one " [1]="two" [2]="t h r e e")