You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Shell的echo命令时为何字符串部分内容消失?

为什么echo命令里的$_GET消失了?

这个问题其实是shell的变量解析机制在搞鬼,我来给你拆解清楚:

问题根源

当你用双引号"包裹字符串时,Bash(以及绝大多数Linux shell)会自动扫描字符串里的变量引用——也就是所有以$开头的内容。在你的命令里,$_GET并不是shell环境中已定义的变量,所以shell会直接把它替换成空字符串。这样一来,原本的$_GET["name"]就变成了["name"],最终写入文件的内容自然就丢失了$_GET部分。

解决办法

有两种简单的方式可以避免这个问题:

1. 使用单引号包裹整个字符串

单引号'在shell中会完全禁用变量解析,里面的所有内容都会被原样输出,不会被shell修改。修改后的命令如下:

echo -e '<?php\nprint_r($_GET["name"]);' > print.php

执行这个命令后,print.php里的内容就会和你预期的一致:

<?php
print_r($_GET["name"]);

2. 转义$符号

如果你一定要使用双引号,可以把$符号用反斜杠\转义,告诉shell不要把它当成变量处理。修改后的命令:

echo -e "<?php\nprint_r(\$_GET[\"name\"]);" > print.php

这里的\$会被shell识别为普通的$字符,不会触发变量解析,最终也能得到正确的PHP代码。

另外小提醒:在PHP里,数组索引用单引号也很常见,你也可以写成$_GET['name'],这样在双引号里不需要转义内部的引号,写法更简洁:

echo -e "<?php\nprint_r(\$_GET['name']);" > print.php

内容的提问来源于stack exchange,提问作者Learning Team

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:01:22