Linux操作系统。在将文件内容设置为环境变量时如何保留行?

时间:2012-09-24 11:54:42

标签: linux shell environment-variables newline

我有一个包含多行的文件。 在shell中使用cat / more / less [file]时,
内容逐行显示

执行以下命令时:

temp=`cat [file]`
echo $temp

内容显示在一行中。

在设置环境变量然后回显它时,有没有办法保留行结尾?

由于

3 个答案:

答案 0 :(得分:12)

是:

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

魔法在$temp左右的引号中;没有它们,echo得到这些论点:

echo line1\nline2\nlin3

shell解析算法会将命令行拆分为空格,因此echo会看到三个参数。如果引用变量,echo将看到一个参数,并且shell解析不会触及引号之间的空格。

答案 1 :(得分:0)

这是一个非常精确的答案:将变量流程替换为保留:

  • 任何ASCII NUL
  • 任意数量的尾随换行符

只有后者可以解决:

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开头时)。

在任何情况下,总是引用你的变量,或者shell会将空格分成任意数量的参数!

printf %s "$temp"

通常,将文件的完整内容保存在shell变量中并不是您想要的。有文件。

答案 2 :(得分:-1)

如果我执行以下操作,则会保留换行符:

echo a >> test
echo b >> test
temp=`cat test`
echo $temp