String bash:将字符串作为命令执行
请参阅我前面关于组装特定字符串的问题 我得到了这个问题的答案,但不幸的是,这些信息并没有真正帮助我实现我想要实现的目标 使用那篇文章中的信息,我已经能够组合以下字符串集:String bash:将字符串作为命令执行,string,bash,gnuplot,command-line-arguments,String,Bash,Gnuplot,Command Line Arguments,请参阅我前面关于组装特定字符串的问题 我得到了这个问题的答案,但不幸的是,这些信息并没有真正帮助我实现我想要实现的目标 使用那篇文章中的信息,我已经能够组合以下字符串集:gnuplot-e“filename='output\u N.csv''plot.p',其中N被整数的字符串表示形式替换 下面的循环将解释:(实际上,可能有一种更好的方法来执行此循环,您可能想指出这一点-希望下面的代码不会让太多人感到不安…) 不幸的是,这不起作用。。。gnuplot确实运行,但给出以下错误消息: "filena
gnuplot-e“filename='output\u N.csv''plot.p'
,其中N被整数的字符串表示形式替换
下面的循环将解释:(实际上,可能有一种更好的方法来执行此循环,您可能想指出这一点-希望下面的代码不会让太多人感到不安…)
不幸的是,这不起作用。。。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
的使用,该变量是作为命令行参数输入的。请参见此。)
简单修复-我犯了一个引号错误。(
”
)
本质上,在文本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
这一点现在已得到纠正,并正在发挥作用。注意删除转义双引号。您是否尝试删除变量文件中的转义双引号和单引号??
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"
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