这听起来简单得可笑,而且它是与其他 shell 。但是我似乎不知道如何让echo显示换行符。例如:
cat myFile
显示文件的实际存在,这就是我想要的-
this is my file
而我的剧本,其中包含以下内容-
#!/bin/csh set var = `cat myFile` echo "$var"
删除所有的换行符,这不是我想要的-
先谢了。
qxgroojn1#
问题不在于echo命令,而在于csh对反引号的处理。当你执行
echo
set var = `cat myFile`
来自myfile的新行永远不会存储在$var中;它们被转换为空格。我想不出有什么方法可以强制csh变量包含从文件中读取的换行符,尽管可能有一种方法可以做到这一点。sh及其衍生物确实按照您想要的方式运行。举例来说:
myfile
$var
$ x="`printf 'foo\nbar'`" $ echo $x foo bar $ echo "$x" foo bar $
赋值语句上的双引号会使换行符(最后一行除外)被保留。echo $x将换行符替换为空格,但echo "$x"将保留它们。最好的办法是做一些事情,而不是试图将文件的内容存储在变量中。你在评论中说你正试图发送一封包含日志文件内容的电子邮件。因此,将文件的内容直接提供给您正在使用的任何邮件命令。我没有所有的细节,但它可能看起来像这样:
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/
lrpiutwd2#
您可以使用Awk在shell将它们串在一起之前用'\n'分隔每一行。
set var = `cat myfile | awk '{printf("%s\\n", $0)'}`
假设echo命令将“\n”解释为换行符,则echo ${var}应重新生成cat myfile,而无需额外的文件访问。如果无法识别换行代码,可以尝试将-e标志添加到echo和/或使用/bin/echo。
echo ${var}
cat myfile
xkftehaa3#
如果每一行都没有空格,可以在需要时将变量内部的空格转换为换行符
echo $var | tr " " "\n"
如果每一行都有空格,那么在将所有行存储到变量中之前,只需将每一个换行符转换为其他内容。
3条答案
按热度按时间qxgroojn1#
问题不在于
echo
命令,而在于csh对反引号的处理。当你执行来自
myfile
的新行永远不会存储在$var
中;它们被转换为空格。我想不出有什么方法可以强制csh变量包含从文件中读取的换行符,尽管可能有一种方法可以做到这一点。sh及其衍生物确实按照您想要的方式运行。举例来说:
赋值语句上的双引号会使换行符(最后一行除外)被保留。
echo $x
将换行符替换为空格,但echo "$x"
将保留它们。最好的办法是做一些事情,而不是试图将文件的内容存储在变量中。你在评论中说你正试图发送一封包含日志文件内容的电子邮件。因此,将文件的内容直接提供给您正在使用的任何邮件命令。我没有所有的细节,但它可能看起来像这样:
强制性参考:http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/
lrpiutwd2#
您可以使用Awk在shell将它们串在一起之前用'\n'分隔每一行。
假设echo命令将“\n”解释为换行符,则
echo ${var}
应重新生成cat myfile
,而无需额外的文件访问。如果无法识别换行代码,可以尝试将-e标志添加到echo和/或使用/bin/echo。xkftehaa3#
如果每一行都没有空格,可以在需要时将变量内部的空格转换为换行符
如果每一行都有空格,那么在将所有行存储到变量中之前,只需将每一个换行符转换为其他内容。