我正在尝试将一个字符串从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"
如你所见 - 引号已经消失。我们在这里看到的是来自列表值的默认打印。
答案 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命令。