echo cart | { IFS= read -r spo; printf '%s\n' "$spo"; }
Funcionaría (almacenar la salida de echosin el carácter de nueva línea final en la spovariable) siempre que echosolo salga una línea.
Siempre puedes hacer:
assign() {
eval "$1=\$(cat; echo .); $1=\${$1%.}"
}
assign spo < <(echo cart)
Las siguientes soluciones funcionarían en bashscripts, pero no en el bashindicador:
shopt -s lastpipe
echo cat | assign spo
O:
shopt -s lastpipe
whatever | IFS= read -rd '' spo
Para almacenar la salida de whateverhasta los primeros caracteres NUL (las bashvariables no pueden almacenar caracteres NUL de todos modos) en $spo.
O:
shopt -s lastpipe
whatever | readarray -t spo
para almacenar la salida de whateveren la $spo matriz (una línea por elemento de matriz).