echo cart | { IFS= read -r spo; printf '%s\n' "$spo"; }
Funcionaria (armazenaria a saída echosem o caractere de nova linha à direita na spovariável) desde que echoemita apenas uma linha.
Você sempre pode fazer:
assign() {
eval "$1=\$(cat; echo .); $1=\${$1%.}"
}
assign spo < <(echo cart)
As seguintes soluções funcionariam em bashscripts, mas não no bashprompt:
shopt -s lastpipe
echo cat | assign spo
Ou:
shopt -s lastpipe
whatever | IFS= read -rd '' spo
Para armazenar a saída de whateveraté os primeiros caracteres NUL ( bashvariáveis não pode armazenar caracteres NUL de qualquer maneira) no $spo.
Ou:
shopt -s lastpipe
whatever | readarray -t spo
para armazenar a saída de whateverna $spo matriz (uma linha por elemento da matriz).