2

私はperlの初心者で、Perlスクリプトからオペレーティングシステムコマンドを実行しようとしています。

オペレーティングシステムのコマンドはで実行されIPC::Open3、コマンドは次のようになります。

$cmd = "mycommand --add \"condition LIKE '%TEXT%' \"";

このコマンドは、「追加」の後に含まれる文字列をデータベースに挿入することになっています。

%TEXT%問題は、次のように、一重引用符なしでデータベースにレコードを挿入することです。

condition LIKE %TEXT%

コマンドプロンプトでコマンドを実行すると、文字列が正しく挿入されます。

データベースに正しく挿入されるように、二重引用符と一重引用符をどのようにフォーマットする必要がありますか?

助けてくれてありがとう

4

2 に答える 2

5

コマンドを1つの文字列に入れることで、システムのシェルを通過させることができます。(それがcmd.exeかbashか他の楽しいものかどうかは言及しません。)

提案:

  1. システムコマンドを文字列の配列として作成すると、シェルがコマンドラインを再補間する必要がなくなります。 @cmd = ('mycommand', '--add', q(condition LIKE '%TEXT%'));

  2. シェルから一重引用符を保護するために、余分な円記号を入れてください。コマンドの前に付けるechoと、デバッグに役立つ場合があります。

  3. (私の個人的なお気に入り)データベースアクセスのためにシェルアウトしないでください。 use DBI

于 2013-03-01T21:34:07.723 に答える
0
$cmd = q{mycommand --add "condition LIKE '%TEXT%'"};

qqは二重引用符q用、は一重引用符用です。

このように、コマンド全体をそのまま使用します。

于 2013-03-02T06:21:16.103 に答える