我有一个包含几行的文件。在shell中使用cat/more/less [file]时,
内容逐行显示
执行以下命令时:
temp=`cat [file]`
echo $temp
内容显示在一行中。
有没有办法在设置环境变量时保留行尾然后回显它?
谢谢
我有一个包含几行的文件。在shell中使用cat/more/less [file]时,
内容逐行显示
执行以下命令时:
temp=`cat [file]`
echo $temp
内容显示在一行中。
有没有办法在设置环境变量时保留行尾然后回显它?
谢谢
是的:
temp=`cat [file]`
echo "$temp"
魔法就在周围的引号中$temp
;没有他们,echo
得到这些论点:
echo line1\nline2\nlin3
shell 解析算法将在空白处拆分命令行,因此会echo
看到三个参数。如果引用变量,echo
将看到一个参数,并且 shell 解析不会触及引号之间的空格。
这是一个超精确的答案:进程替换到变量中不会保留:
只有后者可以解决:
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 变量中并不是您想要的。有文件。
如果我执行以下操作,则会保留换行符:
echo a >> test
echo b >> test
temp=`cat test`
echo $temp