Почему этот код PHP не работает в командной строке с двойными кавычками в Linux

У меня есть доступ к серверу Ubuntu с PHP 7.0. Я могу без проблем запустить следующий код:

php -r "echo 'hello world';"

Но когда я добавляю оператор присваивания следующим образом:

php -r "echo 'hello world'; $t = 'hello world';"

Я получаю следующую ошибку:

Ошибка синтаксического анализа PHP: синтаксическая ошибка, неожиданное ‘=’, ожидаемый конец файла в коде командной строки

Я только что понял при наборе этого вопроса, что это, вероятно, происходит, потому что оболочка пытается оценить $t, Есть ли способ заставить его не оценивать $t? Я спрашиваю, потому что код будет содержать одинарные кавычки. Я полагаю, что простым решением было бы заменить одинарные кавычки в коде на двойные кавычки, но если есть способ сделать это без изменения кода, это может быть полезно знать.

1

Решение

  1. Вы можете использовать одинарные кавычки для php-кода, но тогда вы не можете использовать их внутри php-кода.
  2. экранировать все специальные символы оболочки в коде php с помощью \т.е.

    php -r "echo 'hello world'; \$t = 'hello world';"
0

Другие решения

Чтобы предотвратить подстановку переменных оболочки в вашем скрипте, вы должны заключить код в одинарные кавычки и использовать двойные кавычки внутри. Если по какой-либо причине вам нужно иметь одинарные кавычки в своем фрагменте кода, тогда избегайте их с обратной косой чертой:

php -r 'echo \'hello world\'; $t = \'hello world\';'
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector