6

I have a file with several lines. When using cat/more/less [file] in the shell,
the content is shown line by line

When doing the following commands:

temp=`cat [file]`
echo $temp

the content is shown in one line.

Is there a way to preserve the line endings when setting to environment variable and then echo it?

Thanks

4

3 に答える 3

16

はい:

temp=`cat [file]`
echo "$temp"

魔法は周りの引用符に$tempあります; それらがなければ、echoこれらの引数を取得します:

echo line1\nline2\nlin3

シェル解析アルゴリズムはコマンドラインを空白で分割するためecho、3つの引数が表示されます。変数を引用符で囲むechoと、単一の引数が表示され、シェル解析は引用符の間の空白に触れません。

于 2012-09-24T12:01:45.713 に答える
0

これが超正確な答えです:変数へのプロセス置換は保存されません:

  • 任意のASCIINUL
  • 任意の数の末尾の改行

後者のみを回避できます。

temp=$(realprocess; echo x)  ## Add x to the end to preserve trailing newlines
temp=${temp%x}  ## Remove the x again (keeping originally trailing newlines)

変数の実際の内容を表示する場合は、を使用しますprintfecho追加の改行を追加し、信頼性がありません(たとえば、入力が文字列-nで始まる場合)。

いずれの場合も、常に変数を引用符で囲んでください。そうしないと、シェルが空白で変数を任意の数の引数に分割します。

printf %s "$temp"

一般に、ファイルの完全な内容をシェル変数に保持することは、あなたが望むものではありません。そのためのファイルがあります。

于 2012-09-24T14:24:49.227 に答える
-1

次のことを行うと、改行が保持されます。

echo a >> test
echo b >> test
temp=`cat test`
echo $temp
于 2012-09-24T12:01:21.707 に答える