プロが教えるわが家の防犯対策術!

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
--------------------------------

A 回答 (2件)

基本的には #1 の通り「\+改行」を空白に置き換えるという処理をしてるから, かな.


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

この回答への補足

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

CSHって変なんでしょうか?

補足日時:2008/12/26 14:11
    • good
    • 0

行末に \ があると次の行に連結されます。


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

この回答への補足

レス有難うございます。「連結される」ということはシェルは、上述【例】を以下のように解釈しているのですよね?

my_command -opt_a hoge_a # -opt_b hoge_b_tmp -opt_b hoge_b

これは"#"という変な引数があるとしてmy_commandに怒られてしまいそうなのです。。

補足日時:2008/12/26 14:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!