Bash shell脚本中的HERE文档中的引号

Bash shell脚本中的HERE文档中的引号,bash,shell,interpolation,Bash,Shell,Interpolation,G'day 使用shell脚本时出现语法错误,如下所示: ssh root@mm-$user-vm-lenny <<EOF check_dbtag=`grep "<<include /home/$user/cvs/dbtag.conf>>" /etc/dbtag.conf` if [ "$check_dbtag" == "" ] then echo '<<include /home/$user/cvs/dbtag.conf>>

G'day

使用shell脚本时出现语法错误,如下所示:

ssh root@mm-$user-vm-lenny <<EOF

check_dbtag=`grep "<<include /home/$user/cvs/dbtag.conf>>" /etc/dbtag.conf`

if [ "$check_dbtag" == "" ]
then
    echo '<<include /home/$user/cvs/dbtag.conf>>' >> /etc/dbtag.conf
fi 
EOF
sshroot@mm-$user vm lenny>/etc/dbtag.conf
fi
EOF
我得到的错误是

-bash: line 21: syntax error near unexpected token 'newline'
-bash: line 21: 'check_dbtag=<<include /home/thomasw/cvs/dbtag.conf>>'
-bash:line 21:意外标记“newline”附近的语法错误
-bash:第21行:“check_dbtag=”
然而,如果我改变路线,我就再也不明白了

check_dbtag=`grep "<<include /home/$user/cvs/dbtag.conf>>" /etc/dbtag.conf`
check_dbtag=`grep”“/etc/dbtag.conf`

check_dbtag=`grep'/etc/dbtag.conf`
但是,
$user
不再插值


如何正确插值变量而不产生任何错误

后勾号是在您的机器上计算的,而不是在目标机器上。我会这样做:

check_dbtag=\$(grep "<<include /home/$user/cvs/dbtag.conf>>" /etc/dbtag.conf)
检查\u dbtag=\$(grep”“/etc/dbtag.conf)
根据您是否希望在主机或目标计算机上对
$user
进行评估,您可能还希望使用
\$
转义
$

您需要将
$check\u dbtag
转义到
\$check\u dbtag
,因为您希望在目标机器上对其进行评估。

否,您没有发现错误,预标记不是代码,它们不会禁用特殊字符的解释。如果需要,可以缩进四个空格或使用代码标记。我为您修复了它…我以为
标签会自动插入该编辑器的
——我以前从未使用过
标签。直到。
check_dbtag=\$(grep "<<include /home/$user/cvs/dbtag.conf>>" /etc/dbtag.conf)