echo cart | { IFS= read -r spo; printf '%s\n' "$spo"; }
Будет работать (сохранять выходные данные echoбез завершающего символа новой строки в spoпеременной), пока выводится echoтолько одна строка.
Вы всегда можете сделать:
assign() {
eval "$1=\$(cat; echo .); $1=\${$1%.}"
}
assign spo < <(echo cart)
Следующие решения будут работать в bashсценариях, но не по bashприглашению:
shopt -s lastpipe
echo cat | assign spo
Или:
shopt -s lastpipe
whatever | IFS= read -rd '' spo
Для сохранения вывода whateverдо первых символов NUL ( bashпеременные не могут хранить символы NUL) в $spo.
Или:
shopt -s lastpipe
whatever | readarray -t spo
хранить выходные данные whateverв $spo массиве (одна строка на элемент массива).