通过shell脚本用gnuplot画图中的"$"问题

今天在用shell脚本进行批量画图时遇到一个关于“$”符号的小问题,后来解决了,在此备忘。

问题

画图命令中要对数据进行运算,这时就要用到$1,$2表示数据文件的第一和第二列,我第一次代码如下所示:
#!/bin/bash
echo "
set term png size 1280, 720
set output './ef.png'
set style data linespoints
set key top right
set xlabel 'x'
set ylabel 'y'
plot 'data.dat' u 1:($1-log($2))
' | gnuplot
exit 0
在运行时就会提示表达式不对,后来才发现脚本中的“$”有问题:在gnuplot中它应该表示某一列数据,但是在shell脚本中(如echo "$var"这样的命令中)表示取用变量,明显在上述脚本中"$"优先表示shell命令中的取用变量功能,而不是gnuplot中取用某列数据的功能,所以发生了错误。

解决方法

思路:

在shell中echo 有两种用法:

1.  echo "the var is $var"
2.  echo 'the var is $var'

以上两种做法的差别仅在于使用双引号还是单引号,第一种做法中的双引号能保有变量var的内容,如var=5,第一种用法显示的结果就是:

the var is 5

而第二种用法中的单引号内仅是一般字符,不会对"$" 进行解释,则第二种用法的显示结果为:

the var is $var
解决方法:

依照以上思路,只需将脚本中echo命令后面的双引号换成单引号,画图命令中的“$”就能正确的表达,为了避免混淆,脚本中其他各处原来的单引号均换成双引号,改后的程序如下:

#!/bin/bash
echo '
set term png  size 1280, 720
set output "./ef.png"
set style data linespoints
set key top right 
set xlabel "x"
set ylabel "y"
plot "data.dat" u 1:($1-log($2)) 
' | gnuplot
exit 0 

结束。

你可能感兴趣的:(通过shell脚本用gnuplot画图中的"$"问题)