echo 返回一个空变量 $

echo 返回一个空变量 $

我有这个命令

echo "<?php $x=$_GET['x']; echo $x;?>" > x.php

输出文件 x.php 是:

<?php =['x']; echo ;?>

这与 $ 变量有任何关系吗?如何避免 ???,以便我在 x 文件中获得正确的 php 代码?

答案1

你的代码:

echo "<?php $x=$_GET['x']; echo $x;?>" > x.php

由于您传递给的字符串echo是双引号的,因此 shell 将尝试扩展其中的任何 shell 变量。该字符串包含两个这样的变量,$x(两次) 和$_GET。如果这些变量没有赋值,它们将被替换为空字符串。

假设您想要将字符串按原样打印到文件中,请执行以下操作:

echo '<?php $x=$_GET['"'"'x'"'"']; echo $x;?>' >x.php

在这里,我将字符串放入单身的引号。这可以防止 shell 尝试扩展其中看起来像 shell 变量的内容。

由于单引号字符串不能包含单引号,因此必须以特殊方式添加单引号。我选择"'"通过与字符串的其余部分连接将它们添加为(双引号单引号)。

或者,转义$字符串中的每个:

echo "<?php \$x=\$_GET['x']; echo \$x;?>" >x.php

第三种方法是使用引用的此处文档:

cat <<'PHP_END' >x.php
<?php $x=$_GET['x']; echo $x;?>
PHP_END

这样,您就不必修改实际的字符串来使 shell 正确处理它,并且您也不必记住某些 shell 的实现echo可能会使用 C 风格转义序列等执行其他操作(如果您想要将它们插入到您的 PHP 代码中)。

相关内容