1

ユーザーが「フォーマット文字列」を入力する必要があるRubyコマンドラインアプリケーションを作成しています(Date.strptime/strftimeの文字列によく似ています)。

コマンドの引数としてそれらを取り込んでみました。

> torque "%A\n%d\n%i, %u"

しかし、bash は実際には、入力を処理する前にすべてのバックスラッシュを入力から削除しているようです (さらに、スペースに関する多くの問題もあります)。より高度な入力オプションがいくつかありますが、バックスラッシュ "\" -> "\\" を自動的にエスケープし、代替オプションを提供しないhighline gemも試しました。

私の現在の解決策は、検索と置換を行うことです: "\\n" -> "\n". これで問題は解決しますが、ハックでひどいようにも見えます。

ユーザーに文字列をテキスト ファイルに書き込んでもらうか (ユーザーにとっては複雑)、「&&」などの他の文字を改行として扱うこともできます (ユーザーにとっては依然として複雑です)。

ユーザーがコマンドラインでエスケープ文字を入力する最良の方法は何ですか?

(更新: strptime/strftime のドキュメントを確認しました。これらの関数の書式文字列は、改行文字を "%n" に、タブを "%t" に置き換えます。したがって、今のところそれを行っていますが、他の提案はありません大歓迎です)

4

2 に答える 2

2

あなたが探しているのは、二重引用符の代わりに単一引用符を使用することです。

したがって:

> torque '%A\n%d\n%i, %u'

一重引用符で囲まれた文字列は'eg.'、展開されずに使用されas isます。

詳細については、 のQuotingセクションを参照してくださいman bash

からman bash:

文字を一重引用符で囲むと、引用符内の各文字のリテラル値が保持されます。バックスラッシュが前にある場合でも、単一引用符の間に単一引用符が出現しない場合があります。

于 2013-08-09T14:57:57.033 に答える