Удалите разрывы строк в Bourne Shell из переменной

В оболочке bourne у меня есть следующее:

VALUES=`some command that returns multiple line values`

echo $VALUES

Похож:

"ONE"
"TWO"
"THREE"
"FOUR"

Я хотел бы, чтобы он выглядел так:

"ONE" "TWO" "THREE" "FOUR"

Может ли кто-нибудь помочь?

Ответы

Ответ 1

echo $VALUES | tr '\n' ' '

Ответ 2

Другой метод, если вы хотите не просто распечатать свой код, а назначить его переменной, а не иметь ложное пространство в конце:

$ var=$(tail -1 /etc/passwd; tail -1 /etc/passwd)
$ echo "$var"
apache:x:48:48:Apache:/var/www:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
$ var=$(echo $var)
$ echo "$var"     
apache:x:48:48:Apache:/var/www:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin

Ответ 3

Принятое решение не сработало для меня (на OS X Yosemite). Это то, что я использовал:

echo -n $VALUES

Ответ 4

Другой вариант - использовать xargs (который сохраняет окончательную новую строчку, но вместо возможного конечного пространства с помощью tr):

echo $VALUES | xargs
printf '%s\n' 1 2 3 4 5 | xargs

@yozloy: как передать экранированную строку с помощью <<<

tr -d '\n' <<< "`printf '%b' 'a line with line feed \n'`"