5

Perl ワンライナーをバッチ ファイルにラップしたいと考えています。(簡単な) 例として、Unix シェルでは、次のようなコマンドを引用できます。

perl -e 'print localtime() . "\n"'

しかし、DOS は次の役立つエラー メッセージでそれを妨害します。

-e 行 1 の EOF の前のどこにも文字列ターミネータ "'" が見つかりません。

.bat ファイル内でこれを行う最善の方法は何ですか?

4

5 に答える 5

13

Windows上のPerlのものについては、傾いた楊症候群にならないように、可能な限り一般化された引用符を使用するようにしています。DOSが必要とするものの引用符を保存します。

perl -e "print scalar localtime() . qq(\n)"

印刷の最後に改行が必要な場合は、-lスイッチに次のように指示することができます。

perl -le "print scalar localtime()"

スイッチを使用して実行できるその他の優れた機能については、perlrunのドキュメントを参照してください。

于 2008-09-25T00:08:23.833 に答える
8

Windowsの「DOSプロンプト」(cmd.exe)では、一重引用符ではなく二重引用符を使用する必要があります。引用されたPerlコードの内部では、Perlは多くのオプションを提供します。3つは:

perl -e "print localtime() . qq(\n)"
perl -e "print localtime() . $/"
perl -le "print ''.localtime()"

Perl 5.10以降を使用している場合:

perl -E "say scalar localtime()"

JFセバスティアンのコメントに感謝します。

于 2008-09-25T00:08:33.630 に答える
2

Windows NT +での一般的なバッチファイルの場合、^文字は多くのことをエスケープします(<> |&)が、引用符の場合、それらを2倍にすると不思議になります。

C:\>perl -e "print localtime() . ""\n"""
Thu Oct  2 09:17:32 2008
于 2008-10-02T14:18:29.163 に答える
1

まず、DOSシェルはuniqのようにコマンドラインを解析しないため、これに対する答えはコマンド固有です。解析されていない文字列全体をコマンドに渡します。コマンドは分割を行います。そうは言っても、/ subsystem:consoleを使用する場合、Cランタイムはmain()を呼び出す前に分割を提供し、ほとんどのコマンドはこれを使用します。

アプリケーションがこの分割を使用している場合、リテラルの二重引用符を入力する方法は、それを2倍にすることです。だからあなたはするだろう

perl -e "print localtime() . ""\n"""
于 2008-09-25T01:59:32.817 に答える
1

DOSでは、Perlコマンドの前後に「」を使用します。DOSシェルは、通常のUnixシェルのように一重引用符を使用しません。

perl -e "print localtime();"
于 2008-09-25T00:09:13.830 に答える