【发布时间】:2012-06-21 13:00:46
【问题描述】:
我正在尝试使用 set for cycle 命令为 gnuplot 环境设置变量。 我使用的是 4.6 版本,根据gnuplot documention (page 70),语法如下:
for [intvar = start:end{:increment}]
for [stringvar in "A B C D"]
Examples:
set for [i = 1:10] style line i lc rgb "blue"
但我得到这个错误:
gnuplot> set for [var in gpvars] replace(var,'#_#',' ')
^
line 0: Unrecognized option. See 'help set'.
我的脚本:
#!/bin/bash
OUTDIRNAME="out"
TIMEFORMAT='%d.%m.%y'
GPPARS=( "xlabel "Time"" "ylabel "value1"" "y2label "value2"" "format x "%H:%M"")
GPPARS_MOD=()
for (( i=0; i < ${#GPPARS[@]}; i++)); do
FILE=${GPPARS[${i}]}
echo "arg=${FILE}"
GPPARS_MOD+=( "`echo "${FILE}" | sed -e 's/ /#_#/g'`" )
done
gnuplot << EOF
reset
replace(S,C,R)=(strstrt(S,C)) ? \
replace( S[:strstrt(S,C)-1].R.S[strstrt(S,C)+strlen(C):] ,C,R) : S
set terminal png
set output "${OUTDIRNAME}/graph.png"
set timefmt "${TIMEFORMAT}"
set xdata time
gpvars="${GPPARS_MOD[@]}"
set for [var in gpvars] {
replace(var,'#_#',' ')
}
...
EOF
...
exit 0
我也在使用函数替换,因为空格(gnuplot 忽略转义序列)该函数可以完美地用于循环绘图。 我尝试过使用和不使用函数以及使用不带空格的变量,但结果是一样的。
【问题讨论】:
-
我有点困惑你想在这里设置什么......在一个设置命令中你需要设置一些东西(例如
set label或set arrow)。您正在尝试的类似于stringvar="foo"; set stringvar,这也是一个语法错误。 -
@mgilson stringvar 的值来自数组 GPARS_MOD。所以在第一次迭代的正文中应该是这样的:
set xlabel "Time" -
我明白了。我现在正在写一个答案。
标签: bash variables for-loop gnuplot