tee helps.
#! /bin/bash
marker="/tmp/marker"
mystring=''
mydelimiter='::'
reset_marker(){
>"$marker"
}
for i in $(seq 10)
do
mystring+=$(date 2>&1 | tee "$marker")
[ -s "$marker" ] && mystring+=$mydelimiter
reset_marker
done
mystring+=$(echo 'hello there how are you' 2>&1 | tee "$marker")
[ -s "$marker" ] && mystring+=$mydelimiter
reset_marker
mystring+=$(wc -l /etc/passwd 2>&1 | tee "$marker")
[ -s "$marker" ] && mystring+=$mydelimiter
reset_marker
# now to concatanate empty output from echo command
for i in $(seq 20)
do
mystring+=$(echo 2>&1 | tee "$marker")
[ -s "$marker" ] && mystring+=$mydelimiter
done
echo "$mystring"
echo "$(echo "$mystring" | sed -e 's/::/\n/g')"