コマンド出力を変数に保存するときに改行を保持するにはどうすればよいですか?


106

Linuxでbashシェルを使用しています。私はこの簡単なスクリプトを持っています…

#!/bin/bash

TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP

ただし、このスクリプトを実行すると

./temp.sh

すべての出力は、キャリッジリターン/新しい行なしで印刷されます。出力を$ TEMPに保存する方法なのか、echoコマンド自体なのかわからない。

コマンドの出力を変数に保存し、改行/キャリッジリターンを保持するにはどうすればよいですか?


3
それらは変数に問題なく保存されます(最後のものを除く)。壊れているのはあなたのエコーです。mywiki.wooledge.org/BashPitfallsエントリー#14
Charles Duffy

1
また、にdon't保存commandsvariablesます。代わりにUsefunction
ハン・ソロ

回答:


207

変数を引用します。理由は次のとおりです。

$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"

$ echo $f
fafafda adffd adfadf adfafd afd

$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd

引用符がない場合、シェルは$TEMPそれに含まれる文字(そのうちの1つは改行)に置き換えられます。次に、echoシェルを呼び出す前に、Internal Field Separator(IFS)を使用してその文字列を複数の引数に分割し、結果の引数のリストをに渡しますecho。デフォルトでは、IFSは空白(スペース、タブ、改行)に設定されているため、シェルは$TEMP文字列を引数に切り刻み、改行がスペースと同じように区切り文字と見なされるため、改行が表示されません。


xdotool type "$myVar"動作しません。それはまだ新しい行なしで変数の内容を入力しています
azerafati 2017

次のようなことをしたい場合はどうなりますかFOO="$(echo $VAR)"$VARすでに引用符の中にある場合、どのように適切に引用しますか?
weberc2

@ weberc2あなたは単にそれをもう一度引用します:"$(echo "$VAR")"。はい、解析するのは奇妙ですが、シェルの方が私たちよりも明らかに簡単です。
OJFord

3

私は同じ問題に遭遇しました、引用は助けになります

ubuntu@host:~/apps$ apps="abc
> def"
ubuntu@host:~/apps$ echo $apps
abc def
ubuntu@host:~/apps$ echo "$apps"
abc
def

2
以前の回答に新しい詳細を追加したり、新しいソリューションを提供したりせずに、ほぼ5年後に質問に回答することは、良い考えではありません。このような回答は投稿しないでください。
MAChitgarha

1
@MAChitgarhaは、あなたの「ほぼ5年」の精度を愛する:)
ニールGatenby
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.