Bash脚本echo输出变量名而非值的问题排查
问题原因及解决办法
核心原因:你用单引号包裹了echo的输出内容。在Bash中,单引号属于「强引用」,会把内部所有内容原样输出,包括变量名
${site_url},不会进行变量值的替换。而脚本其他地方变量正常,是因为那些场景没有用单引号包裹变量。解决办法:
有两种常见修改方式:- 把外层的单引号改成双引号,同时对XML属性里的双引号进行转义(用
\"):echo "<?xml version=\"1.0\" standalone=\"yes\"?> <url>https://${site_url}</url> ... " > /var/www/$site_url/system_config/config.xml - 混合使用单引号和双引号,将变量部分单独用双引号包裹,和单引号内容拼接:
echo '<?xml version="1.0" standalone="yes"?> <url>https://'"${site_url}"'</url> ... ' > /var/www/$site_url/system_config/config.xml
- 把外层的单引号改成双引号,同时对XML属性里的双引号进行转义(用
补充说明:Bash中引号规则:
- 单引号:内部所有字符(除了
\'用来转义单引号)都原样输出,不解析变量、特殊字符。 - 双引号:会解析内部的变量、转义字符(比如
\"、\$等),其他字符原样输出。
- 单引号:内部所有字符(除了
内容的提问来源于stack exchange,提问作者Regular User
相关产品推荐
相关产品推荐

