Bash shell脚本中的HERE文档中的引号
G'day 使用shell脚本时出现语法错误,如下所示: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>>
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)