在shell脚本中编写$

时间:2014-03-17 19:00:18

标签: arrays shell gnuplot

我在脚本中使用$时遇到问题

#!/bin/sh

grep -e ' H2O ' molfra.out > H2O
grep -e ' C6F13 ' molfra_ig.out > C6F13
grep -e ' C8F17 ' molfra_ig.out > C8F17
grep -e ' C10F21 ' molfra_ig.out > C10F21
grep -e ' C16F33 ' molfra_ig.out > C16F33

cat > SNW_CFscheck.gnplt << EOF
reset
set terminal png enhanced
set output '800K_Chains.png'
set title "250 water and PFPE chained SNW 800K NVT MD"
set yrange [0:4]
set ytics 1
set grid
set xlabel "Time(ps)"
set ylabel "Number of molecules"
plot "C6F13" u ($1/10000):2 w l title "800K C_6F_{13}", \
  "C8F17" u ($1/10000):2 w l title "800K C_8F_{17}", \
  "C10F21" u ($1/10000):2 w l title "800K C_{10}F_{21}", \
  "C16F33" u ($1/10000):2 w l title "800K C_{16}F_{33}"
EOF

gnuplot SNW_CFscheck.gnplt

因此,我创建了一个名为&#39; SNW_CFscheck.gnplt&#39;使用cat命令,并执行该文件 但是在cat命令中无法识别$ 1(或者$ 1被识别为全局变量?)因此代码不起作用。

如何在此脚本中使用$?

谢谢

3 个答案:

答案 0 :(得分:4)

如果您希望$1不要展开,请按以下方式引用EOF:

cat > SNW_CFscheck.gnplt << 'EOF'
reset
set terminal png enhanced
set output '800K_Chains.png'
set title "250 water and PFPE chained SNW 800K NVT MD"
set yrange [0:4]
set ytics 1
set grid
set xlabel "Time(ps)"
set ylabel "Number of molecules"
plot "C6F13" u ($1/10000):2 w l title "800K C_6F_{13}", \
  "C8F17" u ($1/10000):2 w l title "800K C_8F_{17}", \
  "C10F21" u ($1/10000):2 w l title "800K C_{10}F_{21}", \
  "C16F33" u ($1/10000):2 w l title "800K C_{16}F_{33}"
EOF

根据man bash

  

如果有的话          单词中的字符是引用的,分隔符是单词上引用删除的结果,以及here-document中的行          没有扩大。

答案 1 :(得分:1)

您是否尝试使用转义字符?喜欢&#34; \ $&#34;?

答案 2 :(得分:1)

尝试在双引号“\ $”中转义字符。阅读更多关于Single vs Double引号效果的信息---&gt; http://linux.101hacks.com/bash-scripting/quotes-inside-shell-script/