0

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

如您所见 - 引号不见了。我们在这里看到的来自列表值的默认打印。

4

2 回答 2

1

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

通过编写"echo \"\"hi\"\"",您将得到一个包含echo ""hi"". 这是因为\将被“吃掉”(它也是一个转义字符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\"\"
于 2014-09-07T14:30:44.957 回答
0

您正在通过多个字符串解释器传递您的字符串。首先是 Specman,然后是你的 shell 的字符串解释器。

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

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

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

于 2014-09-09T15:16:03.383 回答