0

我正在使用 bash here 文档(<< EOF构造)将输入传递给 gnuplot 脚本,如下面的 MWE 所示。使用空文件的名称作为参数调用它。该脚本产生错误消息

more> do for [count=0:nsteps] {;  @DOPLOT
                              ^
      line 0: invalid character @

         line 0: Unexpected }

我目前的解决方法是使用 eval,但是,最好了解发生了什么。我可能需要逃避 at 角色@,但对谷歌没有运气。有趣的是,将宏调用放在大括号之后是{有效的。

#!/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
4

1 回答 1

0

这是由一个错误引起的。从错误报告的答案 http://sourceforge.net/p/gnuplot/bugs/1264/

通常,输入命令是通过读取“足够”输入来完成命令然后解释它来组装的。宏替换是解释的第一步。但是在某些情况下,包括你遇到的那个,在解释过程中程序发现它必须通过读入额外的输入行来扩展命令。不幸的是,它未能重新检查扩展命令的新部分中的宏。

于 2013-08-16T23:45:26.293 回答