Gnuplot 中的未知语法?

Unknown syntax in Gnuplot?

我正在学习将 BASH 列表传递给 Gnuplot 而无需生成中间文件。我找到的答案非常有用(来自 Set parameters of Gnuplot from array in bash script 的 Christoph)。代码如下。

我对两个符号感到困惑。一个是 " in values="${params[]}*。另一个是eval('set '.val)中的.。我没有在手册中找到语法。你能告诉我它们的用途吗?

### Code
#!/bin/bash
params[0]='grid'
params[1]='xrange[0:10]'

gnuplot -persist << EOF
values="${params[*]}
do for [val in values] {
    eval('set '.val)
}
plot x
EOF
####

这里的文档是由 shell 个变量构成的。 ${params[*]} 是 bash "all elements in the array params concatenated into a string" 的代码。这不是所有的 gnuplot 代码。

gnuplot -persist 替换为 cat 以查看 gnuplot 看到的内容:

#!/bin/bash                                                                  
params[0]='grid'                                                             
params[1]='xrange[0:10]'                                                     

cat << EOF                                                                   
values="${params[*]}                                                         
do for [val in values] {                                                     
    eval('set '.val)                                                         
}                                                                            
plot x                                                                       
EOF                                                                          

导致:

values="grid xrange[0:10]
do for [val in values] {
    eval('set '.val)
}
plot x

values="grid xrange[0:10]是变量赋值:

gnuplot> values="grid xrange[0:10]
gnuplot> print values
grid xrange[0:10]

.是字符串拼接:

gnuplot> print "foo" . "bar"
foobar

所以结果是 set gridset xrange[0:10] 由 gnuplot 评估,就像您手动输入它们一样。