Variable
echo 返回一個空變數 $
我有這個命令
echo "<?php $x=$_GET['x']; echo $x;?>" > x.php
輸出文件 x.php 是:
<?php =['x']; echo ;?>
這與 $ 變數有什麼關係嗎?以及如何避免???,以便我在 x 文件中獲得正確的 php 程式碼?
你的程式碼:
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 程式碼中)。