请参阅我之前关于汇总特定字符串here的问题。
我得到了这个问题的答案,但不幸的是,这些信息实际上并没有帮助我完成我想要实现的目标。
使用该帖子中的信息,我已经能够汇编以下字符串集:gnuplot -e "filename='output_N.csv'" 'plot.p'
其中N被整数的字符串表示替换。
在下面的循环将解释:(其实,有可能做这个循环,你可能想指出一个更好的办法 - 希望下面的代码不会打乱的人太多了......)
1 #!/bin/bash
2 n=0
3 for f in output_*.csv
4 do
5 FILE="\"filename='output_"$n".csv'\""
6 SCRIPT="'plot.p'"
7 COMMAND="gnuplot -e $FILE $SCRIPT"
8 $COMMAND
9 n=$(($n+1))
10 done
不幸的是,这不起作用... gnuplot确实运行,但是给出了以下错误消息:
"filename='output_0.csv'"
^
line 0: invalid command
"filename='output_1.csv'"
^
line 0: invalid command
"filename='output_2.csv'"
^
line 0: invalid command
"filename='output_3.csv'"
^
line 0: invalid command
...
所以,正如我之前所说,我不是bash的专家。我的猜测是某些东西没有被正确解释 - 要么被解释为不应该被解释为的字符串,要么它被解释为不应该被解释为字符串? (只是一个猜测?)
如何解决此问题?
我的gnuplot脚本的前几行(相关)如下:
(注意使用作为命令行参数输入的变量filename
。请参阅此link。)
30 fit f(x) filename using 1:4:9 via b,c,e
31
32 plot filename every N_STEPS using 1:4:9 with yerrorbars title "RK45 Data", f(x) title "Landau Model"
答案 0 :(得分:-2)
轻松修复 - 我用引号搞错了。 (""
)
基本上,文本"
周围需要引号"
和filename='output_"$n".csv'
的唯一原因是,在执行命令之前,bash会正确解释此字符串!因此,当命令gnuplot -e "filename='output_0.csv'" 'plot.p'
直接输入终端时程序运行是正确的,但在预先组装字符串时不需要引号。 (这有点难以解释,但希望在你的脑海中清楚地表明2之间的区别。)
因此上述代码的更正版本为:
1 #!/bin/bash
2 n=0
3 for f in output_*.csv
4 do
5 FILE="filename='output_"$n".csv'"
6 SCRIPT='plot.p'
7 COMMAND="gnuplot -e $FILE $SCRIPT"
8 $COMMAND
9 n=$(($n+1))
10 done
现在已经纠正并正常工作。请注意删除转义的双引号。