我在这里使用bash文档(<< EOF
构造)将输入传递给gnuplot脚本,如下面的MWE所示。使用空文件的名称作为参数调用它。
该脚本生成错误消息
more> do for [count=0:nsteps] {; @DOPLOT
^
line 0: invalid character @
line 0: Unexpected }
我目前的解决方法是使用eval,但是,理解正在发生的事情会很好。我可能需要逃脱角色@
,但谷歌没有运气。
有趣的是,将宏调用放在打开的大括号{
之后。
#!/bin/bash
if [ -z "$1" ]
then
echo "usage: $0 <input file>"
exit
fi
inf="$1"
/usr/bin/env gnuplot << EOF
load "$inf"
set macros
DOPLOT="pause 0.25"
print "works:"
@DOPLOT
print "works:"
do for [count=0:1] { @DOPLOT
}
print "works:"
do for [count=0:1] {
eval DOPLOT
}
print "doesn't work:"
do for [count=0:1] {
@DOPLOT
}
EOF
答案 0 :(得分:0)
这是由一个错误引起的。 从错误报告的答案 http://sourceforge.net/p/gnuplot/bugs/1264/
通常,通过读取“足够”输入来组装输入命令以完成命令然后解释它。宏替换是解释的第一步。但在某些情况下,包括你遇到的那个,在解释过程中,程序发现它必须通过读入额外的输入行来扩展命令。不幸的是,它没有在扩展命令的新部分中重新检查宏。