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

vktxenjb  于 2023-10-18  发布在  Unix
关注(0)|答案(3)|浏览(167)

这听起来简单得可笑,而且它是与其他 shell 。但是我似乎不知道如何让echo显示换行符。例如:

cat myFile

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

this
is
my
file

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

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

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

this is my file

先谢了。

qxgroojn

qxgroojn1#

问题不在于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/

lrpiutwd

lrpiutwd2#

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

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

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

xkftehaa

xkftehaa3#

如果每一行都没有空格,可以在需要时将变量内部的空格转换为换行符

echo $var | tr " " "\n"

如果每一行都有空格,那么在将所有行存储到变量中之前,只需将每一个换行符转换为其他内容。

相关问题