2012-04-02 3 views
3

これはばかげて簡単に聞こえますが、それは他のシェルと同じです。しかし、私は改行を表示するエコーを取得する方法を把握していないようです。たとえば -改行文字をCシェルの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

+0

'/ bin/echo'にアクセスできますか? – cnicutar

+0

@shelter - 以前もそれを試していたが、役に立たない。 – WhyGeeEx

答えて

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/あなたはシェル文字列彼らの前には「\ n」を持つそれぞれの行を区切るためのAwkを使用することができます

1

一緒に。

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

あなたのechoコマンドがecho ${var}は、追加のファイルへのアクセスを必要とせずにcat myfileを再現する必要があり、改行文字として「\ n」を解釈すると仮定。改行コードが認識されない場合は、echoに-eフラグを追加するか、/ bin/echoを使用してください。

+0

tcshでは動作しますが、cshでは動作しません。 –

関連する問題