没有使用call命令进行变量替换

时间:2017-03-19 10:19:52

标签: gnuplot

我有一个gnuplot脚本(模板)看起来像这样(稍微缩短一点):

#!/bin/bash
F1=file_1
F2=file_2    
pdffile=output.pdf
#
term="terminal pdfcairo enhanced fontscale .3 lw 3" 
out="output '$pdffile'"
#
gnuplot -persist << EOF 
#
set $term
set $out
#
call "statistic-file.txt"  
#
#  ... (some formating instructions removed) 
#
plot  "$F1"  w l lt 1 lc rgb "red"   t "Graph1" ,\
      "$F2"  w l lt 1 lc rgb "green" t "Graph2"        
EOF
okular $pdffile

F1 F2是我的数据文件的变量。通过&#34;呼叫&#34;命令我尝试包含&#34; statistic-file.txt&#34;其中也使用变量F1 F2。这个文件看起来像这样(也缩短了):

#
stats "$F1" u 2 nooutput name "Y1_"
stats "$F1" u 1 every ::Y1_index_min::Y1_index_min nooutput
X1_min = STATS_min
stats "$F1" u 1 every ::Y1_index_max::Y1_index_max nooutput
X1_max = STATS_max
#
# etc 
#
 set label  \
      front center point pt 6 lc rgb "red" ps 1.0 \
      at first X1_max,Y1_max tc rgb "red" \
      sprintf("%.0f kW / %.0f°", Y1_max, X1_max)

执行脚本,我收到一条错误消息:

"statistic-file.txt", line 2: Invalid substitution $F

粘贴&#34; statistic-file.txt&#34;的内容进入模板文件,然后它的工作原理。看起来第二个文件中的变量与模板文件中的变量无关。我更喜欢2文件解决方案,但如何解决呢?有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

一种解决方案可能是将这些变量的定义移动到正在生成的Gnuplot模板中并直接使用它们,即

#!/bin/bash

pdffile=output.pdf
#
term="terminal pdfcairo enhanced fontscale .3 lw 3" 
out="output '$pdffile'"
#
gnuplot -persist << EOF 
#
F1="file_1"
F2="file_2"
set $term
set $out
#
call "statistic-file.txt"  
#
#  ... (some formating instructions removed) 
#
plot  F1  w l lt 1 lc rgb "red"   t "Graph1" ,\
      F2  w l lt 1 lc rgb "green" t "Graph2"        
EOF

文件statistic-file.txt中也需要进行类似的更改,例如stats F1 u 2 nooutput name "Y1_"而不是stats "$F1" u 2 nooutput name "Y1_"

答案 1 :(得分:2)

您正在混合使用bash变量和gnuplot变量。 $F1是一个bash变量,仅在bash脚本中被bash替换。在“statistic-file.txt”中,bash什么都不替换,gnuplot抱怨未知$F1

您可以尝试将bash变量$F1“转换”为gnuplot变量datafile1,如下所示:

#!/bin/bash

F1="file_1"

gnuplot -persist << EOF 

datafile1="$F1"
call "statistic-file.txt"
plot datafile1 w lp

EOF

使用以下statistic-file.txt:

stats datafile1

然后bash用相应的文件名替换$F1,gnuplot使用自己的变量datafile1,即使在随后调用的“statistic-file.txt”中也是如此。

仅为完整性:错误消息“无效替换$ F”来自gnuplot 4,gnuplot 5抱怨“没有数据锁名为$ F1”。