如何在C-shell echo命令中包含换行符?

时间:2012-04-02 16:58:24

标签: unix csh

这听起来非常容易,而且还有其他贝壳。但我似乎无法弄清楚如何获得回显来显示换行符。例如 -

cat myFile

显示实际存在的文件,这就是我想要的 -

this
is
my
file

而我的脚本,其中包含以下内容 -

#!/bin/csh
set var = `cat myFile`
echo "$var"

删除所有新行,这不是我想要的 -

this is my file

提前致谢。

2 个答案:

答案 0 :(得分:6)

问题不在于echo命令,而是在csh处理反引号时。执行时

set var = `cat myFile`

来自myfile的新内容永远不会存储在$var中;他们被转换为空间。我无法想出任何强制csh变量来包含从文件中读取的换行符的方法,尽管可能有办法实现。

sh及其衍生品的行为方式与您想要的一样。例如:

$ x="`printf 'foo\nbar'`"
$ echo $x
foo bar
$ echo "$x"
foo
bar
$ 

赋值的双引号会导致保留换行符(最后一行除外)。 echo $x用空格替换换行符,但echo "$x"会保留换行符。

最好的办法是尝试将文件内容存储在变量中。您在评论中说,您正在尝试发送包含日志文件内容的电子邮件。因此,将文件的内容直接提供给您正在使用的任何邮件命令。我没有详细说明,但它可能看起来像这样:

( echo this ; echo that ; echo the-other ; cat myFile ) | some-mail-command

强制性参考:http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

答案 1 :(得分:1)

在shell将它们串在一起之前,你可以使用Awk用'\ n'分隔每一行。

set var = `cat myfile | awk '{printf("%s\\n", $0)'}`

假设您的echo命令将“\ n”解释为换行符,echo ${var}应该重现cat myfile而无需额外的文件访问权限。如果无法识别换行代码,您可以尝试将-e标志添加到echo和/或使用/ bin / echo。