echo cart | { IFS= read -r spo; printf '%s\n' "$spo"; }
Funcionaria (armazena a saída de echo sem o caractere de nova linha à direita na variável spo ), contanto que echo produza apenas uma linha.
Você sempre pode fazer:
assign() {
eval "$1=\$(cat; echo .); $1=\${$1%.}"
}
assign spo < <(echo cart)
As soluções a seguir funcionariam em bash scripts, mas não no prompt bash :
shopt -s lastpipe
echo cat | assign spo
Ou:
shopt -s lastpipe
whatever | IFS= read -rd '' spo
Para armazenar a saída de whatever até os primeiros caracteres NUL ( bash variables não podem armazenar caracteres NUL) em $spo .
Ou:
shopt -s lastpipe
whatever | readarray -t spo
para armazenar a saída de whatever na matriz $spo (uma linha por elemento da matriz).