1. ホーム
  2. linux

[解決済み] コマンド出力を変数に格納する際に、改行を保持する方法は?

2022-04-21 17:41:26

質問

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コマンドそのものが原因なのかはわかりません。

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

どのように解決するのですか?

引用 という変数があります。以下はその理由です。

$ 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 シェルは改行をスペースと同じようにセパレータと見なすので、改行を見ることはありません。