2011-08-11 13 views
2
methods() { 
     cat <<-! 
     start 
     stop 
     restart 
     reload 
     status 
     methods 
     ! 
} 

私は古代の貝殻で、ここで、ドキュメントのエラー私のhere-docs(<< - )が私に構文エラーを与えているのはなぜですか?

syntax error: unexpected end of file 
+1

クローズアップ投票者に:本当に?あなたは 'bash'はプログラミングではないと思っていますか?_あなたはそこにその質問の中で定義されている関数があるのを見ていますか? – paxdiablo

答えて

5

を取得していますこれは正しいです、あなたは正確にタグと一致する必要があります。行の先頭に

methods() { 
     cat <<! 
     start 
     stop 
     restart 
     reload 
     status 
     methods 
! 
} 

はい、あなたは!続く単一のタブにマーカーを設定するcat <<'^I!'のようなトリッキーなことを行うことができにもかかわらず:意味

bash(およびそれ以前のシェル)は、データラインのすべての先頭タブと処理前の終了マーカーを削除する<<-バリエーションで修正されました。そうすれば、あなたはまだうまくインデントできます

methods() { 
     cat <<-! 
     start 
     stop 
     restart 
     reload 
     status 
     methods 
     ! 
} 

しかし、但し書きに注意してください:それはは、一般的に空白ではない、タブを取り除きます。その!文字の前にスペース(またはのタブ以外の文字、印刷可能なものなど)がある場合は機能しません。

あなたがviを使用している場合は、それ以外の場合はxdod -xcbはあなたのファイルの進ダンプを与えることができ、少し良くない文字を見ることが:set listを入力することができます。

+0

ありがとうございました –

+0

初期のシェルは「本当に古代」を意味します。 7th Edition Unix(1979)はそれをサポートしていませんでしたが、私はSystem III(と私はSystem Vが確かに確信しています)は、 –

+0

ありがとう、@ジョナサン、私の進歩的な年を指摘してください:-) – paxdiablo

関連する問題