我有一个包含多行的文件。
在shell中使用cat / more / less [file]时,
内容逐行显示
执行以下命令时:
temp=`cat [file]`
echo $temp
内容显示在一行中。
在设置环境变量然后回显它时,有没有办法保留行结尾?
由于
答案 0 :(得分:12)
是:
temp=`cat [file]`
echo "$temp"
魔法在$temp
左右的引号中;没有它们,echo
得到这些论点:
echo line1\nline2\nlin3
shell解析算法会将命令行拆分为空格,因此echo
会看到三个参数。如果引用变量,echo
将看到一个参数,并且shell解析不会触及引号之间的空格。
答案 1 :(得分:0)
这是一个非常精确的答案:将变量流程替换为不保留:
只有后者可以解决:
temp=$(realprocess; echo x) ## Add x to the end to preserve trailing newlines
temp=${temp%x} ## Remove the x again (keeping originally trailing newlines)
如果要显示变量的真实内容,请使用printf
。 echo
添加了一个额外的换行符,并且不可靠(例如,当输入以字符串-n
开头时)。
在任何情况下,总是引用你的变量,或者shell会将空格分成任意数量的参数!
printf %s "$temp"
通常,将文件的完整内容保存在shell变量中并不是您想要的。有文件。
答案 2 :(得分:-1)
如果我执行以下操作,则会保留换行符:
echo a >> test
echo b >> test
temp=`cat test`
echo $temp