web-dev-qa-db-ja.com

BourneShellの改行を変数から削除します

Bourne Shellには、次のものがあります。

VALUES=`some command that returns multiple line values`

echo $VALUES

次のようになります:

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

私はそれを次のように見せたいです:

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

誰か助けてもらえますか?

16
Chris Kannon

echo $VALUES | tr '\n' ' '

43
eliah

別の方法として、コードを出力するだけでなく、変数に割り当て、最後にスプリアススペースを持たせたくない場合:

$ 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
2
user3438686

受け入れられたソリューションは私には機能しませんでした(OS X Yosemiteで)。これは私が使用したものです:

echo -n $VALUES

1

別のオプションは、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'`"
0
chan