0

unix シェルから specman のプログラム空間に文字列をインポートしようとしています。インポートしたい文字列に引用符 ("") が含まれています (例: "hi")。このような場合、文字列は適切に解析されません。たとえば、引用符で囲まれた文字列を「エコー」したい場合、次のようにします。

 %> echo echo \"\"hi\"\"

出力します

""hi""

しかし、eで書かれた次のプログラムを使用すると:

<'
extend sys {
     run() is also{  
    print output_from("echo \"\"hi\"\"");
    stop_run();
             };
     };
'>

次の出力が得られます。

 output_from("echo \"\"hi\"\"") = 
 0.      "hi"

ご覧のとおり、引用符がなくなりました。ここに表示されているものは、リスト値のデフォルトの印刷からのものです。

4

2 に答える 2

1

アクションについては詳しくありませんoutput_fromが、入力文字列をシェル コマンドとして扱うと思います。

あなたが本質的に得るものを書くことによって"echo \"\"hi\"\""、を含む文字列ですecho ""hi""。これは、\が「食い尽くされる」ためです (エスケープ文字でeもあります)。結果の文字列は実行されるものであり、シェルで試しても同じことが出力されます。エスケープ\も追加してみてください。すぐに Specman を起動する可能性はないので、試してみる必要があります。

私の仮説をテストするには:

// just to see what happens with your original string
var some_string : string = "echo \"\"hi\"\"";
print some_string;  // should output    echo ""hi""

私のソリューションを試すには、次のようにします。

// might need to fiddle with the escaping here
var some_other_string : string = "echo \\\"\\\"hi\\\"\\\"";
print some_other_string;  // should output    echo \"\"hi\"\"
于 2014-09-07T14:30:44.957 に答える
0

複数の文字列インタープリターを介して文字列を渡しています。最初は Specman のもの、次にシェルの文字列インタープリターです。

最初にシェルに渡したいコマンドを出力することで、最初に Specman のインタープリターを介して文字列を取得することをデバッグできます

message(None,"echo [...]")`  

出力されたコマンドがシェルで実行したときのように見えたら、コマンドに入れる準備ができていますoutput_from。通常の Specman 文字列操作関数を使用して、シェル コマンドを作成できます。

于 2014-09-09T15:16:03.383 に答える