[#44310] プログラムに対して意図したとおりの文字列を渡す方法 — "Information Kanasansoft" <kanasansoft@...>

kanasanです。

9 messages 2007/12/05

[#44332] クラス:相互参照系の作成方法について質問です — "Saburoh Sakai" <sabroh@...>

はじめまして、さかいと申します。

12 messages 2007/12/11

[#44366] Rake改善プロジェクト — "Hajime Hoshi" <hajimehoshi@...>

東京大学修士 1 年の星一と申します。

14 messages 2007/12/19

[ruby-list:44316] Re: プログラムに対して意図したとおりの文字列を渡す方法

From: "U.Nakamura" <usa@...>
Date: 2007-12-05 15:54:21 UTC
List: ruby-list #44316
こんにちは、なかむら(う)です。

In message "[ruby-list:44314] Re: プログラムに対して意図したとおりの文字列を渡す方法"
    on Dec.06,2007 00:18:44, <kanasansoft@gmail.com> wrote:
| test.rbに渡すコマンド引数のescapeのルールが知りたいのです。
| 
| 例えば、csvであれば、
| ・値に「,」「"」及び改行があれば「"」で括る
| ・「"」は「""」のようにescapeする
| JSONであれば
| ・文字列は「"」で括るが、文字列中に「"」があれば「/"」とescapeする
|  (制御文字についての説明は省略)
| のように、明確なルールがあります。
| 
| Rubyのコマンドライン引数に文字列を指定する場合の
| 約束事がわからないため、
| escapeしようとしてもできずに困っています。

(1) ワイルドカードの展開を抑制する場合は「'」でくくる
(2) 空白文字は「"」または「'」でくくる
(3) 「"」は「'」または「"」でくくる
    (つまり「'"'」または「"""」)
(4) 「'」は「"」でくくる
    (つまり「"'"」)
(5) シェルがcmd.exeの場合、「<」「>」「|」「&」「^」などの特
    殊文字は「"」でくくる。これはcmd.exeのルールですので、詳
    しくはWindowsのヘルプにあたってください。

というわけで、例えば、「a " b '*c」という文字列を渡したい場合
は、「a' ''"'' 'b' '"'"'*'c」とすればいいことになります(もち
ろんもっと短く書けますが)。


それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>



In This Thread