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

Why*_*eEx 3 unix csh

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

cat myFile
Run Code Online (Sandbox Code Playgroud)

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

this
is
my
file
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/csh
set var = `cat myFile`
echo "$var"
Run Code Online (Sandbox Code Playgroud)

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

this is my file
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Kei*_*son 6

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

set var = `cat myFile`
Run Code Online (Sandbox Code Playgroud)

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

sh及其衍生物确实按照你想要的方式行事.例如:

$ x="`printf 'foo\nbar'`"
$ echo $x
foo bar
$ echo "$x"
foo
bar
$ 
Run Code Online (Sandbox Code Playgroud)

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

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

( echo this ; echo that ; echo the-other ; cat myFile ) | some-mail-command
Run Code Online (Sandbox Code Playgroud)

必要参考:http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/