解析引号的specman问题

时间:2014-09-07 12:45:19

标签: specman

我正在尝试将一个字符串从unix shell导入到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"

如你所见 - 引号已经消失。我们在这里看到的是来自列表值的默认打印。

2 个答案:

答案 0 :(得分:1)

我不熟悉output_from操作,但我认为它将输入字符串视为shell命令。

通过编写"echo \"\"hi\"\"",您将获得的是一个包含echo ""hi""的字符串。这是因为\将被“吃掉”#34; (它也是e中的转义字符)。结果字符串将被执行,如果你在shell中尝试也将输出相同的东西。尝试添加转义\。我不太可能很快启动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\"\"

答案 1 :(得分:0)

您将字符串传递给多个字符串解释器。第一个Specman's,然后是你的shell的字符串解释器。

您可以首先通过打印出要传递给shell的命令来调试通过Specman的解释器获取字符串

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

一旦打印的命令看起来就像在shell上执行它一样,那么它就可以放入output_from命令了。您可以使用普通的Specman字符串操作函数构建shell命令。