• 締切済み

c shellスクリプト中のエスケープとコメントアウト

c shellスクリプトで改行コード(文末の"\n")をエスケープしたい場合に関して伺いたく思っています。以下のように「my_command」というコマンドに、幾つかオプションをつけるような場合、改行コードをエスケープして見やすく記述したいような場合を想定しています。 ある行をコメントアウトするとき(下の例の "<-")、その行の末尾に"\"が必要なようです。 しかし、これがどうしてコメント行の最後をエスケープしないといけないのか、あるいは、どうしてコメントが有効に働くのか、不思議に思っています。 SHELLがどのような処理手順をとっているから"\"があると有効に処理されるのか、教えていただけませんでしょうか? 【推測1】 [改行コードまで読む] --> [式を評価] ... この処理だと > my_command -opt_a hoge_a # -opt_b hoge_b_tmp -opt_b hoge_b が評価され、正しくオプションが渡せない。。。 ※ 一行づつ式を評価をしながら"\n"があるまで読みこみ、"\n"を発見したら子シェルを起動する、という手順で正しいのでしょうか? 【例】 -------------------------------- #! /bin/csh -f my_command -opt_a hoge_a \ # -opt_b hoge_b_tmp \ <-- -opt_b hoge_b --------------------------------

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

基本的には #1 の通り「\+改行」を空白に置き換えるという処理をしてるから, かな. この場合って -opt_b は my_command に渡されましたっけ? もしそうなら Cシェルで「コメントの処理」と「継続行の処理」が変なところで混ざってる可能性が高いです. Cシェルはわりと「い~かげん」なところがあるので, インタラクティブに使うならともかくスクリプトを書くためには使わない方がいいと思うけど....

tk_1980024
質問者

補足

コメント有難うございます。 > この場合って -opt_b は my_command に渡されましたっけ? はい、-opt_b hoge_b はきちんと渡っています。 CSHって変なんでしょうか?

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.1

行末に \ があると次の行に連結されます。 これはUNIX系の習慣。C言語のマクロなど一行にかけない場合 行末の\ で次の行と連結します。

tk_1980024
質問者

補足

レス有難うございます。「連結される」ということはシェルは、上述【例】を以下のように解釈しているのですよね? my_command -opt_a hoge_a # -opt_b hoge_b_tmp -opt_b hoge_b これは"#"という変な引数があるとしてmy_commandに怒られてしまいそうなのです。。

関連するQ&A

専門家に質問してみよう