在for循环中,在bash here文档中的gnuplot宏扩展

时间:2013-07-22 02:35:50

标签: bash for-loop escaping gnuplot

我在这里使用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

1 个答案:

答案 0 :(得分:0)

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

  

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