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