我正在学习将BASH列表传递给Gnuplot而不生成中间文件。我找到的答案非常有用(Christoph在Set parameters of Gnuplot from array in bash script)。代码如下。
我对两个符号感到困惑。一个是 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
####
答案 0 :(得分:1)
这里的文档是从shell变量构造的。 ${params[*]}
是“数组params
中连接成字符串的所有元素”的bash代码。它不是所有的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
因此,结果是gnuplot会对set grid
和set xrange[0:10]
进行评估,就像您手动输入它们一样。