echo возвращает пустую переменную $

Con bostezo para gensub

gawk '{sub(/[^.]*/,gensub(/([^.]*).*/,"\\1",1,$2)+2,$2)}1' infile
0
16.06.2019, 01:42
1 ответ

Ваш код:

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

Поскольку строка, которую вы передаете в echo, заключена в двойные кавычки, оболочка попытается раскрыть в ней любые переменные оболочки. Строка содержит две такие переменные,$x(дважды )и $_GET. Если эти переменные не имеют присвоенного значения, они будут заменены пустыми строками.

Предполагая, что вы хотите напечатать строку в файле как есть, сделайте это вместо этого:

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

Здесь я заключил строку в одинарные кавычки. Это предотвращает попытку оболочки расширить то, что выглядит в ней как переменные оболочки.

Поскольку строка с одинарными кавычками не может содержать одинарные кавычки, их нужно добавлять особым образом. Я решил добавить их как"'"(двойные одинарные кавычки )путем конкатенации с остальной частью строки.

В качестве альтернативы экранируйте каждый $в строке:

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

Третий способ — использовать цитируемый здесь -документ :

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

Таким образом, вам не нужно изменять реальную строку, чтобы оболочка обрабатывала ее правильно, и вам также не нужно помнить, что реализация некоторых оболочек echoможет выполнять дополнительные действия с C -управляющие последовательности стилей и т. д. (если вы хотите вставить их в свой код PHP ).

2
28.01.2020, 02:30

Теги

Похожие вопросы