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

时间:2011-11-10 07:29:48

标签: 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>>' >> /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>>'

但是,如果我改变行

,我就不会理解了
check_dbtag=`grep "<<include /home/$user/cvs/dbtag.conf>>" /etc/dbtag.conf`

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

然而$user不再插值。

如何正确插入变量而没有任何错误?

1 个答案:

答案 0 :(得分:2)

在您的机器上评估后退标记,而不是目标机器。我这样做:

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

根据您是否希望在主机或目标计算机上评估$user,您可能还希望使用$转义\$

您需要将$check_dbtag转移到\$check_dbtag,因为您希望 在目标计算机上进行评估。