2012-04-02 254 views
3

這聽起來很容易,而且與其他shell一樣。但我似乎無法弄清楚如何得到echo來顯示換行符。例如 -如何在C shell echo命令中包含換行符?

cat myFile 

顯示文件,因爲它確實存在,這就是我想要的東西 -

this 
is 
my 
file 

,而我的劇本,其中包含以下 -

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

刪除所有換行符,這不是我想要的 -

this is my file 

提前致謝。

+0

嘗試在將值捕獲到var時添加引號,即'set var =「\'cat myFile \'''。祝你好運。 – shellter 2012-04-02 17:02:14

+0

你有權訪問'/ bin/echo'嗎? – cnicutar 2012-04-02 17:02:58

+0

@shelter - 曾經嘗試過,也沒有幫助。 – WhyGeeEx 2012-04-02 17:03:57

回答

6

問題不在於echo命令,它與csh的反引號處理有關。當您從myfile執行

set var = `cat 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

您可以使用awk的外殼字符串之前界定與「\ n」各行一起。

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

假設你的echo命令將演繹「\ n」作爲換行符,echo ${var}應該重現cat myfile,而不需要額外的文件訪問。如果新行代碼未被識別,您可以嘗試添加-e標誌以回顯和/或使用/ bin/echo。

+0

工作在tcsh,但不是csh。 – 2015-05-24 09:39:51