我在脚本中使用$时遇到问题
#!/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被识别为全局变量?)因此代码不起作用。
如何在此脚本中使用$?
谢谢
答案 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/